{"version":3,"file":"mass-tools.umd.min.js","sources":["../node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/reim/reimAbsolute.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xAbsolute.js","../node_modules/ml-spectra-processing/lib/x/xMedian.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xCheckLengths.js","../node_modules/ml-spectra-processing/lib/x/xDotProduct.js","../node_modules/ml-spectra-processing/lib/x/xCrossCorrelation.js","../node_modules/ml-spectra-processing/lib/x/getSortedFloat64.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlot.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlotWithOutliers.js","../node_modules/ml-spectra-processing/lib/x/xCorrelation.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xCostMatrix.js","../node_modules/ml-spectra-processing/lib/x/xCumulative.js","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/x/xEqualIntegrationVectorSimilarity.js","../node_modules/ml-spectra-processing/lib/x/xGetTargetIndex.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/fftCache.js","../node_modules/ml-spectra-processing/lib/utils/createArray.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-xsadd/lib-esm/XSadd.js","../node_modules/ml-spectra-processing/lib/utils/createRandomArray.js","../node_modules/ml-spectra-processing/lib/utils/isPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/nextPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/recursiveResolve.js","../node_modules/ml-spectra-processing/lib/utils/recursiveUntypeArrays.js","../node_modules/ml-spectra-processing/lib/x/xSubtract.js","../node_modules/ml-spectra-processing/lib/utils/calculateAdaptiveWeights.js","../node_modules/ml-spectra-processing/lib/utils/recursiveRemoveEmptyAndNull.js","../node_modules/ml-spectra-processing/lib/x/xHilbertTransform.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xHistogram.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMaxAbsoluteValue.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInvMagnitude.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInvRaw.js","../node_modules/ml-spectra-processing/lib/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xNorm.js","../node_modules/ml-spectra-processing/lib/x/xSum.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRotate.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromStep.js","../node_modules/ml-spectra-processing/lib/x/xSortDescending.js","../node_modules/ml-spectra-processing/lib/matrix/matrixClone.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCholeskySolver.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCuthillMckee.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheckRanges.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixToArray.js","../node_modules/ml-spectra-processing/lib/utils/addWeights.js","../node_modules/ml-spectra-processing/lib/x/xWhittakerSmoother.js","../node_modules/ml-spectra-processing/lib/utils/createSystemMatrix.js","../node_modules/ml-spectra-processing/lib/reim/reimPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/reimAutoPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/zeroShift.js","../node_modules/ml-spectra-processing/lib/reim/reimZeroFilling.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyCumulativeDistributionStatistics.js","../node_modules/ml-spectra-processing/lib/xy/utils/cumulativeDensity.js","../node_modules/ml-spectra-processing/lib/xy/xyEqualIntegrationVector.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib/xy/xyReduce.js","../node_modules/ml-spectra-processing/lib/xy/xySortX.js","../node_modules/ml-spectra-processing/lib/xy/xyUniqueX.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlots.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayWeightedMerge.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectCheck.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxXPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinXPoint.js","../node_modules/ml-spectra-processing/lib/utils/createStepArray.js","../node_modules/ml-spectra-processing/lib/utils/getCombinations.js","../node_modules/ml-spectra-processing/lib/utils/getCombinationsIterator.js","../node_modules/ml-spectra-processing/lib/utils/getRescaler.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixApplyNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixBoxPlot.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCenterZMean.js","../node_modules/ml-spectra-processing/lib/matrix/matrixColumnsCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixGetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHilbertTransform.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHistogram.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalDecoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixPQN.js","../node_modules/ml-spectra-processing/lib/matrix/matrixSetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixTranspose.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZPivotRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescalePerColumn.js","../node_modules/ml-spectra-processing/lib/reimArray/reimArrayFFT.js","../node_modules/ml-spectra-processing/lib/reim/reimFFT.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixFFT.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixFFTByColumns.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/x/xBinning.js","../node_modules/ml-spectra-processing/lib/x/xDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/x/xIsArray.js","../node_modules/ml-spectra-processing/lib/x/xMassCenterVectorSimilarity.js","../node_modules/ml-spectra-processing/lib/x/xMaxIndex.js","../node_modules/ml-spectra-processing/lib/x/xMeanAbsoluteError.js","../node_modules/ml-spectra-processing/lib/x/xMeanSquaredError.js","../node_modules/ml-spectra-processing/lib/x/xMeanWeighted.js","../node_modules/ml-spectra-processing/lib/x/xMinIndex.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxDelta.js","../node_modules/ml-spectra-processing/lib/x/xMode.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRemoveOutliersIQR.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-spectra-processing/lib/x/xRobustDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xRollingMax.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xRollingMin.js","../node_modules/ml-spectra-processing/lib/x/xSampling.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromTo.js","../node_modules/ml-spectra-processing/lib/x/xSortAscending.js","../node_modules/ml-spectra-processing/lib/x/xUniqueSorted.js","../node_modules/ml-spectra-processing/lib/xreim/xreimSortX.js","../node_modules/ml-spectra-processing/lib/xreim/xreimZeroFilling.js","../node_modules/ml-spectra-processing/lib/xy2/xy2ToXY.js","../node_modules/ml-spectra-processing/lib/xy/xyAlign.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlign.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlignToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlotsToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayMerge.js","../node_modules/ml-spectra-processing/lib/xy/xyCovariance.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyExtract.js","../node_modules/ml-spectra-processing/lib/xy/xyFilter.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterMinYValue.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterTopYValues.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyFindClosestPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyFromInterleaved.js","../node_modules/ml-spectra-processing/lib/xy/xyGetNMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegral.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib/xy/xyInterpolateLinear.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenter.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenterVector.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxMerge.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyMaximaY.js","../node_modules/ml-spectra-processing/lib/xy/xyMedian.js","../node_modules/ml-spectra-processing/lib/xy/xyMedianY.js","../node_modules/ml-spectra-processing/lib/xy/xyMedianYAtXs.js","../node_modules/ml-spectra-processing/lib/xy/xyMergeByCentroids.js","../node_modules/ml-spectra-processing/lib/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinimaY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectBestPoints.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectJoinX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinMaxValues.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectNormedY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSlotX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSortX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSumY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectToXY.js","../node_modules/ml-spectra-processing/lib/xy/xyPeakInfo.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyReduceNonContinuous.js","../node_modules/ml-spectra-processing/lib/xy/xyRolling.js","../node_modules/ml-spectra-processing/lib/xy/xyRollingCircleTransform.js","../node_modules/ml-spectra-processing/lib/xy/xySetYValue.js","../node_modules/ml-spectra-processing/lib/xy/xyToInterleaved.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYArray.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYObject.js","../node_modules/ml-spectra-processing/lib/xy/xyWeightedMerge.js","../node_modules/ml-spectra-processing/lib/zones/zonesToXEquallySpaced.js","../node_modules/ensure-string/lib/index.js","../node_modules/xy-parser/lib/parse.js","../node_modules/xy-parser/lib/index.js","../packages/ms-spectrum/lib/src/getBestPeaks.js","../packages/ms-spectrum/lib/src/getChargeClusters.js","../packages/chemical-elements/lib/src/elementsAndIsotopes.js","../packages/chemical-elements/lib/src/elements.js","../packages/chemical-elements/lib/src/elementsAndIsotopesObject.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopes.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopesObject.js","../packages/chemical-elements/lib/src/elementsObject.js","../packages/chemical-elements/lib/src/isotopesObject.js","../packages/chemical-elements/lib/src/stableIsotopesObject.js","../packages/chemical-elements/lib/src/unsaturationsObject.js","../packages/mf-utilities/lib/src/ensureUppercaseSequence.js","../packages/atom-sorter/lib/src/index.js","../packages/chemical-groups/lib/src/groupsObject.js","../packages/chemical-groups/lib/src/groupsToSequence.js","../packages/mf-parser/lib/src/Kind.js","../packages/mf-parser/lib/src/util/parseCharge.js","../packages/mf-parser/lib/src/parse.js","../packages/mf-parser/lib/src/util/subSuperscript.js","../packages/mf-parser/lib/src/Format.js","../packages/mf-parser/lib/src/util/formatCharge.js","../packages/mf-parser/lib/src/util/improveLinesForDisplay.js","../packages/mf-parser/lib/src/util/toDisplay.js","../packages/mf-parser/lib/src/util/isMF.js","../packages/mf-parser/lib/src/Style.js","../packages/mf-parser/lib/src/util/toHtml.js","../packages/mf-parser/lib/src/ensureCase.js","../packages/mf-parser/lib/src/util/flatten.js","../packages/mf-parser/lib/src/util/getIsotopeRatioInfo.js","../packages/mf-parser/lib/src/util/getEA.js","../packages/mf-parser/lib/src/util/getElements.js","../packages/mf-parser/lib/src/util/getNumberOfIsotopologues.js","../packages/mf-parser/lib/src/util/partToAtoms.js","../packages/mf-parser/lib/src/util/partToMF.js","../packages/mf-parser/lib/src/util/getInfoInternal.js","../packages/mf-parser/lib/src/util/getIsotopesInfo.js","../packages/mf-parser/lib/src/util/partsToDisplay.js","../packages/mf-parser/lib/src/util/partsToMF.js","../packages/mf-parser/lib/src/util/toParts.js","../packages/mf-parser/lib/src/util/toText.js","../packages/mf-parser/lib/src/MFInternal.js","../packages/mf-parser/lib/src/MF.js","../packages/mf-parser/lib/src/parseToHtml.js","../packages/mf-utilities/lib/src/getEutrophicationPotential.js","../packages/mf-utilities/lib/src/getMsem.js","../packages/mf-utilities/lib/src/getMsInfo.js","../packages/mf-utilities/lib/src/getRangesForFragment.js","../packages/mf-utilities/lib/src/MFRange.js","../packages/mf-utilities/lib/src/mfDiff.js","../packages/mf-utilities/lib/src/preprocessIonizations.js","../packages/mf-utilities/lib/src/preprocessRanges.js","../packages/ms-spectrum/lib/src/getChargeLadders.js","../packages/mf-matcher/lib/src/unsaturationMatcher.js","../packages/mf-matcher/lib/src/generalMatcher.js","../packages/mf-matcher/lib/src/msemMatcher.js","../packages/mf-finder/lib/src/TargetMassCache.js","../packages/mf-finder/lib/src/findMFsSync.js","../packages/mf-finder/lib/src/findMFs.js","../packages/mf-finder/lib/src/mfIncluded.js","../packages/ms-spectrum/lib/src/from/fromMonoisotopicMass.js","../packages/ms-spectrum/lib/src/getPeaks.js","../packages/ms-spectrum/lib/src/getFragmentPeaks.js","../packages/ms-spectrum/lib/src/getMassRemainder.js","../packages/ms-spectrum/lib/src/getPeaksWithCharge.js","../packages/ms-spectrum/lib/src/getPeakChargeBySimilarity.js","../packages/ms-spectrum/lib/src/isContinuous.js","../node_modules/ml-savitzky-golay-generalized/lib/index.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-peak-shape-generator/lib/util/constants.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigt/computeFactor.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigtTCH/PseudoVoigtTCH.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib/shapes/2d/getShape2D.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/buildOptimizationLayout.js","../node_modules/ml-spectra-fitting/lib/util/reconstructPeaks.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib/util/getFixedParametersResult.js","../node_modules/ml-gsd/lib/utils/addMissingShape.js","../node_modules/ml-gsd/lib/utils/splitGroup.js","../node_modules/ml-gsd/lib/utils/groupPeaks.js","../node_modules/ml-gsd/lib/post/optimizePeaksWithLogs.js","../node_modules/ml-gsd/lib/utils/addMissingIDs.js","../node_modules/ml-gsd/lib/post/joinBroadPeaks.js","../node_modules/ml-gsd/lib/post/broadenPeaks.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/post/optimizePeaks.js","../node_modules/ml-gsd/lib/utils/setShape.js","../packages/ms-spectrum/lib/src/peakPicking.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-simple-linear/lib-esm/index.js","../node_modules/ml-regression-power/src/index.js","../packages/ms-spectrum/lib/src/peaksWidth.js","../packages/ms-spectrum/lib/src/Spectrum.js","../packages/ms-spectrum/lib/src/MSComparator.js","../packages/ms-spectrum/lib/src/jsgraph/getPeaksAnnotation.js","../packages/ms-spectrum/lib/src/jsgraph/index.js","../packages/emdb/lib/src/append/appendFragmentsInfo.js","../node_modules/sum-object-keys/lib/index.js","../packages/mf-generator/lib/src/generateMFs.js","../node_modules/openchemlib-utils/lib/util/getXAtomicNumber.js","../node_modules/openchemlib-utils/lib/util/isCsp3.js","../node_modules/openchemlib-utils/lib/util/makeRacemic.js","../node_modules/openchemlib-utils/lib/util/tagAtom.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsFragments.js","../node_modules/openchemlib-utils/lib/util/ensureMapNo.js","../node_modules/openchemlib-utils/lib/util/getCompactCopyWithoutCustomLabels.js","../node_modules/openchemlib-utils/lib/util/getConnectivityMatrix.js","../node_modules/ml-floyd-warshall/lib-esm/index.js","../node_modules/openchemlib-utils/lib/topic/getEnantioIDs.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsStrings.js","../node_modules/openchemlib-utils/lib/diastereotopic/getChiralOrHeterotopicCarbons.js","../node_modules/openchemlib-utils/lib/diastereotopic/ensureHeterotopicChiralBonds.js","../node_modules/openchemlib-utils/lib/topic/TopicMolecule.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodesForPaths.js","../node_modules/openchemlib-utils/lib/path/getAllAtomsPaths.js","../node_modules/openchemlib-utils/lib/topic/getMoleculeWithH.js","../node_modules/openchemlib-utils/lib/topic/getXMolecule.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedDiaIDs.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodes.js","../node_modules/openchemlib-utils/lib/topic/getDiaIDsAndInfo.js","../node_modules/openchemlib-utils/lib/topic/getHeterotopicSymmetryRanks.js","../node_modules/openchemlib-utils/lib/util/getSymmetryRanks.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsAndH.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtoms.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForPath.js","../node_modules/openchemlib-utils/lib/polymer/createPolymer.js","../node_modules/openchemlib-utils/lib/util/applyFragmentLabels.js","../node_modules/openchemlib-utils/lib/util/autoLabelDatabase.js","../node_modules/openchemlib-utils/lib/util/combineSmiles.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/getCamelCase.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/parseColumnbProperties.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/parseData.js","../node_modules/openchemlib-utils/lib/util/dwar/parseDwar.js","../node_modules/openchemlib-utils/lib/util/getAtomsInfo.js","../node_modules/openchemlib-utils/lib/util/getMF.js","../node_modules/openchemlib-utils/lib/util/getUnsaturation.js","../node_modules/openchemlib-utils/lib/util/getNMRHints.js","../node_modules/openchemlib-utils/lib/util/getProperties.js","../node_modules/openchemlib-utils/lib/path/getPathsInfo.js","../node_modules/openchemlib-utils/lib/util/getAtoms.js","../node_modules/openchemlib-utils/lib/path/getPathAndTorsion.js","../node_modules/papaparse/papaparse.min.js","../node_modules/openchemlib-utils/lib/db/utils/getMoleculeCreators.js","../node_modules/openchemlib-utils/lib/db/utils/appendCSV.js","../node_modules/get-value/dist/index.mjs","../node_modules/sdf-parser/lib/util/getMolecule.js","../node_modules/openchemlib-utils/lib/db/utils/appendSDF.js","../node_modules/sdf-parser/lib/parse.js","../node_modules/sdf-parser/lib/getEntriesBoundaries.js","../node_modules/openchemlib-utils/lib/db/utils/pushEntry.js","../node_modules/openchemlib-utils/lib/util/noWait.js","../node_modules/openchemlib-utils/lib/db/utils/search.js","../node_modules/openchemlib-utils/lib/util/getRAtomicNumber.js","../node_modules/openchemlib-utils/lib/reaction/utils/checkIfExistsOrAddInfo.js","../node_modules/openchemlib-utils/lib/reaction/utils/applyOneReactantReactions.js","../node_modules/openchemlib-utils/lib/reaction/utils/getFilteredTrees.js","../node_modules/openchemlib-utils/lib/reaction/utils/getLeaves.js","../node_modules/openchemlib-utils/lib/reaction/utils/getNodes.js","../node_modules/openchemlib-utils/lib/reaction/Reactions.js","../node_modules/openchemlib-utils/lib/reaction/utils/appendOCLReaction.js","../node_modules/openchemlib-utils/lib/db/MoleculesDB.js","../node_modules/openchemlib-utils/lib/db/utils/appendEntries.js","../node_modules/openchemlib-utils/lib/db/utils/appendSmilesList.js","../node_modules/openchemlib-utils/lib/db/utils/pushMoleculeInfo.js","../node_modules/openchemlib-utils/lib/db/utils/appendColor.js","../node_modules/openchemlib-utils/lib/util/autoLabel.js","../node_modules/openchemlib-utils/lib/fragment/fragmentAcyclicSingleBonds.js","../node_modules/openchemlib-utils/lib/features/getAtomFeatures.js","../node_modules/openchemlib-utils/lib/util/getCharge.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsFromMolfile.js","../node_modules/openchemlib-utils/lib/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/diastereotopic/groupDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodes.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesAndInfo.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtom.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesFromDiastereotopicID.js","../node_modules/openchemlib-utils/lib/util/getImplicitHydrogensCount.js","../node_modules/openchemlib-utils/lib/util/getMolfilesMapping.js","../node_modules/openchemlib-utils/lib/util/getNextNMRHint.js","../node_modules/openchemlib-utils/lib/util/getNonUniqueCustomLabels.js","../node_modules/openchemlib-utils/lib/path/getShortestPaths.js","../node_modules/openchemlib-utils/lib/util/nbCHO.js","../node_modules/openchemlib-utils/lib/util/nbCN.js","../node_modules/openchemlib-utils/lib/util/nbCOOH.js","../node_modules/openchemlib-utils/lib/util/nbLabileH.js","../node_modules/openchemlib-utils/lib/util/nbNH2.js","../node_modules/openchemlib-utils/lib/util/nbOH.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/getParts.js","../node_modules/openchemlib-utils/lib/diastereotopic/toDiastereotopicSVG.js","../node_modules/openchemlib-utils/lib/util/toVisualizerMolfile.js","../node_modules/openchemlib-utils/lib/util/toggleHydrogens.js","../packages/mass-fragmentation/lib/src/fragmentAcyclicBonds.js","../packages/mass-fragmentation/lib/src/utils/getRingsInfo.js","../packages/mass-fragmentation/lib/src/utils/getFragmentableRings.js","../packages/mass-fragmentation/lib/src/fragmentRings.js","../packages/mass-fragmentation/lib/src/fragment.js","../node_modules/openchemlib/dist/openchemlib.js","../packages/mass-fragmentation/lib/src/database/defaultDatabase.js","../packages/mass-fragmentation/lib/src/database/getDatabase.js","../packages/mass-fragmentation/lib/src/utils/getMasses.js","../packages/mass-fragmentation/lib/src/reactionFragmentation.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/react/cjs/react.production.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom.production.js","../node_modules/react-dom/index.js","../node_modules/scheduler/cjs/scheduler.production.js","../node_modules/scheduler/index.js","../node_modules/react-dom/cjs/react-dom-client.production.js","../node_modules/react-dom/client.js","../node_modules/react-tree-svg/lib/data/calculatePosition.js","../node_modules/react-tree-svg/lib/components/MultilineText.js","../node_modules/react-tree-svg/lib/components/Text.js","../node_modules/react-tree-svg/lib/components/Arrow.js","../node_modules/react-tree-svg/lib/data/getArrows.js","../node_modules/react-tree-svg/lib/data/getBoxes.js","../node_modules/react-tree-svg/lib/data/prepareTree.js","../node_modules/react-tree-svg/lib/components/MarkerDef.js","../node_modules/react-tree-svg/lib/components/MarkerDef.utils.js","../node_modules/react-tree-svg/lib/components/SVGBoxesTree.js","../node_modules/react-tree-svg/lib/components/Rectangle.js","../node_modules/react-tree-svg/lib/components/SVG.js","../node_modules/react-tree-svg/lib/nodeRenderer/moleculeRenderer.js","../node_modules/react-tree-svg/lib/render.js","../node_modules/react-tree-svg/lib/nodeRenderer/taxonomyRenderer.js","../packages/mass-fragmentation/lib/src/getFragmentationSVG.js","../packages/emdb/lib/src/from/fromMolecules.js","../packages/nucleotide/lib/src/sequenceToMF.js","../packages/nucleotide/lib/src/furanThreeTerm.js","../packages/nucleotide/lib/src/addFiveTerm.js","../packages/nucleotide/lib/src/baseLoss.js","../packages/nucleotide/lib/src/addFiveTermBaseLoss.js","../packages/nucleotide/lib/src/addInternalTerm.js","../packages/nucleotide/lib/src/addThreeTerm.js","../packages/nucleotide/lib/src/addThreeTermBaseLoss.js","../packages/nucleotide/lib/src/generateFragments.js","../packages/emdb/lib/src/from/fromNucleicSequence.js","../packages/peptide/lib/src/aminoAcids.js","../packages/peptide/lib/src/isoElectricPoint.js","../packages/peptide/lib/src/splitPeptide.js","../packages/peptide/lib/src/allowNeutralLoss.js","../packages/peptide/lib/src/getAA.js","../packages/peptide/lib/src/chargePeptide.js","../packages/peptide/lib/src/sequenceToMF.js","../packages/peptide/lib/src/generatePeptideFragments.js","../packages/peptide/lib/src/digestPeptide.js","../packages/peptide/lib/src/index.js","../packages/emdb/lib/src/from/util/fragmentPeptide.js","../packages/emdb/lib/src/from/fromPeptidicSequence.js","../packages/emdb/lib/src/from/fromRange.js","../node_modules/jszip/dist/jszip.min.js","../packages/emdb/lib/src/util/fetchArrayBuffer.js","../packages/emdb/lib/src/loadCommercials.js","../packages/mf-from-google-sheet/lib/src/util/fetchText.js","../packages/mf-from-google-sheet/lib/src/index.js","../packages/emdb/lib/src/loadGoogleSheet.js","../packages/emdb/lib/src/loadKnapSack.js","../packages/emdb/lib/src/search.js","../packages/emdb/lib/src/searchMSEM.js","../node_modules/spectrum-generator/lib/BaseSpectrumGenerator.js","../node_modules/spectrum-generator/lib/SpectrumGenerator.js","../node_modules/spectrum-generator/lib/util/addBaseline.js","../node_modules/spectrum-generator/lib/util/addNoise.js","../node_modules/spectrum-generator/lib/Spectrum2DGenerator.js","../node_modules/spectrum-generator/lib/SparseSpectrumGenerator.js","../node_modules/spectrum-generator/lib/generateSparseSpectrum.js","../node_modules/spectrum-generator/lib/generateSpectrum.js","../packages/isotopic-distribution/lib/src/utils/closestPointX.js","../packages/isotopic-distribution/lib/src/utils/joinX.js","../packages/isotopic-distribution/lib/src/utils/multiply.js","../packages/isotopic-distribution/lib/src/utils/power.js","../packages/isotopic-distribution/lib/src/Distribution.js","../packages/isotopic-distribution/lib/src/utils/getDerivedCompositionInfo.js","../packages/isotopic-distribution/lib/src/IsotopicDistribution.js","../node_modules/peaks-similarity/lib-esm/calculateOverlapFromDiff.js","../node_modules/peaks-similarity/lib-esm/checkPeaks.js","../node_modules/peaks-similarity/lib-esm/extract.js","../node_modules/peaks-similarity/lib-esm/getCommonArray.js","../node_modules/ml-stat/array.js","../node_modules/ml-stat/matrix.js","../node_modules/ml-stat/index.js","../node_modules/peaks-similarity/lib-esm/normalize.js","../node_modules/peaks-similarity/lib-esm/commonExtractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/extractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/getIntersection.js","../node_modules/peaks-similarity/lib-esm/index.js","../packages/emdb/lib/src/searchSimilarity.js","../node_modules/ml-array-median/node_modules/is-any-array/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-regression-theil-sen/src/index.js","../packages/emdb/lib/src/massShifts.js","../packages/emdb/lib/src/util/fetchJSON.js","../packages/emdb/lib/src/index.js","../packages/mf-from-ea/lib/src/preprocessEARanges.js","../packages/mf-from-ea/lib/src/index.js","../packages/mf-from-atomic-ratio/lib/src/mfFromAtomicRatio.js","../packages/octochemdb/lib/src/utils/appendAllDBRefs.js","../packages/octochemdb/lib/src/utils/appendURLs.js","../packages/octochemdb/lib/src/utils/fetchJSON.js","../packages/octochemdb/lib/src/utils/postFetchJSON.js","../packages/octochemdb/lib/src/utils/includeDBRefs.js","../packages/octochemdb/lib/src/utils/normalizeActivities.js","../packages/octochemdb/lib/src/activeOrNaturalDetails.js","../packages/octochemdb/lib/src/utils/parseMasses.js","../packages/octochemdb/lib/src/utils/getAllowedEMs.js","../packages/octochemdb/lib/src/utils/searchWithIonizations.js","../packages/octochemdb/lib/src/activesOrNaturals.js","../packages/octochemdb/lib/src/activesOrNaturalsByMF.js","../packages/octochemdb/lib/src/compoundsFromMF.js","../packages/octochemdb/lib/src/searchMasses.js","../packages/octochemdb/lib/src/massSpectra.js","../packages/octochemdb/lib/src/mfsFromEMs.js","../packages/octochemdb/lib/src/pubmedCompounds.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMF.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMasses.js","../packages/octochemdb/lib/src/OctoChemDB.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/languages.js","../node_modules/@orama/orama/dist/browser/utils.js","../node_modules/@orama/orama/dist/browser/errors.js","../node_modules/@orama/orama/dist/browser/components/defaults.js","../node_modules/@orama/orama/dist/browser/components/internal-document-id-store.js","../node_modules/@orama/orama/dist/browser/components/documents-store.js","../node_modules/@orama/orama/dist/browser/components/plugins.js","../node_modules/@orama/orama/dist/browser/components/hooks.js","../node_modules/@orama/orama/dist/browser/trees/avl.js","../node_modules/@orama/orama/dist/browser/trees/flat.js","../node_modules/@orama/orama/dist/browser/components/levenshtein.js","../node_modules/@orama/orama/dist/browser/trees/radix.js","../node_modules/@orama/orama/dist/browser/trees/bkd.js","../node_modules/@orama/orama/dist/browser/trees/bool.js","../node_modules/@orama/orama/dist/browser/components/algorithms.js","../node_modules/@orama/orama/dist/browser/trees/vector.js","../node_modules/@orama/orama/dist/browser/components/index.js","../node_modules/@orama/orama/dist/browser/components/sorter.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/diacritics.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/english-stemmer.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/index.js","../node_modules/@orama/orama/dist/browser/components/pinning.js","../node_modules/@orama/orama/dist/browser/methods/create.js","../node_modules/@orama/orama/dist/browser/methods/docs.js","../node_modules/@orama/orama/dist/browser/methods/insert.js","../node_modules/@orama/orama/dist/browser/methods/remove.js","../node_modules/@orama/orama/dist/browser/constants.js","../node_modules/@orama/orama/dist/browser/components/facets.js","../node_modules/@orama/orama/dist/browser/components/groups.js","../node_modules/@orama/orama/dist/browser/components/pinning-manager.js","../node_modules/@orama/orama/dist/browser/methods/search-fulltext.js","../node_modules/@orama/orama/dist/browser/methods/search.js","../node_modules/@orama/orama/dist/browser/methods/search-vector.js","../node_modules/@orama/orama/dist/browser/methods/search-hybrid.js","../node_modules/@orama/orama/dist/browser/methods/update.js","../node_modules/@orama/orama/dist/browser/types.js","../node_modules/@orama/orama/dist/browser/methods/answer-session.js","../node_modules/@orama/orama/dist/browser/methods/pinning.js","../node_modules/@orama/orama/dist/browser/methods/serialization.js","../node_modules/@orama/orama/dist/browser/methods/upsert.js","../packages/octochemdb/lib/src/summarizer/utils/getActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/summarizeEmptyTerms.js","../packages/octochemdb/lib/src/summarizer/ActiveOrNaturalSummarizer.js","../packages/octochemdb/lib/src/taxonomy/taxonomyRanks.js","../packages/octochemdb/lib/src/taxonomy/taxonomyComparator.js","../packages/octochemdb/lib/src/taxonomy/createTaxonomyTree.js","../packages/ms-report/lib/src/appendInternals.js","../packages/ms-report/lib/src/appendResidues.js","../node_modules/@svgdotjs/svg.js/dist/svg.esm.js","../packages/ms-report/lib/src/getPaper.browser.js","../packages/ms-report/lib/src/appendResiduesPosition.js","../packages/ms-report/lib/src/appendResults.js","../packages/ms-report/lib/src/appendRows.js","../packages/ms-report/lib/src/appendRowsInformation.js","../packages/ms-report/lib/src/draw/addScript.js","../packages/ms-report/lib/src/draw/drawLabel.js","../packages/ms-report/lib/src/draw/drawInternals.js","../packages/ms-report/lib/src/draw/drawReplacements.js","../packages/ms-report/lib/src/draw/drawTerminals.js","../packages/ms-report/lib/src/draw/drawSequence.js","../packages/ms-report/lib/src/sequenceSVG.js","../node_modules/@lukeed/uuid/dist/index.js","../packages/mfs-deconvolution/lib/src/getPeakWidthFct.js","../node_modules/ml-fcnnls/lib-esm/util/sortCollectionSet.js","../node_modules/ml-fcnnls/lib-esm/cssls.js","../node_modules/ml-fcnnls/lib-esm/util/setDifference.js","../node_modules/ml-fcnnls/lib-esm/optimality.js","../node_modules/ml-fcnnls/lib-esm/util/selection.js","../node_modules/ml-fcnnls/lib-esm/fcnnls.js","../node_modules/ml-fcnnls/lib-esm/initialisation.js","../node_modules/ml-fcnnls/lib-esm/fcnnlsVector.js","../packages/mfs-deconvolution/lib/src/utils/splitMatrix.js","../packages/mfs-deconvolution/lib/src/utils/blockFcnnls.js","../packages/mfs-deconvolution/lib/src/mfsDeconvolution.js","../packages/mfs-deconvolution/lib/src/reconstruct.js","../packages/mass-tools/src/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","/**\n * Calculates reimAbsolute value of a complex spectrum.\n * @param data - complex spectrum.\n * @param options - options.\n * @param options.output - optional output array.\n * @returns absolute value array.\n */\nexport function reimAbsolute(data, options = {}) {\n    const length = data.re.length;\n    const { output = new Float64Array(length) } = options;\n    const re = data.re;\n    const im = data.im;\n    for (let i = 0; i < length; i++) {\n        output[i] = Math.hypot(re[i], im[i]);\n    }\n    return output;\n}\n//# sourceMappingURL=reimAbsolute.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","/**\n * This function returns an array with absolute values.\n * @param array - array of data\n * @returns - array with absolute values\n */\nexport function xAbsolute(array) {\n    const tmpArray = array.slice();\n    for (let i = 0; i < tmpArray.length; i++) {\n        if (tmpArray[i] < 0)\n            tmpArray[i] *= -1;\n    }\n    return tmpArray;\n}\n//# sourceMappingURL=xAbsolute.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - array containing values.\n * @param options - options.\n * @returns median.\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    const { exact = false, fromIndex = 0, toIndex = input.length, } = options || {};\n    const array = input.slice(fromIndex, toIndex);\n    if (array.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - array to check.\n * @param options - additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength = 1 } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers.\n * @param target - target value.\n * @param options - options.\n * @returns closest index.\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - options.\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Check that two arrays have the same length.\n * @param array1 - first array.\n * @param array2 - second array.\n */\nexport function xCheckLengths(array1, array2) {\n    if (array1.length !== array2.length) {\n        throw new TypeError('length of array1 and array2 must be identical');\n    }\n}\n//# sourceMappingURL=xCheckLengths.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * Dot product between two arrays.\n * @param A - first array.\n * @param B - second array.\n */\nexport function xDotProduct(A, B) {\n    xCheckLengths(A, B);\n    let result = 0;\n    for (let i = 0; i < A.length; i++) {\n        result += A[i] * B[i];\n    }\n    return result;\n}\n//# sourceMappingURL=xDotProduct.js.map","import { xDotProduct } from \"./xDotProduct.js\";\n/**\n * Calculates the cross-correlation between 2 arrays\n * @param A - fixed array\n * @param B - sweeping array\n * @param options - options.\n */\nexport function xCrossCorrelation(A, B, options = {}) {\n    const { tau = 1, lag = A.length - 1 } = options;\n    const result = new Float64Array(1 + (2 * lag) / tau);\n    if (A.length === B.length) {\n        const n = B.length;\n        const g = new Float64Array(2 * n);\n        const q = new Float64Array(2 * n);\n        for (let i = 0; i < n; i++) {\n            q[n + i] = B[i];\n        }\n        for (let i = n * 2 - (tau - 1); i > 0; i -= tau) {\n            let k = 0;\n            for (let j = i; j < n * 2; j++) {\n                g[k] = q[j];\n                k++;\n            }\n            const w = [];\n            for (let l = 0; l < n; l++) {\n                w[l] = g[l];\n            }\n            result[(k - (n - lag)) / tau] = xDotProduct(A, w);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCrossCorrelation.js.map","// Internal helper: not re-exported from `x/index.ts`, so it stays out of the public API.\n/**\n * Copy the data into an ascending-sorted `Float64Array`.\n * The library does not accept NaN: it corrupts ranks, quartiles and moments, so a NaN\n * in the input throws. Sorting groups every NaN at the end, so a single look at the\n * last element detects them.\n * @param array - data.\n * @returns ascending-sorted values.\n */\nexport function getSortedFloat64(array) {\n    const sorted = Float64Array.from(array);\n    sorted.sort();\n    // NaN sorts to the end, so the last element tells us whether any NaN is present.\n    if (Number.isNaN(sorted.at(-1))) {\n        throw new Error('input must not contain NaN values');\n    }\n    return sorted;\n}\n//# sourceMappingURL=getSortedFloat64.js.map","import { getSortedFloat64 } from \"./getSortedFloat64.js\";\nimport { xCheck } from \"./xCheck.js\";\n/**\n * Calculating the box plot of the array\n * This function will interpolate the values and use the inclusive algorithm\n * @param array - data.\n * @returns q1, median, q3, min, max.\n */\nexport function xBoxPlot(array) {\n    xCheck(array);\n    // duplicate the array to avoid modifying the original one\n    // and sort typed array that is much faster than sorting a normal array\n    const sorted = getSortedFloat64(array);\n    return boxPlotFromSorted(sorted);\n}\n/**\n * Calculating the box plot of an already-sorted array, without copying or re-sorting.\n * Internal helper: not re-exported from `x/index.ts`, so it stays out of the public API.\n * @param array - sorted data.\n * @returns q1, median, q3, min, max.\n */\nexport function boxPlotFromSorted(array) {\n    const min = array[0];\n    const max = array.at(-1);\n    // need to deal with very close points otherwise it yields to incorrect results\n    if (max - min <= Number.EPSILON) {\n        // if one of the 2 numbers is an integer let's take this one\n        const shortTestNumber = String(min).length < String(max).length ? min : max;\n        return {\n            min,\n            q1: shortTestNumber,\n            median: shortTestNumber,\n            q3: shortTestNumber,\n            max,\n        };\n    }\n    const posQ1 = (array.length - 1) / 4;\n    const posQ3 = (array.length - 1) * (3 / 4);\n    const medianPos = (array.length - 1) / 2;\n    const q1MinProportion = posQ1 % 1;\n    const q3MinProportion = posQ3 % 1;\n    const medianMinProportion = medianPos % 1;\n    return {\n        min,\n        q1: q1MinProportion === 0\n            ? array[posQ1]\n            : array[posQ1 >> 0] * (1 - q1MinProportion) +\n                array[(posQ1 >> 0) + 1] * q1MinProportion,\n        median: medianMinProportion === 0\n            ? array[medianPos]\n            : array[medianPos >> 0] * (1 - medianMinProportion) +\n                array[(medianPos >> 0) + 1] * medianMinProportion,\n        q3: q3MinProportion === 0\n            ? array[posQ3]\n            : array[posQ3 >> 0] * (1 - q3MinProportion) +\n                array[(posQ3 >> 0) + 1] * q3MinProportion,\n        max,\n    };\n}\n//# sourceMappingURL=xBoxPlot.js.map","import { getSortedFloat64 } from \"./getSortedFloat64.js\";\nimport { boxPlotFromSorted } from \"./xBoxPlot.js\";\nimport { xCheck } from \"./xCheck.js\";\n/**\n * Calculating the box plot of the array with outliers\n * Values are outliers if they are below Q1 - 1.5 * IQR or above Q3 + 1.5 * IQR\n * @param array - data\n * @returns - q1, median, q3, min, max, outliers\n */\nexport function xBoxPlotWithOutliers(array) {\n    xCheck(array);\n    const sorted = getSortedFloat64(array);\n    return boxPlotWithOutliersFromSorted(sorted);\n}\n/**\n * Calculating the box plot with outliers of an already-sorted array, without copying\n * or re-sorting. Because the array is sorted, the outliers are the low prefix and the\n * high suffix, so they are reported in ascending order.\n * Internal helper: not re-exported from `x/index.ts`, so it stays out of the public API.\n * @param sorted - sorted data.\n * @returns - q1, median, q3, min, max, outliers\n */\nexport function boxPlotWithOutliersFromSorted(sorted) {\n    return boxPlotWithOutliersAndBounds(sorted).boxPlot;\n}\n/**\n * Same computation as {@link boxPlotWithOutliersFromSorted}, but also returns the\n * non-outlier index range so callers that need the filtered values (mean, sd, …) can\n * reuse the bounds instead of scanning the array a second time.\n * Internal helper: not re-exported from `x/index.ts`, so it stays out of the public API.\n * @param sorted - sorted data.\n * @returns - the box plot and the non-outlier index range.\n */\nexport function boxPlotWithOutliersAndBounds(sorted) {\n    const boxPlot = boxPlotFromSorted(sorted);\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            boxPlot: {\n                ...boxPlot,\n                lowerWhisker: boxPlot.min,\n                upperWhisker: boxPlot.max,\n                minWhisker: boxPlot.min,\n                maxWhisker: boxPlot.max,\n                iqr: 0,\n                outliers: [],\n            },\n            bounds: { lowIndex: 0, highIndex: sorted.length },\n        };\n    }\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const upperWhisker = boxPlot.q3 + 1.5 * iqr;\n    const bounds = getWhiskerBounds(sorted, lowerWhisker, upperWhisker);\n    const { lowIndex, highIndex } = bounds;\n    const outliers = [];\n    for (let i = 0; i < lowIndex; i++) {\n        outliers.push(sorted[i]);\n    }\n    for (let i = highIndex; i < sorted.length; i++) {\n        outliers.push(sorted[i]);\n    }\n    return {\n        boxPlot: {\n            ...boxPlot,\n            lowerWhisker,\n            upperWhisker,\n            minWhisker: sorted[lowIndex],\n            maxWhisker: sorted[highIndex - 1],\n            iqr,\n            outliers,\n        },\n        bounds,\n    };\n}\n/**\n * Locate the contiguous range `[lowIndex, highIndex)` of non-outliers in a sorted array.\n * Because the array is sorted, outliers are exactly the prefix below `lowerWhisker` and\n * the suffix above `upperWhisker`, so the scan only touches the outliers themselves.\n * Internal helper: not re-exported from `x/index.ts`, so it stays out of the public API.\n * @param sorted - sorted data.\n * @param lowerWhisker - values strictly below are low outliers.\n * @param upperWhisker - values strictly above are high outliers.\n * @returns the non-outlier index range.\n */\nexport function getWhiskerBounds(sorted, lowerWhisker, upperWhisker) {\n    let lowIndex = 0;\n    while (lowIndex < sorted.length && sorted[lowIndex] < lowerWhisker) {\n        lowIndex++;\n    }\n    let highIndex = sorted.length;\n    while (highIndex > lowIndex && sorted[highIndex - 1] > upperWhisker) {\n        highIndex--;\n    }\n    return { lowIndex, highIndex };\n}\n//# sourceMappingURL=xBoxPlotWithOutliers.js.map","/**\n * Calculates the correlation between 2 vectors\n * https://en.wikipedia.org/wiki/Correlation_and_dependence\n * @param A - first array\n * @param B - sencond array\n */\nexport function xCorrelation(A, B) {\n    const n = A.length;\n    let sumA = 0;\n    let sumA2 = 0;\n    let sumB = 0;\n    let sumB2 = 0;\n    let sumAB = 0;\n    for (let i = 0; i < n; i++) {\n        const a = A[i];\n        const b = B[i];\n        sumA += a;\n        sumA2 += a ** 2;\n        sumB += b;\n        sumB2 += b ** 2;\n        sumAB += a * b;\n    }\n    return ((n * sumAB - sumA * sumB) /\n        (Math.sqrt(n * sumA2 - sumA ** 2) * Math.sqrt(n * sumB2 - sumB ** 2)));\n}\n//# sourceMappingURL=xCorrelation.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nfunction isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n\n/**\n * Computes the maximum of the given values.\n *\n * @param input\n * @param options\n */\nfunction max(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let maxValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] > maxValue)\n            maxValue = input[i];\n    }\n    return maxValue;\n}\n\n/**\n * Computes the minimum of the given values.\n */\nfunction min(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let minValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] < minValue)\n            minValue = input[i];\n    }\n    return minValue;\n}\n\n/**\n * Rescale an array into a range.\n */\nfunction rescale(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    else if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let output;\n    if (options.output !== undefined) {\n        if (!isAnyArray(options.output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        output = options.output;\n    }\n    else {\n        output = new Array(input.length);\n    }\n    const currentMin = min(input);\n    const currentMax = max(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min: minValue = options.autoMinMax ? currentMin : 0, max: maxValue = options.autoMinMax ? currentMax : 1, } = options;\n    if (minValue >= maxValue) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (maxValue - minValue) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + minValue;\n    }\n    return output;\n}\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  gram() {\n    const rows = this.rows;\n    const n = this.columns;\n\n    // The Gram matrix `thisᵀ · this` is symmetric, so only its upper triangle is\n    // accumulated (then mirrored) and the transpose is never materialized.\n    // Row-streaming rank-1 updates read each row of `this` contiguously and skip\n    // zero entries, so the cost scales with the number of non-zeros: it is as\n    // fast as the dense version on dense matrices (the skip never fires) and far\n    // faster on sparse ones.\n    const gramData = new Float64Array(n * n);\n    for (let r = 0; r < rows; r++) {\n      for (let i = 0; i < n; i++) {\n        const value = this.get(r, i);\n        if (value === 0) continue;\n        const offset = i * n;\n        for (let j = i; j < n; j++) {\n          gramData[offset + j] += value * this.get(r, j);\n        }\n      }\n    }\n\n    const result = new Matrix(n, n);\n    for (let i = 0; i < n; i++) {\n      const offset = i * n;\n      for (let j = i; j < n; j++) {\n        const value = gramData[offset + j];\n        result.set(i, j, value);\n        result.set(j, i, value);\n      }\n    }\n    return result;\n  }\n\n  transposeMultiply(other) {\n    other = Matrix.checkMatrix(other);\n    if (this.rows !== other.rows) {\n      throw new RangeError(\n        'the number of rows of the two matrices must be equal',\n      );\n    }\n    const n = this.columns;\n    const p = other.columns;\n\n    const result = new Matrix(n, p);\n    const otherRow = new Float64Array(p);\n    for (let r = 0; r < this.rows; r++) {\n      for (let j = 0; j < p; j++) {\n        otherRow[j] = other.get(r, j);\n      }\n      for (let i = 0; i < n; i++) {\n        const value = this.get(r, i);\n        if (value === 0) continue;\n        const resultRow = result.data[i];\n        for (let j = 0; j < p; j++) {\n          resultRow[j] += value * otherRow[j];\n        }\n      }\n    }\n    return result;\n  }\n\n  mmulByTranspose(scale) {\n    let m = this.rows;\n    let n = this.columns;\n\n    if (scale !== undefined && scale.length !== n) {\n      throw new RangeError('scale must have one value per column');\n    }\n\n    let result = new Matrix(m, m);\n\n    // result = this · diag(scale) · thisᵀ is symmetric, so only the upper\n    // triangle is computed and mirrored, and the transpose is never\n    // materialized. `scale` (one factor per column) is folded into one operand.\n    let rowj = new Float64Array(n);\n    for (let j = 0; j < m; j++) {\n      if (scale === undefined) {\n        for (let k = 0; k < n; k++) {\n          rowj[k] = this.get(j, k);\n        }\n      } else {\n        for (let k = 0; k < n; k++) {\n          rowj[k] = scale[k] * this.get(j, k);\n        }\n      }\n\n      for (let i = j; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * rowj[k];\n        }\n\n        result.set(i, j, s);\n        result.set(j, i, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray(array)) {\n    if (array[0] && isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\n/**\n * Transpose a square matrix in place, without allocating a copy.\n * Used to restore the logical layout of decomposition outputs that were\n * accumulated in transposed storage for cache-sequential inner loops.\n * @param {import('../matrix').default} matrix - square matrix, mutated in place\n * @returns {import('../matrix').default} the same matrix\n */\nfunction transposeSquareInPlace(matrix) {\n  const data = matrix.data;\n  const n = matrix.rows;\n  for (let i = 0; i < n; i++) {\n    const rowI = data[i];\n    for (let j = i + 1; j < n; j++) {\n      const tmp = rowI[j];\n      rowI[j] = data[j][i];\n      data[j][i] = tmp;\n    }\n  }\n  return matrix;\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    // Work on the transpose of the input so the hot inner loops (which iterate\n    // over rows for a fixed column) scan memory sequentially in the row-major\n    // backing store. `at` holds the transpose: at.get(j, i) === a.get(i, j)\n    // where `a` is the logical m x n working matrix.\n    let swapped = false;\n    let at;\n    if (m < n) {\n      if (!autoTranspose) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n        at = value.transpose();\n      } else {\n        at = value.clone();\n        m = value.columns;\n        n = value.rows;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      at = value.transpose();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    // U and V are stored transposed during the computation so the inner loops\n    // (which always vary the row index) scan memory sequentially. They are\n    // transposed back to their logical layout before being returned.\n    // Ut.get(j, i) === U.get(i, j) and Vt.get(j, i) === V.get(i, j).\n    let U = new Matrix(nu, m);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], at.get(k, i));\n        }\n        if (s[k] !== 0) {\n          if (at.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            at.set(k, i, at.get(k, i) / s[k]);\n          }\n          at.set(k, k, at.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += at.get(k, i) * at.get(j, i);\n          }\n          t = -t / at.get(k, k);\n          for (let i = k; i < m; i++) {\n            at.set(j, i, at.get(j, i) + t * at.get(k, i));\n          }\n        }\n        e[j] = at.get(j, k);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(k, i, at.get(k, i));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * at.get(j, i);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              at.set(j, i, at.get(j, i) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(k, i, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = at.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = at.get(p - 1, nrt);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(j, i, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(k, i) * U.get(j, i);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(j, i, U.get(j, i) + t * U.get(k, i));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(k, i, -U.get(k, i));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(k, i, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(k, i, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(k, i) * V.get(j, i);\n            }\n            t = -t / V.get(k, k + 1);\n            for (let i = k + 1; i < n; i++) {\n              V.set(j, i, V.get(j, i) + t * V.get(k, i));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(k, i, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(j, i) + sn * V.get(p - 1, i);\n                V.set(p - 1, i, -sn * V.get(j, i) + cs * V.get(p - 1, i));\n                V.set(j, i, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(j, i) + sn * U.get(k - 1, i);\n                U.set(k - 1, i, -sn * U.get(j, i) + cs * U.get(k - 1, i));\n                U.set(j, i, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(j, i) + sn * V.get(j + 1, i);\n                V.set(j + 1, i, -sn * V.get(j, i) + cs * V.get(j + 1, i));\n                V.set(j, i, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(j, i) + sn * U.get(j + 1, i);\n                U.set(j + 1, i, -sn * U.get(j, i) + cs * U.get(j + 1, i));\n                U.set(j, i, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(k, i, -V.get(k, i));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(k + 1, i);\n                V.set(k + 1, i, V.get(k, i));\n                V.set(k, i, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(k + 1, i);\n                U.set(k + 1, i, U.get(k, i));\n                U.set(k, i, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    // Restore the logical (row-major) layout of the singular vectors, which were\n    // accumulated in transposed storage for cache-sequential inner loops. V is\n    // always square and U is square whenever the input is, so this is done in\n    // place (no allocation) in the common case.\n    U = U.isSquare() ? transposeSquareInPlace(U) : U.transpose();\n    V = transposeSquareInPlace(V);\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transposeMultiply(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transposeMultiply(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      // tred2/tql2 access V almost exclusively down columns (the row index\n      // varies in the hot loops). Storing V transposed turns those into\n      // sequential row scans of the row-major backing store; we transpose it\n      // back to the logical layout before returning. V.get(j, i) holds the\n      // logical V(i, j).\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(j, i, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n      // V is square; restore the logical layout in place (no allocation).\n      transposeSquareInPlace(V);\n    } else {\n      // The non-symmetric path (orthes/hqr2) has two O(n^3) phases with opposite\n      // memory-layout preferences (the QR sweep favours column-major eigenvectors\n      // while the back-transform favours row-major), so a single transposed\n      // storage cannot help both. It is left in the original row-major layout.\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(j, n - 1);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(j, i - 1);\n        V.set(j, i, 0);\n        V.set(i, j, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(i, j, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(j, k) * d[k];\n          e[k] += V.get(j, k) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(j, k, V.get(j, k) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(j, i - 1);\n        V.set(j, i, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(i, n - 1, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(i + 1, k) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(i + 1, k) * V.get(j, k);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(j, k, V.get(j, k) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(i + 1, k, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(j, n - 1);\n    V.set(j, n - 1, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(i + 1, k);\n            V.set(i + 1, k, s * V.get(i, k) + c * h);\n            V.set(i, k, c * V.get(i, k) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(i, j);\n        V.set(i, j, V.get(k, j));\n        V.set(k, j, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n//# sourceMappingURL=matrix.js.map\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { Matrix } from 'ml-matrix';\nconst absDiff = (a, b) => Math.abs(a - b);\n/**\n * Generate a cost matrix from two set of values using the function passed. by default it\n * generate the cost matrix of absolute value of differences.\n * @param rowsArray - array of values that will represent the rows of the cost matrix.\n * @param columnsArray - array of values that will represent the columns of the cost matrix.\n * @param options - options.\n * @returns a matrix instance with dimensions rowsArray.length x columnsArray.length.\n */\nexport function xCostMatrix(rowsArray, columnsArray, options = {}) {\n    const { fct = absDiff } = options;\n    const nbRows = rowsArray.length;\n    const nbColumns = columnsArray.length;\n    const result = new Matrix(nbRows, nbColumns);\n    for (let r = 0; r < nbRows; r++) {\n        for (let c = 0; c < nbColumns; c++) {\n            result.set(r, c, fct(rowsArray[r], columnsArray[c]));\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCostMatrix.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculate an array of the same size that is the cumulative values\n * @param array - initial array\n */\nexport function xCumulative(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    const newArray = new Float64Array(array.length);\n    if (array.length === 0)\n        return newArray;\n    newArray[0] = array[0];\n    for (let i = 1; i < array.length; i++) {\n        newArray[i] = newArray[i - 1] + array[i];\n    }\n    return newArray;\n}\n//# sourceMappingURL=xCumulative.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (const value of values) {\n        const x = value - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","/**\n * Check the similarity between array created by xyEqualIntegrationVector\n * @param array1 - first equal integration vector.\n * @param array2 - second equal integration vector.\n * @param options - options.\n * @returns similarity score between 0 and 1.\n */\nexport function xEqualIntegrationVectorSimilarity(array1, array2, options = {}) {\n    const { recenter = true, similarityFct = (a, b) => Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b)) ? 1 : 0, } = options;\n    const depth1 = getDepth(array1);\n    const depth2 = getDepth(array2);\n    const depth = Math.min(depth1, depth2);\n    // need to copy the array because we shift the data in place if recenter is true\n    if (recenter) {\n        array1 = array1.slice();\n    }\n    let similarity = 0;\n    // we will compare level by level\n    // and recenter the array at each level\n    for (let level = 0; level < depth; level++) {\n        const maxSimilarity = 1 / depth / (1 << level);\n        for (let slot = 0; slot < 1 << level; slot++) {\n            const index = (1 << level) - 1 + slot;\n            const value1 = array1[index];\n            const value2 = array2[index];\n            similarity += similarityFct(value1, value2) * maxSimilarity;\n            if (recenter) {\n                shiftSubtree(array1, depth, level, slot, value2 - value1);\n            }\n        }\n    }\n    return similarity;\n}\nfunction shiftSubtree(array, depth, level, slot, shift) {\n    for (let currentLevel = level; currentLevel < depth; currentLevel++) {\n        const levelSlotShift = slot * (1 << (currentLevel - level));\n        const levelShift = (1 << currentLevel) - 1;\n        const levelSlotSize = 1 << (currentLevel - level);\n        for (let slotIndex = levelSlotShift; slotIndex < levelSlotShift + levelSlotSize; slotIndex++) {\n            const index = levelShift + slotIndex;\n            array[index] += shift;\n        }\n    }\n}\nfunction getDepth(array) {\n    const depth = Math.log2(array.length + 1);\n    if (depth % 1 !== 0) {\n        throw new Error('the array length is not a power of 2 minus 1');\n    }\n    return depth;\n}\n//# sourceMappingURL=xEqualIntegrationVectorSimilarity.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n *  Returns the targetIndex\n * @param x - array of numbers\n * @param options - options\n */\nexport function xGetTargetIndex(x, options = {}) {\n    const { target, targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            return xFindClosestIndex(x, target);\n        }\n        else {\n            return 0;\n        }\n    }\n    return targetIndex;\n}\n//# sourceMappingURL=xGetTargetIndex.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","import FFT from 'fft.js';\n// An FFT instance precomputes size-dependent twiddle factors and a bit-reversal\n// table; for a 64k transform that setup dominates the cost. A single shared\n// cache keeps one instance per size so every FFT-based function in the library\n// (spectra, matrices, Hilbert transforms…) reuses it instead of rebuilding the\n// tables on each call.\nclass FFTCache {\n    #maxSize;\n    #instances = new Map();\n    constructor(maxSize = 1) {\n        this.#maxSize = maxSize;\n    }\n    get maxSize() {\n        return this.#maxSize;\n    }\n    set maxSize(value) {\n        if (!Number.isInteger(value) || value < 1) {\n            throw new RangeError(`FFT cache size must be a positive integer, got ${value}.`);\n        }\n        this.#maxSize = value;\n        // Honour the new bound right away: if already over it, drop everything,\n        // matching the clear-when-full strategy used in get().\n        if (this.#instances.size > value)\n            this.#instances.clear();\n    }\n    get(size) {\n        let fft = this.#instances.get(size);\n        if (fft === undefined) {\n            // Bound the cache so transforming many different sizes cannot grow it\n            // without limit. Rather than track insertion order to evict a single\n            // entry, drop everything once full: distinct sizes are rare, so the\n            // common workload never hits this and stays at full speed.\n            if (this.#instances.size >= this.#maxSize)\n                this.#instances.clear();\n            fft = new FFT(size);\n            this.#instances.set(size, fft);\n        }\n        return fft;\n    }\n    clear() {\n        this.#instances.clear();\n    }\n}\n// Process-wide singleton: a single shared cache, like a static global, but kept\n// as an instance so its state stays fully encapsulated.\nconst fftCache = new FFTCache();\n/**\n * Returns a cached `fft.js` instance for the given transform size, building it\n * on first use. Shared by every FFT-based function in the library so the\n * size-dependent lookup tables are computed once and reused across calls.\n * @param size - number of points of the transform.\n * @returns a reusable FFT instance for that size.\n */\nexport function getFFT(size) {\n    return fftCache.get(size);\n}\n/**\n * Releases every cached FFT instance. The library keeps one FFT instance per\n * transform size to avoid rebuilding its lookup tables on each call; each\n * instance holds tables proportional to its size (≈1 MB for a 64k transform).\n * Call this to free that memory once you are done transforming — for example\n * after processing a batch of large spectra. Subsequent transforms simply\n * rebuild whatever sizes they need.\n */\nexport function clearFFTCache() {\n    fftCache.clear();\n}\n/**\n * Sets the maximum number of distinct transform sizes kept in the shared FFT\n * cache (default 1). When the cache is full and a new size is requested, the\n * whole cache is dropped and rebuilt on demand. Lowering the limit below the\n * current number of cached sizes clears the cache immediately.\n * @param maxSize - maximum number of cached sizes; must be a positive integer.\n */\nexport function setFFTCacheMaxSize(maxSize) {\n    fftCache.maxSize = maxSize;\n}\n//# sourceMappingURL=fftCache.js.map","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options.\n * @returns array of distributed numbers between \"from\" and \"to\".\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiplyUint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport class XSadd {\n    random;\n    state;\n    /**\n     * create an instance of XSadd with the specified seed\n     * @param [seed=Date.now()]\n     */\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError(\"seed must be an integer\");\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiplyUint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n//# sourceMappingURL=XSadd.js.map","import { XSadd } from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length.\n * @param options - options.\n * @returns array of random floats normally distributed.\n */\nexport function createRandomArray(options = {}) {\n    const { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSadd(seed);\n    const returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal': {\n            const gaussianGenerator = new GaussianGenerator(mean, standardDeviation, generator);\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = gaussianGenerator.generateGaussian();\n            }\n            break;\n        }\n        case 'uniform': {\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        }\n        default: {\n            throw new Error(`unknown distribution: ${String(distribution)}`);\n        }\n    }\n    return returnArray;\n}\nclass GaussianGenerator {\n    #spare = 0;\n    #hasSpare = false;\n    #mean;\n    #standardDeviation;\n    #generator;\n    constructor(mean, standardDeviation, generator) {\n        this.#mean = mean;\n        this.#standardDeviation = standardDeviation;\n        this.#generator = generator;\n    }\n    generateGaussian() {\n        let val, u, v, s;\n        if (this.#hasSpare) {\n            this.#hasSpare = false;\n            val = this.#spare * this.#standardDeviation + this.#mean;\n        }\n        else {\n            do {\n                u = this.#generator.random() * 2 - 1;\n                v = this.#generator.random() * 2 - 1;\n                s = u * u + v * v;\n            } while (s >= 1 || s === 0);\n            s = Math.sqrt((-2 * Math.log(s)) / s);\n            this.#spare = v * s;\n            this.#hasSpare = true;\n            val = this.#mean + this.#standardDeviation * u * s;\n        }\n        return val;\n    }\n}\n//# sourceMappingURL=createRandomArray.js.map","/**\n * Check if a number is a power of two.\n * @param n - input number.\n */\nexport function isPowerOfTwo(n) {\n    return n !== 0 && (n & (n - 1)) === 0;\n}\n//# sourceMappingURL=isPowerOfTwo.js.map","/**\n * Get the size of the next power of two.\n * @param n - input number.\n */\nexport function nextPowerOfTwo(n) {\n    if (n === 0)\n        return 1;\n    n--;\n    n |= n >> 1;\n    n |= n >> 2;\n    n |= n >> 4;\n    n |= n >> 8;\n    n |= n >> 16;\n    return n + 1;\n}\n//# sourceMappingURL=nextPowerOfTwo.js.map","/**\n * Resolves all promises in an object recursively. The promise with be replaced by the resolved value.\n * The changes are therefore done in-place !\n * @param object - object to resolve.\n * @returns the resolved object.\n */\nexport async function recursiveResolve(object) {\n    if (typeof object !== 'object')\n        return object;\n    const promises = [];\n    await appendPromises(object, promises);\n    await Promise.all(promises);\n    return object;\n}\nfunction appendPromises(object, promises) {\n    if (typeof object !== 'object')\n        return object;\n    for (const key in object) {\n        if (typeof object[key].then === 'function') {\n            promises.push(object[key].then((value) => (object[key] = value)));\n        }\n        else if (typeof object[key] === 'object') {\n            appendPromises(object[key], promises);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveResolve.js.map","/**\n * Recursively change the typed arrays to normal arrays\n * The changes are done in-place !\n * @param object - object to transform.\n * @returns the transformed object.\n */\nexport function recursiveUntypeArrays(object) {\n    if (typeof object !== 'object')\n        return object;\n    object = modifier(object);\n    return object;\n}\nfunction modifier(object) {\n    if (typeof object !== 'object')\n        return object;\n    if (ArrayBuffer.isView(object)) {\n        return Array.from(object);\n    }\n    for (const key in object) {\n        if (ArrayBuffer.isView(object[key])) {\n            object[key] = Array.from(object[key]);\n        }\n        else if (typeof object[key] === 'object') {\n            modifier(object[key]);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveUntypeArrays.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param array1 - the array that will be rotated\n * @param array2 - second array or number\n * @returns array after subtraction\n */\nexport function xSubtract(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xSubtract.js.map","import { xAbsolute } from \"../x/xAbsolute.js\";\nimport { xMedian } from \"../x/xMedian.js\";\nimport { xSubtract } from \"../x/xSubtract.js\";\n/**\n * Calculate the weights based on the control points and the MAD between the original data and the new baseline.\n * MAD (Median Absolute Deviation) is more robust to outliers and\n * the factor (1.4826) makes MAD scaled to be equivalent to the standard deviation for\n * normal distributions. {@link https://en.m.wikipedia.org/wiki/Median_absolute_deviation}.\n * @param yData - the original data.\n * @param baseline - the new baseline calculated.\n * @param weights - the current weights to be updated.\n * @param options - options for updating weights.\n * @returns new array of weights.\n */\nexport function calculateAdaptiveWeights(yData, baseline, weights, options) {\n    const { controlPoints, factorStd = 3, learningRate = 0.5 } = options;\n    if (learningRate === 0) {\n        return weights;\n    }\n    const absResiduals = xAbsolute(xSubtract(yData, baseline));\n    const medAbsRes = xMedian(absResiduals);\n    const mad = 1.4826 * medAbsRes;\n    const threshold = mad > 0 ? factorStd * mad : 1;\n    const rawWeights = new Float64Array(absResiduals.length);\n    for (let i = 0; i < absResiduals.length; i++) {\n        rawWeights[i] = Math.exp(-((absResiduals[i] / threshold) ** 2));\n    }\n    const oneMinusLearningRate = 1 - learningRate;\n    for (let i = 0; i < weights.length; i++) {\n        let weight = weights[i];\n        weight = (oneMinusLearningRate * weight + learningRate * rawWeights[i]) / 4;\n        if (controlPoints && controlPoints[i] > 0) {\n            weight *= 4;\n        }\n        weights[i] = weight;\n    }\n    weights[0] = 1;\n    weights[weights.length - 1] = 1;\n    return weights;\n}\n//# sourceMappingURL=calculateAdaptiveWeights.js.map","/*\n * This file is based on the code from \"deep-cleaner\" by darksinge\n * https://github.com/darksinge/deep-cleaner\n *\n * The following license applies:\n *\n * MIT License\n *\n * Copyright (c) 2021 darksinge\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/**\n * Recursively removes empty values from an object. This will also remove empty object or empty array.\n * @param object - the object being cleaned\n * @param options - optional object with options for cleaning.\n * @returns the cleaned object.\n */\nexport function recursiveRemoveEmptyAndNull(object, options = {}) {\n    const { propertiesToRemove = [], ...otherOptions } = options;\n    if (propertiesToRemove.length > 0) {\n        for (const removeProperty of propertiesToRemove) {\n            cleanCyclicObject(object, removeProperty, otherOptions);\n        }\n    }\n    else {\n        cleanCyclicObject(object, '', otherOptions);\n    }\n    return object;\n}\n/**\n * cleanCyclicObject Removes any undefined, null, or empty strings, arrays, or objects from `object`.\n *    Uses a `WeakMap` to keep track of objects that have been visited while recursively cleaning\n *    an object to prevent infinite recursive calls.\n * @param object - the object to be cleaned\n * @param propertiesToRemove - optional key to remove from `object`. If not specified, the default\n *    behavior is to remove \"empty\" values from `object`. A value is considered to be empty if it\n *    is one of the following:\n *      - empty strings\n *      - empty arrays\n *      - empty objects\n *      - values that are null\n *      - values that are undefined\n * @param removeProperty - key to remove from the object.\n * @param options - options.\n */\nfunction cleanCyclicObject(object, removeProperty, options = {}) {\n    const visitedObjects = new WeakMap();\n    function recursiveClean(object, parent, parentKey) {\n        if (isObject(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (const key of Reflect.ownKeys(object)) {\n                if ((removeProperty && key === removeProperty) ||\n                    (!removeProperty && isEmpty(object[key]))) {\n                    Reflect.deleteProperty(object, key);\n                }\n                else {\n                    recursiveClean(object[key], object, key);\n                }\n            }\n            if (!removeProperty && isEmpty(object) && parent) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n        else if (isArray(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (let i = 0; i < object.length; i++) {\n                recursiveClean(object[i], object, i);\n            }\n            for (let i = object.length - 1; i >= 0; i--) {\n                const arrayElement = object[i];\n                if (isEmpty(arrayElement) &&\n                    !(isArray(arrayElement) &&\n                        arrayElement.length === 0 &&\n                        options?.removeEmptyArrayAndObject === false)) {\n                    object.splice(i, 1);\n                }\n            }\n            for (const key of Reflect.ownKeys(object)) {\n                const isIndex = typeof key === 'string' && /^\\d+$/.test(key);\n                if (!isIndex) {\n                    const value = object[key];\n                    if ((removeProperty && key === removeProperty) ||\n                        (!removeProperty && isEmpty(value))) {\n                        Reflect.deleteProperty(object, key);\n                    }\n                    else {\n                        recursiveClean(value, object, key);\n                    }\n                }\n            }\n            if (!removeProperty &&\n                object.length === 0 &&\n                parent &&\n                options?.removeEmptyArrayAndObject) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n    }\n    recursiveClean(object);\n}\n/**\n * repr gets the string representation of `arg`\n * @param {} arg - unknown function argument\n * @returns a string representation of `arg`\n */\nfunction repr(arg) {\n    return Object.prototype.toString.call(arg);\n}\n/**\n * Check if the argument is an array\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an Array, false otherwise\n */\nfunction isArray(arg) {\n    return Array.isArray ? Array.isArray(arg) : repr(arg) === '[object Array]';\n}\n/**\n * Check if the argument is an object\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an object.\n */\nfunction isObject(arg) {\n    return repr(arg) === '[object Object]';\n}\n/**\n * Check if the argument is a string\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is a String, false otherwise\n */\nfunction isString(arg) {\n    return repr(arg) === '[object String]';\n}\n/**\n * Check if the argument is null.\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is of type Null, false otherwise\n */\nfunction isNull(arg) {\n    return repr(arg) === '[object Null]';\n}\n/**\n * Check if the argument is undefined.\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is of type Undefined, false otherwise.\n */\nfunction isUndefined(arg) {\n    return arg === undefined;\n}\n/**\n * Check if the argument is null, undefined, an empty string, array, or object.\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an empty string,\n *  array, or object. Also returns true is `arg` is null or\n *  undefined. Returns false otherwise.\n */\nfunction isEmpty(arg) {\n    return (isUndefined(arg) ||\n        isNull(arg) ||\n        (isString(arg) && arg.length === 0) ||\n        (isArray(arg) && arg.length === 0) ||\n        (isObject(arg) && Object.keys(arg).length === 0));\n}\n//# sourceMappingURL=recursiveRemoveEmptyAndNull.js.map","import { getFFT } from \"../utils/fftCache.js\";\nimport { isPowerOfTwo, nextPowerOfTwo } from \"../utils/index.js\";\nimport { xCheck } from \"./xCheck.js\";\n/**\n * Performs the Hilbert transform\n * @link https://en.wikipedia.org/wiki/Hilbert_transform\n * @param array - array containing values.\n * @param options - options.\n * @returns a new vector with 90 degree shift regarding the phase of the original function.\n */\nexport function xHilbertTransform(array, options = {}) {\n    xCheck(array);\n    const { forceFFT = false } = options;\n    const length = array.length;\n    if (isPowerOfTwo(length)) {\n        return hilbertTransformWithFFT(array);\n    }\n    else if (forceFFT) {\n        return resampling(hilbertTransformWithFFT(resampling(array, nextPowerOfTwo(length))), length);\n    }\n    else {\n        return hilbertTransform(array);\n    }\n}\n/**\n * Performs the discrete Hilbert transform using fast Fourier transform\n * @param array - array containing values.\n * @returns a new vector with 90 degree shift regarding the phase of the original function.\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nfunction hilbertTransformWithFFT(array) {\n    const length = array.length;\n    const fft = getFFT(length);\n    // Single reusable buffer for FFT spectrum\n    const spectrum = new Float64Array(length * 2);\n    // Forward FFT\n    fft.realTransform(spectrum, array);\n    fft.completeSpectrum(spectrum);\n    const half = length >> 1;\n    // Zero Nyquist\n    const j = half << 1;\n    spectrum[j] = 0;\n    spectrum[j + 1] = 0;\n    // Negate negative frequencies\n    for (let j = (half + 1) << 1; j < spectrum.length; j += 2) {\n        spectrum[j] = -spectrum[j];\n        spectrum[j + 1] = -spectrum[j + 1];\n    }\n    const hilbertSignal = new Float64Array(length * 2);\n    fft.inverseTransform(hilbertSignal, spectrum);\n    // Extract imaginary part directly into output\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = hilbertSignal[i * 2 + 1];\n    }\n    return result;\n}\n/**\n * Performs the discrete Hilbert transform\n * @param array - array containing values.\n * @param options - options.\n * @param options.inClockwise - whether to apply clockwise rotation.\n * @returns a new vector with 90 degree shift regarding the phase of the original function.\n */\nfunction hilbertTransform(array, options = {}) {\n    const { inClockwise = true } = options;\n    const input = [0, ...array, 0];\n    const result = new Float64Array(array.length);\n    for (let k = 1; k < input.length - 1; k++) {\n        let aSum = 0;\n        for (let i = 0; i < k - 1; i++) {\n            const log = Math.log((k - i) / (k - i - 1));\n            aSum += input[i] * log + (input[i + 1] - input[i]) * (-1 + (k - i) * log);\n        }\n        const b = input[k - 1] - input[k + 1];\n        let cSum = 0;\n        for (let i = k + 1; i < input.length - 1; i++) {\n            const log = Math.log((i - k) / (i - k + 1));\n            cSum += input[i] * log + (input[i - 1] - input[i]) * (1 + (i - k) * log);\n        }\n        result[k - 1] = ((inClockwise ? 1 : -1) * (aSum + b + cSum)) / Math.PI;\n    }\n    return result;\n}\n/**\n * Performs resampling of an input array to the desired length employing linear interpolation.\n * @param array - array containing values.\n * @param length - the length of the resulting array.\n * @returns a new array of the desired length.\n * @link https://en.wikipedia.org/wiki/Sample-rate_conversion\n */\nfunction resampling(array, length) {\n    xCheck(array);\n    const oldLength = array.length;\n    const ratio = (oldLength - 1) / (length - 1);\n    const result = new Float64Array(length);\n    let currentIndex = 0;\n    let floor = Math.floor(currentIndex);\n    let ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n    let diff = currentIndex - floor;\n    for (let i = 0; i < length; i++) {\n        result[i] = array[floor] * (1 - diff) + array[ceil] * diff;\n        currentIndex += ratio;\n        floor = Math.floor(currentIndex);\n        ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n        diff = currentIndex - floor;\n    }\n    return result;\n}\n//# sourceMappingURL=xHilbertTransform.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { xAbsolute } from \"./xAbsolute.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Calculates a histogram of defined number of slots\n * @param array - array containing values.\n * @param options - options.\n * @returns result of the histogram.\n */\nexport function xHistogram(array, options = {}) {\n    xCheck(array);\n    const histogram = options.histogram;\n    const { centerX = true, nbSlots = histogram === undefined ? 256 : histogram.x.length, logBaseX, logBaseY, absolute = false, } = options;\n    if (absolute) {\n        array = xAbsolute(array);\n    }\n    if (logBaseX) {\n        array = array.slice();\n        const logOfBase = Math.log10(logBaseX);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = Math.log10(array[i]) / logOfBase;\n        }\n    }\n    const { min = xMinValue(array), max = xMaxValue(array) } = options;\n    const slotSize = (max - min) / (nbSlots + Number.EPSILON);\n    const y = histogram === undefined ? new Float64Array(nbSlots) : histogram.y;\n    const x = histogram === undefined\n        ? Array.from(createFromToArray({\n            from: min + (centerX ? slotSize / 2 : 0),\n            to: max - (centerX ? slotSize / 2 : 0),\n            length: nbSlots,\n        }))\n        : histogram.x;\n    for (const element of array) {\n        const index = Math.max(Math.min(Math.floor((element - min - Number.EPSILON) / slotSize), nbSlots - 1), 0);\n        y[index]++;\n    }\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xHistogram.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - monotone growing array of number.\n * @param options - options.\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxAbsoluteValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = Math.abs(array[fromIndex]);\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] >= 0) {\n            if (array[i] > maxValue) {\n                maxValue = array[i];\n            }\n        }\n        else if (-array[i] > maxValue) {\n            maxValue = -array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxAbsoluteValue.js.map","import { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array - array of numbers.\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","/**\n * Applies the Rayleigh inverse cumulative distribution for a single value.\n * @param input - cumulative probability value.\n * @returns the inverse value for the Rayleigh distribution.\n */\nexport function simpleNormInvMagnitude(input) {\n    return -Math.sqrt(-2 * Math.log(1 - input));\n}\n//# sourceMappingURL=simpleNormInvMagnitude.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable no-loss-of-precision */\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Evaluates a polynomial at x using Horner's method.\n * @param c - array of polynomial coefficients.\n * @param x - evaluation point.\n * @returns polynomial value.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - input value.\n * @param v - shift value.\n * @param P - array of numerator polynomial coefficients.\n * @param Q - array of denominator polynomial coefficients.\n * @param Y - scale factor.\n * @returns rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - input value.\n * @returns evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies the inverse of the normal cumulative distribution for a single value.\n * @param input - cumulative probability value.\n * @returns the inverse value for the normal distribution.\n */\nexport function simpleNormInvRaw(input) {\n    return -1 * Math.SQRT2 * erfcinv(2 * input);\n}\n//# sourceMappingURL=simpleNormInvRaw.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvMagnitude } from \"./utils/simpleNormInvMagnitude.js\";\nimport { simpleNormInvRaw } from \"./utils/simpleNormInvRaw.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOffFromPositive = true, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = createNegativeSign(input, firstNegativeValueIndex);\n    const skyPoint = signPositive[0];\n    const cutOff = options.cutOff ??\n        (cutOffFromPositive\n            ? determineCutOff(signPositive, { magnitudeMode })\n            : null);\n    const noiseLevelPositive = calculateNoiseLevel(signPositive, {\n        factorStd,\n        refine,\n        magnitudeMode,\n        cutOff,\n    });\n    const noiseLevelNegative = calculateNoiseLevel(signNegative, {\n        factorStd,\n        refine,\n        magnitudeMode,\n        cutOff,\n    });\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\nfunction calculateNoiseLevel(sign, options) {\n    const { factorStd, refine, magnitudeMode, cutOff } = options;\n    if (sign.length === 0)\n        return 0;\n    const simpleNormInvValue = magnitudeMode\n        ? simpleNormInvMagnitude\n        : simpleNormInvRaw;\n    const cutOffDist = cutOff || determineCutOff(sign, { magnitudeMode });\n    let noiseLevel = sign[Math.floor(sign.length * cutOffDist)];\n    let cloneSign = sign.slice();\n    let cutOffSignalsIndex = -1;\n    if (refine) {\n        const cutOffSignals = noiseLevel * factorStd;\n        cutOffSignalsIndex = sign.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndex > -1) {\n            cloneSign = sign.slice(cutOffSignalsIndex);\n            noiseLevel = cloneSign[Math.floor(cloneSign.length * cutOffDist)];\n        }\n    }\n    if (refine && cutOffSignalsIndex > -1) {\n        const effectiveCutOffDist = (cutOffDist * cloneSign.length + cutOffSignalsIndex) /\n            (cloneSign.length + cutOffSignalsIndex);\n        const refinedCorrectionFactor = -1 * simpleNormInvValue(effectiveCutOffDist / 2);\n        noiseLevel /= refinedCorrectionFactor;\n    }\n    else {\n        const correctionFactor = -simpleNormInvValue(cutOffDist / 2);\n        noiseLevel /= correctionFactor;\n    }\n    return noiseLevel;\n}\n/**\n * Estimates where the \"noise region\" begins in a SAN-plot-style sorted\n * intensity series (Sheberstov et al., Magn. Reson. Chem. 2020, 58, 466-472,\n * https://doi.org/10.1002/mrc.4882).\n *\n * `signPositive` is expected to already be sorted by decreasing absolute\n * magnitude (the paper's S+ or S- series). For each quantile fraction `i`\n * (fraction of points at or beyond that position, counting from the tail),\n * we invert the Gaussian (or Rayleigh, in magnitude mode) order-statistics\n * relationship to get a local estimate of the noise standard deviation\n * (sigma). This estimate is only expected to be stable/flat once we are\n * fully inside the true noise region; in the signal and artifact regions\n * it will be biased and noisy. We therefore scan candidate quantile windows\n * and pick the one where the sigma estimates are most self-consistent\n * (lowest variance) - a proxy for \"where the noise region reliably starts\".\n * <<<<<<< Updated upstream\n *\n * =======\n * >>>>>>> Stashed changes\n * @param signPositive - an array of positive numbers.\n * @param options - optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - if true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - an object specifying the range and step for consideration.\n * @param options.considerList.from - the starting point of the range. Default is 0.5.\n * @param options.considerList.step - the step size for the range. Default is 0.1.\n * @param options.considerList.to - the ending point of the range. Default is 0.9.\n * @returns the optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    const inverseQuantileFn = magnitudeMode\n        ? simpleNormInvMagnitude\n        : simpleNormInvRaw;\n    const indexMax = signPositive.length - 1;\n    // For each quantile fraction, compute a local sigma estimate by inverting\n    // the theoretical relationship between order statistics and the assumed\n    // noise distribution (Gaussian or Rayleigh).\n    const sigmaEstimates = [];\n    for (let quantileFraction = 0.01; quantileFraction <= 0.99; quantileFraction += 0.01) {\n        const index = Math.round(indexMax * quantileFraction);\n        const sigma = -signPositive[index] / inverseQuantileFn(quantileFraction / 2);\n        sigmaEstimates.push([quantileFraction, Math.abs(sigma)]);\n    }\n    const { from, to, step } = considerList;\n    const halfWindow = step / 2;\n    let bestVariance = Number.MAX_SAFE_INTEGER;\n    let bestQuantileFraction = 0.5;\n    for (let windowCenter = from; windowCenter <= to; windowCenter += step) {\n        const windowFloor = windowCenter - halfWindow;\n        const windowTop = windowCenter + halfWindow;\n        let count = 0;\n        let sum = 0;\n        // First pass: compute mean\n        for (const [q, absSigma] of sigmaEstimates) {\n            if (q > windowFloor && q < windowTop) {\n                sum += absSigma;\n                count++;\n            }\n        }\n        // Guard against empty windows.\n        if (count === 0)\n            continue;\n        const meanSigma = sum / count;\n        // Second pass: compute variance\n        let variance = 0;\n        for (const [q, absSigma] of sigmaEstimates) {\n            if (q > windowFloor && q < windowTop) {\n                variance += (absSigma - meanSigma) ** 2;\n            }\n        }\n        if (variance < bestVariance) {\n            bestVariance = variance;\n            bestQuantileFraction = windowCenter;\n        }\n    }\n    return bestQuantileFraction;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - the input array of numbers to be processed.\n * @param options - an optional object containing configuration options.\n * @param options.logBaseY - the logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - an object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns an object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - the input array to be scaled.\n * @param options - an optional object containing scaling options.\n * @param options.logBaseY - if provided, the array values will be scaled using the logarithm of this base.\n * @returns an object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - the input array of numbers to be processed.\n * @param options - an object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @param from\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction createNegativeSign(array, from) {\n    const length = array.length - from;\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = -array[array.length - 1 - i];\n    }\n    return result;\n}\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    input.sort();\n    input.reverse();\n    return input;\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from \"./xMedianAbsoluteDeviation.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array - array of numbers.\n * @returns noise level corresponding to one standard deviation.\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Calculate the sum of the values\n * @param array - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns sum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xSum } from \"./xSum.js\";\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - array containing values.\n * @param options - options.\n * @returns normalized data.\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (const value of input) {\n        sumValue += Math.abs(value);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Pads an array symmetrically on both sides.\n * @param array - the array that will be padded\n * @param options - options\n * @returns padded Float64Array\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","/**\n * This function performs a circular shift to an array.\n * Positive values of shifts will shift to the right and negative values will do to the left.\n * @example xRotate([1,2,3,4],1) -> [4,1,2,3]\n * @example xRotate([1,2,3,4],-1) -> [2,3,4,1]\n * @param array - array\n * @param shift - shift\n * @returns - rotated array\n */\nexport function xRotate(array, shift) {\n    shift = shift % array.length;\n    if (shift < 0)\n        shift += array.length;\n    const result = new Float64Array(array.length);\n    result.set(array.slice(array.length - shift));\n    result.set(array.slice(0, array.length - shift), shift);\n    return result;\n}\n//# sourceMappingURL=xRotate.js.map","import { createNumberArray } from \"../utils/index.js\";\nexport function xSequentialFillFromStep(parameters, options = {}) {\n    const { from, step, size } = parameters;\n    const { ArrayConstructor = Float64Array } = options;\n    const result = createNumberArray(ArrayConstructor, size);\n    for (let i = 0; i < size; i++) {\n        result[i] = from + i * step;\n    }\n    return result;\n}\n//# sourceMappingURL=xSequentialFillFromStep.js.map","/**\n * Function that sorts arrays or Float64Arrays in descending order\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortDescending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        array.reverse();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => b - a);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortDescending.js.map","/**\n * Clone a matrix.\n * @param matrix - input matrix.\n */\nexport function matrixClone(matrix) {\n    return matrix.map((row) => row.slice(0));\n}\n//# sourceMappingURL=matrixClone.js.map","import { createNumberArray } from \"../utils/index.js\";\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options - options.\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n/**\n * Solves a system of linear equations using the Cholesky decomposition method.\n * It is a direct conversion to TS from {@link https://github.com/scijs/cholesky-solve}\n * @param nonZerosArray - the matrix in triplet form (array of arrays), where each sub-array contains three elements: row index, column index, and value.\n * @param dimension - the order of the matrix (number of rows/columns).\n * @param permutationEncoded - optional permutation array. If provided, it will be used to permute the matrix.\n * @returns a function that takes a right-hand side vector `b` and returns the solution vector `x`, or `null` if the decomposition fails.\n */\nexport function matrixCholeskySolver(nonZerosArray, dimension, permutationEncoded) {\n    if (permutationEncoded) {\n        const pinv = new Int32Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\n        // Build a permuted copy (kept as plain arrays for compatibility)\n        const mt = new Array(nonZerosArray.length);\n        for (let a = 0; a < nonZerosArray.length; ++a) {\n            const [r, c, value] = nonZerosArray[a];\n            const ar = pinv[r];\n            const ac = pinv[c];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        // use a typed identity permutation\n        const p = new Int32Array(dimension);\n        for (let i = 0; i < dimension; ++i) {\n            p[i] = i;\n        }\n        permutationEncoded = p;\n    }\n    const nnz = nonZerosArray.length;\n    const ap = new Int32Array(dimension + 1);\n    const ai = new Int32Array(nnz);\n    const ax = new Float64Array(nnz);\n    const lnz = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const col = nonZerosArray[idx][1];\n        lnz[col]++;\n    }\n    ap[0] = 0;\n    for (let i = 0; i < dimension; ++i) {\n        ap[i + 1] = ap[i] + lnz[i];\n    }\n    const colOffset = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const e = nonZerosArray[idx];\n        const col = e[1];\n        const adr = ap[col] + colOffset[col];\n        ai[adr] = e[0];\n        ax[adr] = e[2];\n        colOffset[col]++;\n    }\n    const d = new Float64Array(dimension);\n    const y = new Float64Array(dimension);\n    const lp = new Int32Array(dimension + 1);\n    const parent = new Int32Array(dimension);\n    const lnzArray = new Int32Array(dimension);\n    const flag = new Int32Array(dimension);\n    const pattern = new Int32Array(dimension);\n    const bp1 = new Float64Array(dimension);\n    const x = new Float64Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const nz = lp[dimension];\n    const lx = new Float64Array(nz);\n    const li = new Int32Array(nz);\n    const result = ldlNumeric(dimension, ap, ai, ax, lp, parent, lnzArray, li, lx, d, y, pattern, flag);\n    if (result === dimension) {\n        return (b) => {\n            ldlPerm(dimension, bp1, b, permutationEncoded);\n            ldlLsolve(dimension, bp1, lp, li, lx);\n            ldlDsolve(dimension, bp1, d);\n            ldlLTsolve(dimension, bp1, lp, li, lx);\n            ldlPermt(dimension, x, bp1, permutationEncoded);\n            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nfunction ldlSymbolic(dimension, ap, ai, lp, parent, lnz, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const flagLoc = flag;\n    for (let k = 0; k < dimension; k++) {\n        parentLoc[k] = -1;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2 = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2; p++) {\n            let i = aiLoc[p];\n            if (i < k) {\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    if (parentLoc[i] === -1)\n                        parentLoc[i] = k;\n                    lnzLoc[i]++;\n                    flagLoc[i] = k;\n                }\n            }\n        }\n    }\n    lp[0] = 0;\n    for (let k = 0; k < dimension; k++) {\n        lp[k + 1] = lp[k] + lnz[k];\n    }\n}\nfunction ldlNumeric(dimension, ap, ai, ax, lp, parent, lnz, li, lx, d, y, pattern, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const axLoc = ax;\n    const lpLoc = lp;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const liLoc = li;\n    const lxLoc = lx;\n    const dLoc = d;\n    const yLoc = y;\n    const patternLoc = pattern;\n    const flagLoc = flag;\n    let yi, lKi;\n    for (let k = 0; k < dimension; k++) {\n        yLoc[k] = 0;\n        let top = dimension;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2col = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2col; p++) {\n            let i = aiLoc[p];\n            if (i <= k) {\n                yLoc[i] += axLoc[p];\n                let len = 0;\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    patternLoc[len++] = i;\n                    flagLoc[i] = k;\n                }\n                while (len > 0)\n                    patternLoc[--top] = patternLoc[--len];\n            }\n        }\n        dLoc[k] = yLoc[k];\n        yLoc[k] = 0;\n        for (; top < dimension; top++) {\n            const i = patternLoc[top];\n            yi = yLoc[i];\n            yLoc[i] = 0;\n            const p2 = lpLoc[i] + lnzLoc[i];\n            let p;\n            for (p = lpLoc[i]; p < p2; p++) {\n                yLoc[liLoc[p]] -= lxLoc[p] * yi;\n            }\n            lKi = yi / dLoc[i];\n            dLoc[k] -= lKi * yi;\n            liLoc[p] = k;\n            lxLoc[p] = lKi;\n            lnzLoc[i]++;\n        }\n        if (dLoc[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = 0; j < dimension; j++) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[liLoc[p]] -= lxLoc[p] * xLoc[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    const xLoc = x;\n    const dLoc = d;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] /= dLoc[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = dimension - 1; j >= 0; j--) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[j] -= lxLoc[p] * xLoc[liLoc[p]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] = bLoc[perm[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[perm[j]] = bLoc[j];\n    }\n}\n//# sourceMappingURL=matrixCholeskySolver.js.map","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Mikola Lysenko\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * The reverse Cuthill-Mckee method is a fast and effective preconditioner for reducing the bandwidth of sparse linear systems.\n * When solving a positive semidefinite linear system using Cholesky factorization, it greatly reduces fill-in.\n * It is a direct conversion to TS from {@link github.com/mikolalysenko/cuthill-mckee}\n * @param list - lower triangular non zeros from a symmetric sparse matrix.\n * @param dimension - matrix dimension\n * @returns A Float64Array where the value at each index represents the new position of the node\n *          in the bandwidth-reduced ordering.\n */\nexport function matrixCuthillMckee(list, dimension) {\n    const adj = new Array(dimension);\n    const visited = new Array(dimension).fill(false);\n    for (let i = 0; i < dimension; ++i) {\n        adj[i] = [];\n    }\n    for (const l of list) {\n        adj[l[0]].push(l[1]);\n    }\n    const toVisit = new Float64Array(dimension);\n    let eol = 0;\n    let ptr = 0;\n    for (let i = 0; i < dimension; ++i) {\n        if (visited[i]) {\n            continue;\n        }\n        toVisit[eol++] = i;\n        visited[i] = true;\n        while (ptr < eol) {\n            const v = toVisit[ptr++];\n            const nbhd = Float64Array.from(adj[v]);\n            nbhd.sort();\n            for (const u of nbhd) {\n                if (visited[u]) {\n                    continue;\n                }\n                visited[u] = true;\n                toVisit[eol++] = u;\n            }\n        }\n    }\n    const result = new Float64Array(dimension);\n    for (let i = 0; i < dimension; ++i) {\n        result[toVisit[i]] = i;\n    }\n    return result;\n}\n//# sourceMappingURL=matrixCuthillMckee.js.map","/**\n * Checks if the specified submatrix boundaries are within the valid range of the given matrix.\n * @param matrix - the matrix to check the boundaries against.\n * @param boundaries - the boundaries of the submatrix.\n * @throws {RangeError} If any of the specified boundaries are out of the matrix's range.\n */\nexport function matrixCheckRanges(matrix, boundaries) {\n    const { startRow, endRow, startColumn, endColumn } = boundaries;\n    if (startRow > endRow ||\n        startColumn > endColumn ||\n        startRow < 0 ||\n        startRow >= matrix.length ||\n        endRow < 0 ||\n        endRow >= matrix.length ||\n        startColumn < 0 ||\n        startColumn >= matrix[0].length ||\n        endColumn < 0 ||\n        endColumn >= matrix[0].length) {\n        throw new RangeError('submatrix indices are out of range');\n    }\n}\n//# sourceMappingURL=matrixCheckRanges.js.map","/**\n * Get min and max of the absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrixMinMaxAbsoluteZ requires at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            let value = matrix[row][column];\n            if (value < 0)\n                value *= -1;\n            if (value < min)\n                min = value;\n            if (value > max)\n                max = value;\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","/**\n * Returns the max absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            const value = Math.abs(matrix[row][column]);\n            if (value > max)\n                max = value;\n        }\n    }\n    return max;\n}\n//# sourceMappingURL=matrixMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Convert a matrix to a flat Float64Array.\n * @param matrix - input matrix.\n */\nexport function matrixToArray(matrix) {\n    matrixCheck(matrix);\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            flatten[currentRow + column] = matrix[row][column];\n        }\n    }\n    return flatten;\n}\n//# sourceMappingURL=matrixToArray.js.map","/**\n * add the provided weights to a particular given system matrix (lD'D) in the triplet form and y data. This function is not general\n * it assumes that diagonal coefficients are in the even indexes, it is the case of the matrix generated by createSystemMatrix function.\n * It simulates the matrix operation W + lD'D and Wy.\n * @param leftHandSide - the original system matrix to be updated, a lower triangular non-zeros of the system matrix (lambda D'D).\n * @param rightHandSide - the original vector to be updated.\n * @param weights - the weights to apply to the system matrix and vector.\n * @returns an object that contains the new left and right hand-side of the system.\n */\nexport function addWeights(leftHandSide, rightHandSide, weights) {\n    const nbPoints = rightHandSide.length;\n    const l = nbPoints - 1;\n    const newLeftHandSide = new Array(leftHandSide.length);\n    const newRightHandSide = new Float64Array(nbPoints);\n    for (let i = 0; i < l; i++) {\n        const w = weights[i];\n        const diag = i * 2;\n        const next = diag + 1;\n        newLeftHandSide[diag] = leftHandSide[diag].slice();\n        newLeftHandSide[next] = leftHandSide[next].slice();\n        newRightHandSide[i] = rightHandSide[i] * w;\n        newLeftHandSide[diag][2] += w;\n    }\n    newRightHandSide[l] = rightHandSide[l] * weights[l];\n    newLeftHandSide[l * 2] = leftHandSide[l * 2].slice();\n    newLeftHandSide[l * 2][2] += weights[l];\n    return {\n        leftHandSide: newLeftHandSide,\n        rightHandSide: newRightHandSide,\n    };\n}\n//# sourceMappingURL=addWeights.js.map","import { matrixCholeskySolver } from \"../matrix/index.js\";\nimport { addWeights } from \"../utils/addWeights.js\";\nimport { createSystemMatrix } from \"../utils/createSystemMatrix.js\";\nimport { calculateAdaptiveWeights } from \"../utils/index.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\nimport { xMultiply } from \"./xMultiply.js\";\nexport function xWhittakerSmoother(yData, options = {}) {\n    const { algorithm = 'thomas', ...restOptions } = options;\n    if (algorithm === 'thomas') {\n        return whittakerByThomas(yData, restOptions);\n    }\n    return whittakerByCholesky(yData, restOptions);\n}\n/**\n * @deprecated Use xWhittakerSmoother instead.\n * TODO: Remove in next major version.\n */\nexport const xWhitakerSmoother = xWhittakerSmoother;\n/**\n * Computes the baseline points for the given data using an iterative smoothing algorithm.\n * @param yData - the input data array.\n * @param options - the options for baseline computation.\n * @returns the computed baseline points.\n */\nfunction whittakerByCholesky(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, } = options;\n    const size = yData.length;\n    const { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(size);\n    let iteration = 0;\n    let delta = Infinity;\n    let baseline = xEnsureFloat64(yData);\n    const { upperTriangularNonZeros, permutationEncodedArray } = createSystemMatrix(size, lambda);\n    while (iteration < maxIterations && delta > tolerance) {\n        const { leftHandSide, rightHandSide } = addWeights(upperTriangularNonZeros, yData, weights);\n        const cho = matrixCholeskySolver(leftHandSide, size, permutationEncodedArray);\n        if (!cho) {\n            return baseline;\n        }\n        const newBaseline = cho(rightHandSide);\n        //weights is updated inplace\n        calculateAdaptiveWeights(yData, newBaseline, weights, {\n            controlPoints,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(newBaseline, prevBaseline, size);\n        prevBaseline.set(newBaseline);\n        baseline = xEnsureFloat64(newBaseline);\n        iteration++;\n    }\n    return baseline;\n}\n/**\n * Calculates the delta between the current and previous baseline.\n * @param baseline - the current baseline array.\n * @param prevBaseline - the previous baseline array.\n * @param n - the length of the arrays.\n * @returns the calculated delta value.\n */\nfunction calculateDelta(baseline, prevBaseline, n) {\n    let sum = 0;\n    for (let i = 0; i < n; i++) {\n        sum += (baseline[i] - prevBaseline[i]) ** 2;\n    }\n    return Math.sqrt(sum / n);\n}\n/**\n * Retrieves the control points and weights for the given data, the weights are modified multiplication of controlPoints if it exists.\n * @param y - the input data array.\n * @param options - the options for control points and weights.\n * @returns the control points and modified weights.\n */\nfunction getWeightsAndControlPoints(y, options = {}) {\n    const { controlPoints } = options;\n    const { weights = Float64Array.from({ length: y.length }).fill(1) } = options;\n    if (controlPoints && controlPoints.length !== y.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== y.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    return {\n        weights: controlPoints ? xMultiply(weights, controlPoints) : weights,\n        controlPoints,\n    };\n}\nfunction whittakerByThomas(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, } = options;\n    const n = yData.length;\n    const y = xEnsureFloat64(yData);\n    const { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(n);\n    let baseline = xEnsureFloat64(yData);\n    // Precompute base diagonal and constant off-diagonals (−lambda)\n    const baseDiag = new Float64Array(n);\n    if (n === 1) {\n        baseDiag[0] = lambda;\n    }\n    else {\n        baseDiag[0] = lambda;\n        for (let i = 1; i < n - 1; i++)\n            baseDiag[i] = 2 * lambda;\n        baseDiag[n - 1] = lambda;\n    }\n    const lower = new Float64Array(Math.max(0, n - 1));\n    const upper = new Float64Array(Math.max(0, n - 1));\n    for (let i = 0; i < lower.length; i++) {\n        lower[i] = -lambda;\n        upper[i] = -lambda;\n    }\n    const main = new Float64Array(n);\n    const rhs = new Float64Array(n);\n    const solution = new Float64Array(n);\n    const workC = new Float64Array(Math.max(0, n - 1));\n    const workD = new Float64Array(n);\n    let iteration = 0;\n    let delta = Infinity;\n    /**\n     * Iterative Whittaker smoothing implementation using the Thomas algorithm\n     * (tridiagonal solver). The method constructs the system\n     * [W + lambda * D'D] z = W * y where D is the second-difference operator\n     * and W are adaptive weights. At each iteration the tridiagonal system is\n     * solved with the Thomas algorithm and the weights are updated using\n     * `calculateAdaptiveWeights` until convergence.\n     *\n     * Use this algorithm by passing `algorithm: 'thomas'` to `xWhittakerSmoother`.\n     * It is more memory-efficient for large inputs because it avoids forming\n     * the full banded matrix, but both implementations aim to produce the same\n     * baseline result.\n     * @param yData - input signal/spectrum\n     * @param options - smoothing options (supports `lambda`, `maxIterations`,\n     *                  `tolerance`, `factorStd`, `learningRate`, and optional\n     *                  `controlPoints` / `weights` inherited from\n     *                  `CalculateAdaptiveWeightsOptions`).\n     * @returns baseline as a `Float64Array`.\n     */\n    while (iteration < maxIterations && delta > tolerance) {\n        // Build main diagonal = baseDiag + weights, and RHS = weights * y\n        for (let i = 0; i < n; i++) {\n            main[i] = baseDiag[i] + weights[i];\n            rhs[i] = weights[i] * y[i];\n        }\n        // Solve tridiagonal system in-place into `solution`\n        solveTridiagonalFloat64(lower, main, upper, rhs, solution, workC, workD);\n        calculateAdaptiveWeights(y, solution, weights, {\n            controlPoints,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(solution, prevBaseline, n);\n        prevBaseline.set(solution);\n        baseline = xEnsureFloat64(solution);\n        iteration++;\n    }\n    return baseline;\n}\nfunction solveTridiagonalFloat64(lower, diag, upper, rhs, out, cp, dp) {\n    const n = diag.length;\n    const x = out ?? new Float64Array(n);\n    if (n === 0)\n        return x;\n    if (n === 1) {\n        x[0] = rhs[0] / diag[0];\n        return x;\n    }\n    const cprime = cp ?? new Float64Array(n - 1);\n    const dprime = dp ?? new Float64Array(n);\n    let denom = diag[0];\n    cprime[0] = upper[0] / denom;\n    dprime[0] = rhs[0] / denom;\n    for (let i = 1; i < n - 1; i++) {\n        denom = diag[i] - lower[i - 1] * cprime[i - 1];\n        cprime[i] = upper[i] / denom;\n        dprime[i] = (rhs[i] - lower[i - 1] * dprime[i - 1]) / denom;\n    }\n    denom = diag[n - 1] - lower[n - 2] * cprime[n - 2];\n    dprime[n - 1] = (rhs[n - 1] - lower[n - 2] * dprime[n - 2]) / denom;\n    x[n - 1] = dprime[n - 1];\n    for (let i = n - 2; i >= 0; i--) {\n        x[i] = dprime[i] - cprime[i] * x[i + 1];\n    }\n    return x;\n}\n//# sourceMappingURL=xWhittakerSmoother.js.map","import { matrixCuthillMckee } from \"../matrix/matrixCuthillMckee.js\";\n/**\n * Generates a lower triangular non-zeros of the first order smoother matrix (lambda D'D) where D is the derivate of the identity matrix\n * this function in combination with addWeights function can obtain (Q = W + lambda D'D) a penalized least square of Whittaker smoother,\n * it also generates a permutation encoded array.\n * @param dimension - the number of points in the matrix.\n * @param lambda - the factor of smoothness.\n * @returns an object containing the lower triangular non-zero elements of the matrix\n * and the permutation encoded array.\n * @property lowerTriangularNonZeros - The lower triangular non-zero elements of the matrix in triplet form.\n * @property permutationEncodedArray - The permutation encoded array generated using the Cuthill-McKee algorithm.\n */\nexport function createSystemMatrix(dimension, lambda) {\n    const upperTriangularNonZeros = [];\n    const last = dimension - 1;\n    for (let i = 0; i < last; i++) {\n        upperTriangularNonZeros.push([i, i, lambda * 2], [i, i + 1, -1 * lambda]);\n    }\n    upperTriangularNonZeros[0][2] = lambda;\n    upperTriangularNonZeros.push([last, last, lambda]);\n    const permutationEncodedArray = matrixCuthillMckee(upperTriangularNonZeros, dimension);\n    return { upperTriangularNonZeros, permutationEncodedArray };\n}\n//# sourceMappingURL=createSystemMatrix.js.map","/**\n * Phase correction filter.\n * @param data - complex spectrum\n * @param phi0 - angle in radians for zero order phase correction.\n * @param phi1 - angle in radians for first order phase correction.\n * @param options - options.\n * @returns a new object {re:[], im:[]} unless inPlace=true.\n */\nexport function reimPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false, inPlace = false } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const length = data.re.length;\n    // Decide target arrays\n    const re = data.re;\n    const im = data.im;\n    const outRe = inPlace ? re : new Float64Array(length);\n    const outIm = inPlace ? im : new Float64Array(length);\n    let firstAngle = phi0;\n    let delta = phi1 / length;\n    if (reverse) {\n        delta *= -1;\n        firstAngle += phi1;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    let cosTheta = Math.cos(firstAngle);\n    let sinTheta = Math.sin(firstAngle);\n    for (let i = 0; i < length; i++) {\n        const r = re[i];\n        const ii = im[i];\n        outRe[i] = r * cosTheta - ii * sinTheta;\n        outIm[i] = ii * cosTheta + r * sinTheta;\n        // Recursive angle update (stable incremental rotation)\n        const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n        const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n        cosTheta = newCosTheta;\n        sinTheta = newSinTheta;\n    }\n    return { re: outRe, im: outIm };\n}\n//# sourceMappingURL=reimPhaseCorrection.js.map","import { xNoiseSanPlot } from \"../x/index.js\";\nimport { reimAbsolute } from \"./reimAbsolute.js\";\nimport { reimPhaseCorrection } from \"./reimPhaseCorrection.js\";\n/**\n * Implementation of the algorithm for automatic phase correction: A robust, general automatic phase\n * correction algorithm for high-resolution NMR data. 10.1002/mrc.4586\n * @param data - complex spectrum\n * @param options - options\n * @returns phased spectrum together with the zero- and first-order correction angles (ph0, ph1) in degrees\n */\nexport function reimAutoPhaseCorrection(data, options = {}) {\n    const { magnitudeMode = true, minRegSize = 30, factorNoise = 3, maxDistanceToJoin = 256, reverse = false, inPlace = false, } = options;\n    const finalPeaks = detectBaselineRegions(data, {\n        maxDistanceToJoin,\n        magnitudeMode,\n        factorNoise,\n    });\n    const { re, im } = data;\n    const length = re.length;\n    const indexMask = reverse ? (i) => length - 1 - i : (i) => i;\n    let x0 = 0;\n    let counter = -1;\n    const res = [];\n    while (counter < length) {\n        const reTmp = [];\n        const imTmp = [];\n        while (!finalPeaks[indexMask(++counter)] && counter < length) {\n            // Add some extra points(0.1 ppm) at rigth and left sides of the region.\n            x0 = counter;\n        }\n        for (; finalPeaks[indexMask(counter)] && counter < length; counter += 2) {\n            reTmp.push(re[indexMask(counter)]);\n            imTmp.push(im[indexMask(counter)]);\n        }\n        if (reTmp.length > minRegSize) {\n            res.push(autoPhaseRegion(reTmp, imTmp, x0));\n        }\n    }\n    const { ph1, ph0 } = determiningGlobalValues(res.map((r) => r.x0 / length), res.map((r) => r.ph0), res.map((r) => r.area / 1e11));\n    const phased = reimPhaseCorrection({ re, im }, toRadians(ph0), toRadians(ph1), { reverse, inPlace });\n    return { data: phased, ph0, ph1 };\n}\nfunction determiningGlobalValues(x, ph0Values, weights) {\n    if (x.length === 0) {\n        return { ph0: 0, ph1: 0 };\n    }\n    else if (x.length === 1) {\n        return { ph0: ph0Values[0], ph1: 0 };\n    }\n    const [ph1, ph0] = weightedLinearRegression(x, ph0Values, weights);\n    let indexMax = -1;\n    let maxDiff = Number.MIN_SAFE_INTEGER;\n    for (let i = 0; i < x.length; i++) {\n        const predictedPh0 = x[i] * ph1 + ph0;\n        const diff = Math.abs(ph0Values[i] - predictedPh0);\n        if (diff > 34 && maxDiff < diff) {\n            indexMax = i;\n            maxDiff = diff;\n        }\n    }\n    if (indexMax > -1) {\n        x.splice(indexMax, 1);\n        ph0Values.splice(indexMax, 1);\n        weights.splice(indexMax, 1);\n        return determiningGlobalValues(x, ph0Values, weights);\n    }\n    return { ph0, ph1 };\n}\nfunction detectBaselineRegions(data, options) {\n    const magnitudeData = options.magnitudeMode ? reimAbsolute(data) : data.re;\n    const ds = holoborodko(magnitudeData);\n    const peaksDs = robustBaseLineRegionsDetection(ds, options);\n    const peaksSp = robustBaseLineRegionsDetection(magnitudeData, options);\n    return peaksSp.map((sp, i) => sp && peaksDs[i]);\n}\n/**\n * Finds the best phase angle for a region by minimizing the negative area.\n * @param re - array of number.\n * @param im - array of number.\n * @param x0 - number.\n * @returns region.\n */\nfunction autoPhaseRegion(re, im, x0) {\n    let start = -180;\n    let stop = 180;\n    const nSteps = 6;\n    let maxSteps = 10;\n    let bestAng = 0;\n    let minArea = Number.MAX_SAFE_INTEGER;\n    while (maxSteps > 0) {\n        const dAng = (stop - start) / (nSteps + 1);\n        for (let i = start; i <= stop; i += dAng) {\n            const tmpPhased = reimPhaseCorrection({ re, im }, toRadians(i), 0);\n            const negArea = getNegArea(tmpPhased.re);\n            if (negArea < minArea) {\n                [minArea, bestAng] = [negArea, i];\n            }\n        }\n        start = bestAng - dAng;\n        stop = bestAng + dAng;\n        maxSteps--;\n    }\n    // Calculate the area for the best angle\n    const phased = reimPhaseCorrection({ re, im }, toRadians(bestAng), 0);\n    let area = 0;\n    let sumX = 0;\n    for (let j = 0; j < re.length; j++) {\n        area += phased.re[j];\n        sumX += phased.re[j] * (j + x0);\n    }\n    return { ph0: bestAng, area, x0: sumX / area };\n}\n/**\n * Applies the Holoborodko smoothing derivative filter.\n * @param s - array of float.\n * @returns array of float.\n */\nfunction holoborodko(s) {\n    const dk = new Float64Array(s.length);\n    for (let i = 5; i < s.length - 5; i++) {\n        dk[i] =\n            (42 * (s[i + 1] - s[i - 1]) +\n                48 * (s[i + 2] - s[i - 2]) +\n                27 * (s[i + 3] + s[i - 3]) +\n                8 * (s[i + 4] - s[i - 4]) +\n                s[i + 5] -\n                s[i - 5]) /\n                512;\n    }\n    //Fill the borders\n    for (let i = 0; i < 5; i++) {\n        dk[i] = dk[5];\n        dk[s.length - i - 1] = dk[s.length - 6];\n    }\n    return dk;\n}\n/**\n * Detects baseline regions using robust iterative noise estimation.\n * @param s - input signal array.\n * @param options - detection options.\n * @param options.magnitudeMode - whether to use magnitude mode.\n * @param options.maxDistanceToJoin - max distance to join nearby regions.\n * @param options.factorNoise - noise factor for cutoff.\n */\nfunction robustBaseLineRegionsDetection(s, options) {\n    const { maxDistanceToJoin, magnitudeMode, factorNoise } = options;\n    const mask = new Uint8Array(s.length);\n    for (let i = 0; i < s.length; i++) {\n        mask[i] = 0;\n    }\n    let change = true;\n    while (change) {\n        const noiseLevel = xNoiseSanPlot(s, { magnitudeMode });\n        const cutOff = factorNoise * noiseLevel.positive;\n        change = false;\n        for (let i = 0; i < s.length; i++) {\n            if (Math.abs(s[i]) > cutOff && !mask[i]) {\n                change = true;\n                mask[i] = 1;\n            }\n        }\n    }\n    // Clean up mask by merging peaks blocks, separated by just a few points(4??).\n    let count = 0;\n    let prev = 0;\n    for (let i = 0; i < s.length; i++) {\n        if (!mask[i]) {\n            count++;\n        }\n        else {\n            if (count < maxDistanceToJoin) {\n                for (let j = 0; j <= count; j++) {\n                    mask[prev + j] = 1;\n                }\n            }\n            while (mask[++i] && i < s.length)\n                ;\n            prev = i;\n            count = 0;\n        }\n    }\n    return mask;\n}\n/**\n * Computes a weighted linear regression and returns [slope, intercept].\n * @param x - x values.\n * @param y - y values.\n * @param w - weights.\n */\nfunction weightedLinearRegression(x, y, w) {\n    let sxtw = 0;\n    let swx = 0;\n    let sw = 0;\n    let sxtwy = 0;\n    let swy = 0;\n    for (let i = 0; i < x.length; i++) {\n        sxtw += x[i] * x[i] * w[i];\n        swx += x[i] * w[i];\n        sw += w[i];\n        sxtwy += x[i] * w[i] * y[i];\n        swy += w[i] * y[i];\n    }\n    /* Just to know what is the matrix system that we solve\n     let Mx=[[sxtw, swx], [swx, sw]];\n     let My=[[sxtwy], [swy]];\n    */\n    //Mx inverse\n    const detMx = sxtw * sw - swx * swx;\n    const inMx = [\n        [sw / detMx, -swx / detMx],\n        [-swx / detMx, sxtw / detMx],\n    ];\n    return [\n        inMx[0][0] * sxtwy + inMx[0][1] * swy,\n        inMx[1][0] * sxtwy + inMx[1][1] * swy,\n    ];\n}\nfunction toRadians(degree) {\n    return (degree * Math.PI) / 180;\n}\nfunction getNegArea(data) {\n    let area = 0;\n    for (const element of data) {\n        if (element < 0)\n            area -= element;\n    }\n    return area;\n}\n//# sourceMappingURL=reimAutoPhaseCorrection.js.map","import { xRotate } from \"../x/index.js\";\n/**\n * Circular shift that moves the zero-frequency component to the center of the array (FFT shift).\n * For the inverse, the shift is reversed to restore the original layout.\n * @param data - input array\n * @param inverse - if true, shifts by ceil(n/2) instead of floor(n/2) to undo a previous zeroShift\n * @returns shifted array\n */\nexport function zeroShift(data, inverse) {\n    const middle = inverse\n        ? Math.ceil(data.length / 2)\n        : Math.floor(data.length / 2);\n    return xRotate(data, middle);\n}\n//# sourceMappingURL=zeroShift.js.map","import { createDoubleArray } from \"../utils/createArray.js\";\n/**\n * This function make a zero filling to re and im part.\n * @param data - object of kind {re:[], im:[]}\n * @param totalLength - final number of points\n * @returns new DataReIm object with zero-filled,\n * truncated arrays if totalLength is smaller current length or\n * the same input if totalLength is equal that current length\n */\nexport function reimZeroFilling(data, totalLength) {\n    if (!Number.isInteger(totalLength) || totalLength < 0) {\n        throw new RangeError('totalLength must be a non-negative integer');\n    }\n    const { re, im } = data;\n    const length = re.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newRE = createDoubleArray(re.constructor, totalLength);\n    const newIM = createDoubleArray(im.constructor, totalLength);\n    for (let i = 0; i < re.length; i++) {\n        newRE[i] = re[i];\n        newIM[i] = im[i];\n    }\n    return {\n        re: newRE,\n        im: newIM,\n    };\n}\n//# sourceMappingURL=reimZeroFilling.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data - data to check.\n * @param options - options.\n * @param options.minLength - minimum required length.\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max y value in a range and return a {x,y} point\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns point with the highest y value in the range.\n */\nexport function xyMaxYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1) {\n        return { x: x[0], y: y[0], index: 0 };\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = { x: x[fromIndex], y: y[fromIndex], index: fromIndex };\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (y[i] > current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMaxYPoint.js.map","import { xCumulative, xMaxValue } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { xyMaxYPoint } from \"./xyMaxYPoint.js\";\nconst STEPS = [0.25, 0.5, 0.75];\n/**\n * Cumulative Distribution Statistics\n * @param data - array of points {x,y}\n * @returns x0, x25, x50, x75, x100, xMode, xMean (x for maxY)\n */\nexport function xyCumulativeDistributionStatistics(data) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const cumulativeSum = xCumulative(y);\n    const maxY = xMaxValue(cumulativeSum);\n    for (let i = 0; i < cumulativeSum.length; i++) {\n        cumulativeSum[i] /= maxY;\n    }\n    const result = {\n        x0: x[0],\n        x25: 0,\n        x50: 0,\n        x75: 0,\n        x100: x.at(-1),\n        xMode: 0,\n        xMean: 0,\n    };\n    // need to find the x values closest to STEPS/100\n    let currentStep = 0;\n    breakPoint: for (let i = 1; i < cumulativeSum.length; i++) {\n        while (STEPS[currentStep] < cumulativeSum[i]) {\n            // Key is computed dynamically with a multiplication. This cannot be type-safe, hence the \"as\" assertion.\n            const key = `x${STEPS[currentStep] * 100}`;\n            result[key] =\n                x[i - 1] +\n                    (x[i] - x[i - 1]) *\n                        ((STEPS[currentStep] - cumulativeSum[i - 1]) /\n                            (cumulativeSum[i] - cumulativeSum[i - 1]));\n            currentStep++;\n            if (currentStep === STEPS.length)\n                break breakPoint;\n        }\n    }\n    result.xMode = xyMaxYPoint(data).x;\n    let sumXY = 0;\n    let sumY = 0;\n    for (let i = 0; i < x.length; i++) {\n        sumXY += x[i] * y[i];\n        sumY += y[i];\n    }\n    result.xMean = sumXY / sumY;\n    return result;\n}\n//# sourceMappingURL=xyCumulativeDistributionStatistics.js.map","import { xGetFromToIndex } from \"../../x/index.js\";\n/**\n * The data seen as a piecewise linear density, with the integration precomputed on every point.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns the cumulated integration over the selected window.\n */\nexport function getCumulativeDensity(data, options = {}) {\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    if (toIndex - fromIndex < 1) {\n        throw new Error('the selected range must contain at least 2 points');\n    }\n    const { beginX, endX } = getBoundaries(x, options, fromIndex, toIndex);\n    const length = toIndex - fromIndex + 1;\n    const integral = new Float64Array(length);\n    for (let i = 1; i < length; i++) {\n        const previousIndex = fromIndex + i - 1;\n        const currentIndex = fromIndex + i;\n        integral[i] =\n            integral[i - 1] +\n                ((y[previousIndex] + y[currentIndex]) / 2) *\n                    (x[currentIndex] - x[previousIndex]);\n    }\n    return { x, y, fromIndex, toIndex, integral, beginX, endX };\n}\n/**\n * Integration from the beginning of the range up to a specific x value, interpolating inside\n * the interval that contains it.\n * @param cumulative - cumulated integration of the density.\n * @param target - x value.\n * @returns the integration.\n */\nexport function evaluateCumulative(cumulative, target) {\n    const { x, y, fromIndex, toIndex, integral } = cumulative;\n    if (target <= x[fromIndex])\n        return 0;\n    const lastIndex = toIndex - fromIndex;\n    if (target >= x[toIndex])\n        return integral[lastIndex];\n    let low = 0;\n    let high = lastIndex;\n    while (high - low > 1) {\n        const middle = low + ((high - low) >> 1);\n        if (x[fromIndex + middle] <= target) {\n            low = middle;\n        }\n        else {\n            high = middle;\n        }\n    }\n    const startX = x[fromIndex + low];\n    const startY = y[fromIndex + low];\n    const width = target - startX;\n    const targetY = startY +\n        ((y[fromIndex + low + 1] - startY) * width) /\n            (x[fromIndex + low + 1] - startX);\n    return integral[low] + ((startY + targetY) / 2) * width;\n}\n/**\n * Boundaries of the window, that may be wider than the data itself.\n * @param x - array of x values.\n * @param options - options.\n * @param fromIndex - first index of the selected range.\n * @param toIndex - last index of the selected range.\n * @returns the x values delimiting the window.\n */\nfunction getBoundaries(x, options, fromIndex, toIndex) {\n    const { from, to } = options;\n    const firstX = x[fromIndex];\n    const lastX = x[toIndex];\n    let beginX = options.fromIndex === undefined && from !== undefined ? from : firstX;\n    let endX = options.toIndex === undefined && to !== undefined ? to : lastX;\n    if (beginX > endX)\n        [beginX, endX] = [endX, beginX];\n    return { beginX: Math.min(beginX, firstX), endX: Math.max(endX, lastX) };\n}\n//# sourceMappingURL=cumulativeDensity.js.map","import { evaluateCumulative, getCumulativeDensity, } from \"./utils/cumulativeDensity.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Split a spectrum in parts that all have the same integration and return the x values of the splits.\n * The first entry splits the spectrum in two halves of equal integration, the two next ones split each half\n * again, etc. This is the same as looking for the 1/2, then 1/4 and 3/4, then 1/8, 3/8, 5/8 and 7/8 fractions\n * of the total integration, which is how it is computed.\n * This describes a spectrum by a small vector and should provide an efficient way to store and search\n * similar spectra, comparing the vectors with `xEqualIntegrationVectorSimilarity`.\n * A split never lands between the peaks: it follows the integration, so it points at the signal itself. The\n * noise of a long baseline does not drag it either, because a point is never weighted by its own x value.\n * The data is considered as a piecewise linear density, so the result varies continuously with the y values\n * and hardly depends on the sampling density.\n * The window may extend beyond the data, the missing points being considered to have a y value of zero.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns array of x values splitting the spectrum in parts of equal integration.\n */\nexport function xyEqualIntegrationVector(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { depth = 5 } = options;\n    const cumulative = getCumulativeDensity(data, options);\n    const { beginX, endX } = cumulative;\n    const total = evaluateCumulative(cumulative, endX);\n    const results = new Float64Array((1 << depth) - 1);\n    let index = 0;\n    for (let level = 0; level < depth; level++) {\n        const nbSlots = 1 << level;\n        for (let slot = 0; slot < nbSlots; slot++) {\n            const fraction = (2 * slot + 1) / (2 * nbSlots);\n            results[index++] = findFraction(cumulative, beginX, endX, total * fraction);\n        }\n    }\n    return results;\n}\n/**\n * Dichotomic search of the x value for which the integration reaches a target.\n * @param cumulative - cumulated integration of the density.\n * @param beginX - beginning of the window.\n * @param endX - end of the window.\n * @param target - integration to reach.\n * @returns the x value.\n */\nfunction findFraction(cumulative, beginX, endX, target) {\n    let low = beginX;\n    let high = endX;\n    // the interval is halved 60 times, far below the precision of a float64\n    for (let i = 0; i < 60; i++) {\n        const middle = (low + high) / 2;\n        if (evaluateCumulative(cumulative, middle) < target) {\n            low = middle;\n        }\n        else {\n            high = middle;\n        }\n    }\n    return (low + high) / 2;\n}\n//# sourceMappingURL=xyEqualIntegrationVector.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones.map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone });\n    zones.sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from \"./zonesNormalize.js\";\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0 - first x coordinate.\n * @param x1 - second x coordinate.\n * @param slope - slope of the line.\n * @param intercept - y-intercept of the line.\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x - x coordinates.\n * @param y - y coordinates.\n * @param from - start of the output x range.\n * @param to - end of the output x range.\n * @param numberOfPoints - number of output points.\n * @returns array of y values equally spaced with the variant \"smooth\".\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { zonesNormalize, zonesWithPoints } from \"../zones/index.js\";\nimport equallySpacedSlot from \"./utils/equallySpacedSlot.js\";\nimport equallySpacedSmooth from \"./utils/equallySpacedSmooth.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Resample a spectrum to equally spaced x points.\n * When `exclusions` are provided they take precedence and `zones` is ignored.\n * @param data - object containing x and y arrays\n * @param options - options\n * @returns resampled spectrum with equally spaced x values\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x - x coordinates.\n * @param y - y coordinates.\n * @param from - start of the output x range.\n * @param to - end of the output x range.\n * @param numberOfPoints - number of output points.\n * @returns array of y values equally spaced with the variant \"slot\".\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Join x / y values when difference in X is closer than delta.\n * When joining, y values are summed and x values are weighted average\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with joined x and summed y values.\n */\nexport function xyJoinX(data, options = {}) {\n    xyCheck(data);\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    if (x.length < 2) {\n        return { x, y };\n    }\n    let position = 0;\n    for (let i = 1; i < x.length; i++) {\n        const difference = x[i] - x[i - 1];\n        const currentDelta = deltaIsFunction ? delta((x[i] + x[i - 1]) / 2) : delta;\n        if (difference <= currentDelta) {\n            // we join\n            if (y[position] !== 0 || y[i] !== 0) {\n                x[position] =\n                    (x[position] * y[position] + x[i] * y[i]) / (y[position] + y[i]);\n                y[position] += y[i];\n            }\n        }\n        else {\n            position++;\n            x[position] = x[i];\n            y[position] = y[i];\n        }\n    }\n    x.length = position + 1;\n    y.length = position + 1;\n    return { x, y };\n}\n//# sourceMappingURL=xyJoinX.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. If you want a similar looking spectrum you should still however\n * generate at least 4x the nbPoints that is being displayed.\n *\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * You should rather use ml-xy-equally-spaced to make further processing\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns object with x and y arrays.\n */\nexport function xyReduce(data, options = {}) {\n    xyCheck(data);\n    // todo we should check that the single point is really in the range and the zones\n    if (data.x.length < 2) {\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), nbPoints = 4001, optimize = false, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    // @ts-expect-error -- x.at(-1) returns number | undefined but array is guaranteed non-empty here\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= nbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    // need to xyReduce number of points\n    const ratio = nbPoints / totalPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < internalZones.length - 1; i++) {\n        const zone = internalZones[i];\n        zone.nbPoints = Math.round(zone.nbPoints * ratio);\n        currentTotal += zone.nbPoints;\n    }\n    internalZones.at(-1).nbPoints = nbPoints - currentTotal;\n    const newX = [];\n    const newY = [];\n    for (const zone of internalZones) {\n        if (!zone.nbPoints)\n            continue;\n        appendFromTo(zone.fromIndex, zone.toIndex, zone.nbPoints);\n    }\n    return { x: newX, y: newY };\n    /**\n     * Appends reduced x/y values for a zone to the output arrays.\n     * @param fromIndex - start index in the input arrays.\n     * @param  toIndex - end index in the input arrays.\n     * @param zoneNbPoints - target number of points to keep in this zone.\n     */\n    function appendFromTo(fromIndex, toIndex, zoneNbPoints) {\n        if (zoneNbPoints === 1) {\n            newX.push(x[Math.round((toIndex - fromIndex) / 2)]);\n            newY.push(y[Math.round((toIndex - fromIndex) / 2)]);\n            return;\n        }\n        if (zoneNbPoints === 2) {\n            newX.push(x[fromIndex], x[toIndex]);\n            newY.push(y[fromIndex], y[toIndex]);\n            return;\n        }\n        newX.push(x[fromIndex]);\n        newY.push(y[fromIndex]);\n        if (zoneNbPoints % 2 === 0) {\n            zoneNbPoints = zoneNbPoints / 2 + 1;\n        }\n        else {\n            zoneNbPoints = (zoneNbPoints - 1) / 2 + 1;\n        }\n        // we will need to make some kind of min / max because there are too many points\n        // we will always keep the first point and the last point\n        const slot = (x[toIndex] - x[fromIndex]) / (zoneNbPoints - 1);\n        let currentX = x[fromIndex] + slot;\n        let first = true;\n        let minY = Number.POSITIVE_INFINITY;\n        let xyMaxY = Number.NEGATIVE_INFINITY;\n        for (let i = fromIndex + 1; i <= toIndex; i++) {\n            if (first) {\n                minY = y[i];\n                xyMaxY = y[i];\n                first = false;\n            }\n            else {\n                if (y[i] < minY)\n                    minY = y[i];\n                if (y[i] > xyMaxY)\n                    xyMaxY = y[i];\n            }\n            if (x[i] >= currentX || i === toIndex) {\n                if (optimize) {\n                    if (minY > newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                    }\n                    else if (xyMaxY < newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                        xyMaxY = minY;\n                    }\n                    else {\n                        newX.push(currentX - slot / 2);\n                        newY.push(minY);\n                    }\n                }\n                else {\n                    newX.push(currentX - slot / 2);\n                    newY.push(minY);\n                }\n                newX.push(currentX);\n                newY.push(xyMaxY);\n                currentX += slot;\n                first = true;\n            }\n        }\n    }\n}\nexport function notEnoughPoints(x, y, internalZones, totalPoints) {\n    const newX = new Float64Array(totalPoints);\n    const newY = new Float64Array(totalPoints);\n    let index = 0;\n    for (const zone of internalZones) {\n        for (let i = zone.fromIndex; i < zone.toIndex + 1; i++) {\n            newX[index] = x[i];\n            newY[index] = y[i];\n            index++;\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\nexport function getInternalZones(zones, x) {\n    // for each zone we should know the first index, the last index and the number of points\n    const internalZones = [];\n    let totalPoints = 0;\n    for (const zone of zones) {\n        let fromIndex = xFindClosestIndex(x, zone.from);\n        let toIndex = xFindClosestIndex(x, zone.to);\n        if (fromIndex > 0 && x[fromIndex] > zone.from) {\n            fromIndex--;\n        }\n        if (toIndex < x.length - 1 && x[toIndex] < zone.to) {\n            toIndex++;\n        }\n        const nbPoints = toIndex - fromIndex + 1;\n        internalZones.push({\n            from: zone.from,\n            to: zone.to,\n            fromIndex,\n            toIndex,\n            nbPoints,\n        });\n        totalPoints += nbPoints;\n    }\n    return { internalZones, totalPoints };\n}\n//# sourceMappingURL=xyReduce.js.map","import { xIsMonotonic } from \"../x/index.js\";\n/**\n * This function performs a quick sort of the x array while transforming the y array to preserve the coordinates.\n * @param data - object that contains property x (Array) and y (Array).\n */\nexport function xySortX(data) {\n    const { x, y } = data;\n    if (xIsMonotonic(x) && x.length > 1) {\n        const floatX = Float64Array.from(x);\n        const floatY = Float64Array.from(y);\n        if (floatX.at(-1) < floatX[0]) {\n            floatX.reverse();\n            floatY.reverse();\n        }\n        return {\n            x: floatX,\n            y: floatY,\n        };\n    }\n    const xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    }));\n    xyObject.sort((a, b) => a.x - b.x);\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\n    for (let i = 0; i < x.length; i++) {\n        response.x[i] = xyObject[i].x;\n        response.y[i] = xyObject[i].y;\n    }\n    return response;\n}\n//# sourceMappingURL=xySortX.js.map","import { xyCheck } from \"./xyCheck.js\";\nimport { xySortX } from \"./xySortX.js\";\n/**\n * Ensure x values are unique\n * @param data - object that contains property x (Array) and y (Array).\n * @param options - object containing a property algorithm (can be 'sum' or 'average', the latter being the default value), and a property isSorted (boolean indicating if the x-array is sorted).\n */\nexport function xyUniqueX(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length === 0) {\n        return { x: [], y: [] };\n    }\n    const { algorithm = 'average', isSorted = true } = options;\n    if (!isSorted) {\n        data = xySortX(data);\n    }\n    switch (algorithm) {\n        case 'average':\n            return average(data);\n        case 'sum':\n            return sum(data);\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\n/**\n * Averages duplicate x values by averaging their y values.\n * @param data - input.\n * @returns result.\n */\nfunction average(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    let divider = 1;\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY / divider);\n            cumulativeY = 0;\n            divider = 0;\n        }\n        cumulativeY += data.y[i];\n        divider++;\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY / divider);\n    return { x, y };\n}\n/**\n * Merges duplicate x values by summing their y values.\n * @param data - input.\n * @returns result.\n */\nfunction sum(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY);\n            cumulativeY = 0;\n        }\n        cumulativeY += data.y[i];\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY);\n    return { x, y };\n}\n//# sourceMappingURL=xyUniqueX.js.map","/**\n * Computes common x slots from multiple DataXY spectra by grouping nearby x values.\n * @param data - data.\n * @param options - options.\n */\nexport function getSlots(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const possibleXs = Float64Array.from(data.flatMap((spectrum) => spectrum.x));\n    possibleXs.sort();\n    if (possibleXs.length === 0) {\n        throw new Error('can not process empty arrays');\n    }\n    let currentSlot = {\n        from: possibleXs[0],\n        to: possibleXs[0],\n        average: possibleXs[0],\n        sum: possibleXs[0],\n        number: 1,\n    };\n    const slots = [currentSlot];\n    for (let i = 1; i < possibleXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(possibleXs[i]) : delta;\n        if (possibleXs[i] - currentSlot.to <= currentDelta) {\n            currentSlot.to = possibleXs[i];\n            currentSlot.number++;\n            currentSlot.sum += possibleXs[i];\n            currentSlot.average = currentSlot.sum / currentSlot.number;\n        }\n        else {\n            currentSlot = {\n                from: possibleXs[i],\n                to: possibleXs[i],\n                average: possibleXs[i],\n                sum: possibleXs[i],\n                number: 1,\n            };\n            slots.push(currentSlot);\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlots.js.map","/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values for which the deltaX is small or equal to delta.\n * X values are weighted average\n * @param data - data\n * @param options - options.\n */\nexport function xyArrayWeightedMerge(data, options = {}) {\n    let { delta = 1 } = options;\n    if (typeof delta === 'number') {\n        const deltaNumber = delta;\n        delta = () => deltaNumber;\n    }\n    data = data.filter((spectrum) => spectrum.x.length > 0);\n    if (data.length === 0)\n        return { x: [], y: [] };\n    const x = [];\n    const y = [];\n    const positions = new Array(data.length).fill(0);\n    const point = { x: 0, y: 0 };\n    nextValue(data, positions, point);\n    const slot = {\n        maxX: point.x + delta(point.x),\n        sumY: point.y,\n        sumXY: point.y * point.x,\n    };\n    while (data.length > 0) {\n        nextValue(data, positions, point);\n        const sameSlot = point.x <= slot.maxX;\n        if (!sameSlot) {\n            if (slot.sumY > 0) {\n                x.push(slot.sumXY / slot.sumY);\n                y.push(slot.sumY);\n            }\n            slot.sumY = 0;\n            slot.sumXY = 0;\n        }\n        slot.sumY += point.y;\n        slot.sumXY += point.x * point.y;\n        slot.maxX = point.x + delta(point.x);\n        if (data.length === 0 && slot.sumY > 0) {\n            x.push(slot.sumXY / slot.sumY);\n            y.push(slot.sumY);\n        }\n    }\n    return { x, y };\n}\n/**\n * Finds the next minimum x value across all spectra and advances the corresponding position pointer.\n * @param data - data.\n * @param positions - positions array.\n * @param point - point.\n */\nfunction nextValue(data, positions, point) {\n    let minIndex = 0;\n    let minX = data[0].x[positions[0]];\n    for (let i = 1; i < data.length; i++) {\n        const currentX = data[i].x[positions[i]];\n        if (currentX < minX) {\n            minX = currentX;\n            minIndex = i;\n        }\n    }\n    point.x = minX;\n    point.y = data[minIndex].y[positions[minIndex]];\n    positions[minIndex]++;\n    if (positions[minIndex] === data[minIndex].x.length) {\n        positions.splice(minIndex, 1);\n        data.splice(minIndex, 1);\n    }\n}\n//# sourceMappingURL=xyArrayWeightedMerge.js.map","/**\n * Throws an error if it's not an array of x,y objects.\n * Only checks the first element.\n * @param points - list of points.\n * @param options - additional checks.\n */\nexport function xyObjectCheck(points, options = {}) {\n    const { minLength = 0 } = options;\n    if (!Array.isArray(points)) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (points.length > 0 &&\n        (typeof points[0].x !== 'number' || typeof points[0].y !== 'number')) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (minLength && points.length < minLength) {\n        throw new Error(`points must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyObjectCheck.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max x value and return a {x,y,index} point\n * @param points - object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyObjectMaxXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x > current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxXPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min x value and return a {x,y,index} point\n * @param points - object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyObjectMinXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x < current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinXPoint.js.map","/**\n * Create an array with numbers starting from \"from\" with step \"step\" of length \"length\".\n * @param options - options.\n * @returns array of distributed numbers with step \"step\" from \"from\".\n */\nexport function createStepArray(options = {}) {\n    const { from = 0, step = 1, length = 1000 } = options;\n    const array = new Float64Array(length);\n    let index = 0;\n    while (index < length) {\n        array[index] = from + step * index;\n        index++;\n    }\n    return array;\n}\n//# sourceMappingURL=createStepArray.js.map","/**\n * Generate all combinations of choosing k items from n items.\n * @param n - total number of items.\n * @param k - number of items to choose.\n * @returns array of combinations, where each combination is an array of indices.\n */\nexport function getCombinations(n, k) {\n    if (k === 0)\n        return [[]];\n    if (k > n)\n        return [];\n    const results = [];\n    const current = [];\n    function backtrack(start) {\n        if (current.length === k) {\n            results.push([...current]);\n            return;\n        }\n        for (let i = start; i < n; i++) {\n            current.push(i);\n            backtrack(i + 1);\n            current.pop();\n        }\n    }\n    backtrack(0);\n    return results;\n}\n//# sourceMappingURL=getCombinations.js.map","/**\n * Generate all combinations of choosing k items from n items as an iterator.\n * Useful for large combination sets to avoid storing all combinations in memory.\n * @param n - total number of items.\n * @param k - number of items to choose.\n * @yields Each combination as an array of indices.\n */\nexport function* getCombinationsIterator(n, k) {\n    if (k === 0) {\n        yield [];\n        return;\n    }\n    if (k > n)\n        return;\n    const current = [];\n    function* backtrack(start) {\n        if (current.length === k) {\n            yield [...current];\n            return;\n        }\n        for (let i = start; i < n; i++) {\n            current.push(i);\n            yield* backtrack(i + 1);\n            current.pop();\n        }\n    }\n    yield* backtrack(0);\n}\n//# sourceMappingURL=getCombinationsIterator.js.map","export function getRescaler(options = {}) {\n    const { targetMin = 0, targetMax = 1, clamp = true, algorithmOptions = {}, algorithm = 'linear', } = options;\n    let { originalMin = 0, originalMax = 1 } = options;\n    const convert = getDataConverter(algorithm, algorithmOptions);\n    originalMin = convert(originalMin);\n    originalMax = convert(originalMax);\n    const originalRange = originalMax - originalMin;\n    const targetRange = targetMax - targetMin;\n    return function rescaler(value) {\n        value = convert(value);\n        value = checkRange(value, originalMin, originalMax, clamp);\n        const valueScaled = (value - originalMin) / originalRange;\n        return targetMin + valueScaled * targetRange;\n    };\n}\nfunction getDataConverter(kind = 'linear', options = {}) {\n    return (value) => {\n        switch (kind) {\n            case 'linear':\n                return value;\n            case 'logarithmic':\n                return Math.log10(value);\n            case 'power':\n                return value ** (options.power || 2);\n            default:\n                throw new Error(`Unknown kind ${String(kind)}`);\n        }\n    };\n}\nfunction checkRange(value, min, max, clamp = true) {\n    if (value < min) {\n        if (clamp)\n            return min;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    if (value > max) {\n        if (clamp)\n            return max;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    return value;\n}\n//# sourceMappingURL=getRescaler.js.map","import { xMedian } from \"../x/index.js\";\n/**\n * Returns the median of the absolute matrix.\n * @param matrix - input matrix.\n */\nexport function matrixAbsoluteMedian(matrix) {\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            const value = matrix[row][column];\n            flatten[currentRow + column] = Math.abs(value);\n        }\n    }\n    return xMedian(flatten);\n}\n//# sourceMappingURL=matrixAbsoluteMedian.js.map","import { xMaxValue } from \"../x/index.js\";\nimport { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically encodes the strings in the matrix with an encoding dictionary.\n * @param matrixInitial - original matrix before encoding.\n * @param dictionary - dictionary against which to do the encoding.\n * @returns encoded matrix.\n */\nexport function matrixApplyNumericalEncoding(matrixInitial, dictionary) {\n    const matrix = matrixClone(matrixInitial);\n    const arrayOfValues = [];\n    for (const key in dictionary) {\n        arrayOfValues.push(dictionary[key]);\n    }\n    let k = xMaxValue(arrayOfValues);\n    for (const row of matrix) {\n        for (let j = 0; j < row.length; j++) {\n            const value = row[j];\n            if (typeof value === 'string') {\n                if (value in dictionary) {\n                    row[j] = dictionary[value];\n                }\n                else {\n                    k++;\n                    dictionary[value] = k;\n                    row[j] = k;\n                }\n            }\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixApplyNumericalEncoding.js.map","import { xCorrelation } from \"../x/index.js\";\n/**\n * Correlates every column of a matrix against a single reference column.\n * @param matrix - 2D matrix with at least 2 rows\n * @param index - column index used as the reference signal. Defaults to `0`.\n * @returns array of Pearson correlations, one value per column\n */\nexport function matrixAutoCorrelation(matrix, index = 0) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 2) {\n        throw new Error('can not calculate info if matrix contains less than 2 rows');\n    }\n    const targetArray = new Float64Array(nbRows);\n    const sourceArray = new Float64Array(nbRows);\n    const result = new Float64Array(nbColumns);\n    for (let j = 0; j < nbRows; j++) {\n        targetArray[j] = matrix[j][index];\n    }\n    for (let i = 0; i < nbColumns; i++) {\n        for (let j = 0; j < nbRows; j++) {\n            sourceArray[j] = matrix[j][i];\n        }\n        result[i] = xCorrelation(targetArray, sourceArray);\n    }\n    return result;\n}\n//# sourceMappingURL=matrixAutoCorrelation.js.map","/**\n * Computes per-column box-plot statistics (min, Q1, median, Q3, max) for a matrix.\n * The matrix rows must be sorted in ascending order — results will be wrong otherwise.\n * Requires at least 5 rows.\n * @param matrix - 2D matrix whose rows are sorted in ascending order\n * @returns per-column box-plot statistics\n */\nexport function matrixBoxPlot(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 5) {\n        throw new Error('can not calculate info if matrix contains less than 5 rows');\n    }\n    const info = {\n        q1: new Float64Array(nbColumns),\n        median: new Float64Array(nbColumns),\n        q3: new Float64Array(nbColumns),\n        min: Float64Array.from(matrix[0]),\n        max: Float64Array.from(matrix.at(-1)),\n    };\n    const columnArray = new Float64Array(matrix.length);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            columnArray[row] = matrix[row][column];\n        }\n        let q1max = 0;\n        let q3min = 0;\n        if (nbRows % 2 === 1) {\n            // odd\n            const middle = (nbRows - 1) / 2;\n            info.median[column] = columnArray[middle];\n            q1max = middle - 1;\n            q3min = middle + 1;\n        }\n        else {\n            // even\n            q3min = nbRows / 2;\n            q1max = q3min - 1;\n            info.median[column] = (columnArray[q1max] + columnArray[q3min]) / 2;\n        }\n        if (q1max % 2 === 0) {\n            info.q1[column] = columnArray[q1max / 2];\n            info.q3[column] = columnArray[(nbRows + q3min - 1) / 2];\n        }\n        else {\n            info.q1[column] =\n                (columnArray[(q1max + 1) / 2] + columnArray[(q1max - 1) / 2]) / 2;\n            const middleOver = (columnArray.length + q3min) / 2;\n            info.q3[column] =\n                (columnArray[middleOver] + columnArray[middleOver - 1]) / 2;\n        }\n    }\n    return info;\n}\n//# sourceMappingURL=matrixBoxPlot.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Center mean of matrix columns.\n * @param matrix - matrix [rows][cols]\n */\nexport function matrixCenterZMean(matrix) {\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let mean = 0;\n        for (let row = 0; row < nbRows; row++) {\n            mean += matrix[row][column];\n        }\n        mean /= nbRows;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] - mean;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCenterZMean.js.map","import { Matrix } from 'ml-matrix';\nimport { xCorrelation } from \"../x/index.js\";\n/**\n * Calculates a correlation matrix based on the columns of the initial matrix.\n * @param A - matrix [rows][cols]\n */\nexport function matrixColumnsCorrelation(A) {\n    const B = new Matrix(A).transpose();\n    const result = [];\n    for (let i = 0; i < B.rows; i++) {\n        result.push(new Float64Array(B.rows));\n    }\n    for (let i = 0; i < B.rows; i++) {\n        for (let j = i; j < B.rows; j++) {\n            const correlation = xCorrelation(B.getRow(i), B.getRow(j));\n            result[i][j] = correlation;\n            result[j][i] = correlation;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixColumnsCorrelation.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Get a subMatrix from matrix, the function checks if the subMatrix\n * lies within the dimensions of the matrix.\n * @param matrix - the original matrix from which the subMatrix will be extracted.\n * @param options - options to define the subMatrix boundaries and duplication behavior.\n * @returns the subMatrix extracted from the original matrix.\n */\nexport function matrixGetSubMatrix(matrix, options) {\n    const { startRow, endRow, startColumn, endColumn, duplicate = true, } = options;\n    matrixCheckRanges(matrix, { startColumn, startRow, endColumn, endRow });\n    const nbRows = endRow - startRow + 1;\n    const subMatrix = [];\n    if (duplicate) {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].slice(startColumn, endColumn + 1));\n        }\n    }\n    else {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].subarray(startColumn, endColumn + 1));\n        }\n    }\n    return subMatrix;\n}\n//# sourceMappingURL=matrixGetSubMatrix.js.map","import { getFFT } from \"../utils/fftCache.js\";\nimport { isPowerOfTwo } from \"../utils/index.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Apply the Hilbert transform to each row of a real-valued matrix, reusing a\n * single FFT instance for all rows to avoid repeated instantiation overhead.\n * All rows must have the same length, which must be a power of two.\n * @param rows - array of real-valued Float64Array rows\n * @param options - options\n * @returns array of Hilbert-transformed Float64Array rows\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nexport function matrixHilbertTransform(rows, options = {}) {\n    if (rows.length === 0)\n        return [];\n    const size = rows[0].length;\n    if (!isPowerOfTwo(size)) {\n        throw new RangeError(`Row length must be a power of two. Got ${size}.`);\n    }\n    for (let j = 1; j < rows.length; j++) {\n        if (rows[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${rows[j].length}.`);\n        }\n    }\n    // Single FFT instance reused across all rows\n    const fft = getFFT(size);\n    // Multiplier computed once — identical for every row of the same length\n    const half = size >> 1;\n    // Shared working buffers reused across all rows\n    const fftResult = new Float64Array(size * 2);\n    const hilbertSignal = new Float64Array(size * 2);\n    const { output = matrixCreateEmpty({\n        nbRows: rows.length,\n        nbColumns: size,\n    }), } = options;\n    for (let j = 0; j < rows.length; j++) {\n        const row = rows[j];\n        fft.realTransform(fftResult, row);\n        fft.completeSpectrum(fftResult);\n        const idx = half << 1;\n        fftResult[idx] = 0;\n        fftResult[idx + 1] = 0;\n        // Negate negative frequencies\n        for (let c = (half + 1) << 1; c < fftResult.length; c += 2) {\n            fftResult[c] = -fftResult[c];\n            fftResult[c + 1] = -fftResult[c + 1];\n        }\n        fft.inverseTransform(hilbertSignal, fftResult);\n        const result = output[j];\n        for (let i = 0; i < size; i++) {\n            result[i] = hilbertSignal[i * 2 + 1];\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=matrixHilbertTransform.js.map","import { xHistogram } from \"../x/index.js\";\nimport { matrixMinMaxAbsoluteZ } from \"./matrixMinMaxAbsoluteZ.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Calculates a histogram of defined number of slots.\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns result of the histogram.\n */\nexport function matrixHistogram(matrix, options = {}) {\n    let { min, max } = options;\n    const { absolute, logBaseX, logBaseY, histogram, nbSlots, centerX } = options;\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least one column and one row');\n    }\n    if (min === undefined || max === undefined) {\n        const minMax = absolute\n            ? matrixMinMaxAbsoluteZ(matrix)\n            : matrixMinMaxZ(matrix);\n        if (min === undefined) {\n            min =\n                logBaseX && minMax.min\n                    ? Math.log(minMax.min) / Math.log(logBaseX)\n                    : minMax.min;\n        }\n        if (max === undefined) {\n            max =\n                logBaseX && minMax.max\n                    ? Math.log(minMax.max) / Math.log(logBaseX)\n                    : minMax.max;\n        }\n    }\n    const xHistogramOptions = {\n        histogram,\n        nbSlots,\n        centerX,\n        absolute,\n        logBaseX,\n        // Skip logBaseY as it's handled below.\n        min,\n        max,\n    };\n    const finalHistogram = xHistogram(matrix[0], xHistogramOptions);\n    xHistogramOptions.histogram = finalHistogram;\n    const nbRows = matrix.length;\n    for (let row = 1; row < nbRows; row++) {\n        xHistogram(matrix[row], xHistogramOptions);\n    }\n    const y = finalHistogram.y;\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return finalHistogram;\n}\n//# sourceMappingURL=matrixHistogram.js.map","import { xMedian } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Returns the median of the matrix.\n * @param matrix - input matrix.\n */\nexport function matrixMedian(matrix) {\n    return xMedian(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixMedian.js.map","import { xNoiseStandardDeviation } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise.\n * @param matrix - input matrix.\n * @returns noise level corresponding to one standard deviation.\n */\nexport function matrixNoiseStandardDeviation(matrix) {\n    return xNoiseStandardDeviation(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixNoiseStandardDeviation.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically decodes the matrix using the dictionary.\n * @param matrixInitial - original matrix to decode.\n * @param dictionary - dictionary against which to do the encoding.\n * @returns decoded matrix.\n */\nexport function matrixNumericalDecoding(matrixInitial, dictionary) {\n    const matrix = matrixClone(matrixInitial);\n    const invertedDictionary = swap(dictionary);\n    for (const row of matrix) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            const value = row[j];\n            if (typeof value === 'number' && value in invertedDictionary) {\n                row[j] = invertedDictionary[value];\n            }\n        }\n    }\n    return matrix;\n}\nfunction swap(dictionary) {\n    const ret = {};\n    for (const key in dictionary) {\n        ret[dictionary[key]] = key;\n    }\n    return ret;\n}\n//# sourceMappingURL=matrixNumericalDecoding.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically encodes the strings in the matrix and returns an encoding dictionary which can be used to encode other matrices\n * @param matrixInitial - original matrix before encoding\n * @returns - dictionary from string to number\n */\nexport function matrixNumericalEncoding(matrixInitial) {\n    const matrix = matrixClone(matrixInitial);\n    const nRows = matrix.length;\n    const nColumns = matrix[0].length;\n    let k = 0;\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'number' && value > k) {\n                k = value;\n            }\n        }\n    }\n    const dictCategoricalToNumerical = {};\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'string') {\n                if (value in dictCategoricalToNumerical) {\n                    matrix[i][j] = dictCategoricalToNumerical[value];\n                }\n                else {\n                    k++;\n                    dictCategoricalToNumerical[value] = k;\n                    matrix[i][j] = k;\n                }\n            }\n        }\n    }\n    return { matrix: matrix, dictCategoricalToNumerical };\n}\n//# sourceMappingURL=matrixNumericalEncoding.js.map","import { Matrix } from 'ml-matrix';\nimport { xMedian } from \"../x/index.js\";\n/**\n * Performs a Probabilistic quotient normalization (PQN) over the dataset to account dilution based in median spectrum.\n * Dieterle, F., Ross, A., Schlotterbeck, G., & Senn, H. (2006). Probabilistic quotient normalization as robust method to account for dilution of complex biological mixtures. Application in 1H NMR metabonomics. Analytical chemistry, 78(13), 4281-4290.\n * DOI: 10.1021/ac051632c\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - {data: Normalized dataset, medianOfQuotients: The median of quotients of each variables}\n */\nexport function matrixPQN(matrix, options = {}) {\n    const { max = 100 } = options;\n    const matrixB = new Matrix(matrix);\n    for (let i = 0; i < matrixB.rows; i++) {\n        const normalizationFactor = matrixB.getRowVector(i).norm('frobenius') / max;\n        const row = matrixB.getRowVector(i).div(normalizationFactor);\n        matrixB.setRow(i, row);\n    }\n    const referenceSpectrum = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const currentVariable = matrixB.getColumn(i);\n        referenceSpectrum.push(xMedian(currentVariable));\n    }\n    const medianOfQuotients = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const quotients = matrixB.getColumnVector(i).div(referenceSpectrum[i]);\n        medianOfQuotients.push(xMedian(quotients.getColumn(0)));\n    }\n    for (let i = 0; i < matrixB.rows; i++) {\n        matrixB.mulRow(i, 1 / medianOfQuotients[i]);\n    }\n    return {\n        data: matrixB.to2DArray(),\n        medianOfQuotients,\n    };\n}\n//# sourceMappingURL=matrixPQN.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Set in-place a subMatrix to matrix, the function check if the subMatrix\n * lies into the dimensions of matrix.\n * @param matrix - matrix that will receive the new element values.\n * @param subMatrix - matrix with equal or less size than matrix.\n * @param startRow - row index in matrix for the first row in subMatrix.\n * @param startColumn - column index in matrix for the first column in subMatrix.\n * @returns the modified `matrix`.\n */\nexport function matrixSetSubMatrix(matrix, subMatrix, startRow, startColumn) {\n    const endRow = startRow + subMatrix.length - 1;\n    const endColumn = startColumn + subMatrix[0].length - 1;\n    matrixCheckRanges(matrix, { startRow, endRow, startColumn, endColumn });\n    for (let i = 0; i < subMatrix.length; i++) {\n        for (let j = 0; j < subMatrix[0].length; j++) {\n            matrix[startRow + i][startColumn + j] = subMatrix[i][j];\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixSetSubMatrix.js.map","import { matrixCheck } from \"./matrixCheck.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nexport function matrixTranspose(matrix, options = {}) {\n    matrixCheck(matrix);\n    const { ArrayConstructor } = options;\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    // Create new matrix with swapped dimensions\n    const result = matrixCreateEmpty({\n        nbColumns: nbRows,\n        nbRows: nbColumns,\n        ArrayConstructor,\n    });\n    for (let i = 0; i < nbRows; i++) {\n        for (let j = 0; j < nbColumns; j++) {\n            result[j][i] = matrix[i][j];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixTranspose.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMaxAbsoluteZ } from \"./matrixMaxAbsoluteZ.js\";\n/**\n * Rescale a matrix around 0 taking into account the absolute max value.\n * @param matrix - matrix [rows][cols].\n * @param options - options.\n */\nexport function matrixZPivotRescale(matrix, options = {}) {\n    const { max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const currentMax = matrixMaxAbsoluteZ(matrix);\n    const factor = max / currentMax;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] * factor;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZPivotRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Rescale the matrix per column for which we get the min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - options.\n */\nexport function matrixZRescalePerColumn(matrix, options = {}) {\n    const { min = 0, max = 1 } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let currentMin = matrix[0][column];\n        let currentMax = matrix[0][column];\n        for (let row = 1; row < nbRows; row++) {\n            if (matrix[row][column] < currentMin)\n                currentMin = matrix[row][column];\n            if (matrix[row][column] > currentMax)\n                currentMax = matrix[row][column];\n        }\n        const factor = (max - min) / (currentMax - currentMin);\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescalePerColumn.js.map","import { zeroShift } from \"../reim/zeroShift.js\";\nimport { getFFT } from \"../utils/fftCache.js\";\n/**\n * Apply FFT to an array of complex spectra, reusing a single FFT instance for\n * all elements to avoid repeated instantiation overhead.\n * All elements must have the same length.\n * @param data - array of complex spectra\n * @param options - options\n * @returns array of transformed complex spectra\n */\nexport function reimArrayFFT(data, options = {}) {\n    if (data.length === 0)\n        return [];\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = data[0].re.length;\n    const csize = size << 1;\n    for (let j = 1; j < data.length; j++) {\n        if (data[j].re.length !== size || data[j].im.length !== size) {\n            throw new RangeError(`All elements must have the same length. Expected ${size} but element ${j} has length ${data[j].re.length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all spectra\n    const fft = getFFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const results = new Array(data.length);\n    for (let j = 0; j < data.length; j++) {\n        const { re, im } = data[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = re[i >>> 1];\n            complexArray[i + 1] = im[i >>> 1];\n        }\n        const outRe = inPlace ? re : new Float64Array(size);\n        const outIm = inPlace ? im : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        results[j] = { re: outRe, im: outIm };\n    }\n    return results;\n}\n//# sourceMappingURL=reimArrayFFT.js.map","import { getFFT } from \"../utils/fftCache.js\";\nimport { zeroShift } from \"./zeroShift.js\";\n/**\n * Computes the FFT of a complex spectrum.\n * @param data - complex spectrum.\n * @param options - options.\n * @returns FFT of complex spectrum.\n */\nexport function reimFFT(data, options = {}) {\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const { re, im } = data;\n    const size = re.length;\n    const csize = size << 1;\n    let complexArray = new Float64Array(csize);\n    for (let i = 0; i < csize; i += 2) {\n        complexArray[i] = re[i >>> 1];\n        complexArray[i + 1] = im[i >>> 1];\n    }\n    const fft = getFFT(size);\n    let output = new Float64Array(csize);\n    if (inverse) {\n        if (applyZeroShift)\n            complexArray = zeroShift(complexArray, true);\n        fft.inverseTransform(output, complexArray);\n    }\n    else {\n        fft.transform(output, complexArray);\n        if (applyZeroShift)\n            output = zeroShift(output);\n    }\n    if (inPlace) {\n        for (let i = 0; i < csize; i += 2) {\n            re[i >>> 1] = output[i];\n            im[i >>> 1] = output[i + 1];\n        }\n        return data;\n    }\n    const newRe = new Float64Array(size);\n    const newIm = new Float64Array(size);\n    for (let i = 0; i < csize; i += 2) {\n        newRe[i >>> 1] = output[i];\n        newIm[i >>> 1] = output[i + 1];\n    }\n    return { re: newRe, im: newIm };\n}\n//# sourceMappingURL=reimFFT.js.map","import { zeroShift } from \"../reim/zeroShift.js\";\nimport { getFFT } from \"../utils/fftCache.js\";\n/**\n * Apply FFT to each row of a complex matrix, reusing a single FFT instance for\n * all rows to avoid repeated instantiation overhead.\n * All rows must have the same length.\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param options - options\n * @returns complex matrix with transformed rows\n */\nexport function reimMatrixFFT(data, options = {}) {\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = re[0].length;\n    const csize = size << 1;\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== size || im[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all rows\n    const fft = getFFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    for (let j = 0; j < numRows; j++) {\n        const reRow = re[j];\n        const imRow = im[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = reRow[i >>> 1];\n            complexArray[i + 1] = imRow[i >>> 1];\n        }\n        const outRe = inPlace ? reRow : new Float64Array(size);\n        const outIm = inPlace ? imRow : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        resultRe[j] = outRe;\n        resultIm[j] = outIm;\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixFFT.js.map","import { zeroShift } from \"../reim/zeroShift.js\";\nimport { getFFT } from \"../utils/fftCache.js\";\n/**\n * Apply FFT to each column of a complex matrix, reusing a single FFT instance for\n * all columns to avoid repeated instantiation overhead.\n * All columns must have the same length (all rows must have the same number of columns).\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param options - options\n * @returns complex matrix with transformed columns\n */\nexport function reimMatrixFFTByColumns(data, options = {}) {\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const numColumns = re[0].length;\n    const csize = numRows << 1;\n    // Validate all rows have the same number of columns\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== numColumns || im[j].length !== numColumns) {\n            throw new RangeError(`All rows must have the same length. Expected ${numColumns} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    if (numColumns === 0) {\n        return { re: new Array(numRows), im: new Array(numRows) };\n    }\n    // Single FFT instance and working buffers reused across all columns\n    const fft = getFFT(numRows);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    // Initialize result arrays\n    for (let i = 0; i < numRows; i++) {\n        resultRe[i] = inPlace ? re[i] : new Float64Array(numColumns);\n        resultIm[i] = inPlace ? im[i] : new Float64Array(numColumns);\n    }\n    // Process each column\n    for (let col = 0; col < numColumns; col++) {\n        // Extract column data into complex array\n        for (let row = 0; row < numRows; row++) {\n            complexArray[row << 1] = re[row][col];\n            complexArray[(row << 1) + 1] = im[row][col];\n        }\n        const colRe = new Float64Array(numRows);\n        const colIm = new Float64Array(numRows);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                colRe[i >>> 1] = output[i];\n                colIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                colRe[i >>> 1] = source[i];\n                colIm[i >>> 1] = source[i + 1];\n            }\n        }\n        // Store transformed column back into result matrix\n        for (let row = 0; row < numRows; row++) {\n            resultRe[row][col] = colRe[row];\n            resultIm[row][col] = colIm[row];\n        }\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixFFTByColumns.js.map","/**\n * Apply phase correction to a complex matrix along rows or columns.\n * All rows must have the same length.\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param phi0 - angle in radians for zero order phase correction.\n * @param phi1 - angle in radians for first order phase correction.\n * @param options - options including direction ('rows' or 'columns', default 'rows').\n * @returns complex matrix with corrected rows or columns.\n */\nexport function reimMatrixPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false, inPlace = false, direction = 'rows' } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const numColumns = re[0].length;\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== numColumns || im[j].length !== numColumns) {\n            throw new RangeError(`All rows must have the same length. Expected ${numColumns} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    // Initialize result arrays\n    for (let i = 0; i < numRows; i++) {\n        resultRe[i] = inPlace ? re[i] : new Float64Array(numColumns);\n        resultIm[i] = inPlace ? im[i] : new Float64Array(numColumns);\n    }\n    const size = direction === 'rows' ? numColumns : numRows;\n    let delta = phi1 / (size - 1);\n    if (reverse) {\n        delta = -delta;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    if (direction === 'rows') {\n        for (let j = 0; j < numRows; j++) {\n            let firstAngle = phi0;\n            if (reverse) {\n                firstAngle += phi1;\n            }\n            let cosTheta = Math.cos(firstAngle);\n            let sinTheta = Math.sin(firstAngle);\n            for (let i = 0; i < numColumns; i++) {\n                const r = re[j][i];\n                const ii = im[j][i];\n                resultRe[j][i] = r * cosTheta - ii * sinTheta;\n                resultIm[j][i] = ii * cosTheta + r * sinTheta;\n                const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n                const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n                cosTheta = newCosTheta;\n                sinTheta = newSinTheta;\n            }\n        }\n    }\n    else {\n        for (let col = 0; col < numColumns; col++) {\n            let firstAngle = phi0;\n            if (reverse) {\n                firstAngle += phi1;\n            }\n            let cosTheta = Math.cos(firstAngle);\n            let sinTheta = Math.sin(firstAngle);\n            for (let row = 0; row < numRows; row++) {\n                const r = re[row][col];\n                const ii = im[row][col];\n                resultRe[row][col] = r * cosTheta - ii * sinTheta;\n                resultIm[row][col] = ii * cosTheta + r * sinTheta;\n                const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n                const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n                cosTheta = newCosTheta;\n                sinTheta = newSinTheta;\n            }\n        }\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixPhaseCorrection.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object - object to stringify.\n * @param replacer - optional replacer function.\n * @param space - optional indentation.\n * @returns JSON string.\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { xAbsolute } from \"./xAbsolute.js\";\nimport { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median after taking the xAbsolute values of the points.\n * @param array - the array for which we want to calculate the absolute value\n * @returns - median\n */\nexport function xAbsoluteMedian(array) {\n    return xMedian(xAbsolute(array));\n}\n//# sourceMappingURL=xAbsoluteMedian.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { xCrossCorrelation } from \"./xCrossCorrelation.js\";\n/**\n * Calculates the auto-correlation of an array\n * @param A - the array for which to calculate the auto-correlation\n * @param options - options.\n */\nexport function xAutoCorrelation(A, options = {}) {\n    return xCrossCorrelation(A, A, options);\n}\n//# sourceMappingURL=xAutoCorrelation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Downsample an array by averaging consecutive non-overlapping points (binning).\n * Either specify a fixed `binSize` or a target `numberOfPoints`.\n * @param array - input array.\n * @param options - options.\n * @returns downsampled array.\n */\nexport function xBinning(array, options = {}) {\n    xCheck(array);\n    const { binSize, numberOfPoints, keepFirstAndLast = true } = options;\n    const { length } = array;\n    if (numberOfPoints !== undefined) {\n        if (binSize !== undefined) {\n            throw new RangeError('binSize and numberOfPoints are mutually exclusive');\n        }\n        if (!Number.isInteger(numberOfPoints) || numberOfPoints <= 0) {\n            throw new RangeError('numberOfPoints must be a positive integer');\n        }\n        if (numberOfPoints > length) {\n            throw new RangeError('numberOfPoints must be <= array.length');\n        }\n        return binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast);\n    }\n    const effectiveBinSize = binSize ?? 10;\n    if (!Number.isInteger(effectiveBinSize) || effectiveBinSize <= 0) {\n        throw new RangeError('binSize must be a positive integer');\n    }\n    if (effectiveBinSize === 1) {\n        return Float64Array.from(array);\n    }\n    if (keepFirstAndLast) {\n        if (length <= 2) {\n            return Float64Array.from(array);\n        }\n        const innerLength = length - 2;\n        const innerBinCount = Math.ceil(innerLength / effectiveBinSize);\n        const output = new Float64Array(innerBinCount + 2);\n        output[0] = array[0];\n        output[output.length - 1] = array[length - 1];\n        for (let i = 0, j = 1; i < innerLength; i += effectiveBinSize, j++) {\n            const start = i + 1;\n            const end = Math.min(start + effectiveBinSize, length - 1);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j] = sum / (end - start);\n        }\n        return output;\n    }\n    const outputLength = Math.ceil(length / effectiveBinSize);\n    const output = new Float64Array(outputLength);\n    for (let i = 0, j = 0; i < length; i += effectiveBinSize, j++) {\n        const end = Math.min(i + effectiveBinSize, length);\n        let sum = 0;\n        for (let k = i; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - i);\n    }\n    return output;\n}\nfunction binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast) {\n    const { length } = array;\n    const output = new Float64Array(numberOfPoints);\n    if (keepFirstAndLast) {\n        if (numberOfPoints < 2) {\n            throw new RangeError('numberOfPoints must be >= 2 when keepFirstAndLast is true');\n        }\n        output[0] = array[0];\n        output[numberOfPoints - 1] = array[length - 1];\n        if (numberOfPoints === 2) {\n            return output;\n        }\n        const innerLength = length - 2;\n        const innerBins = numberOfPoints - 2;\n        for (let j = 0; j < innerBins; j++) {\n            const start = 1 + Math.floor((j * innerLength) / innerBins);\n            const end = 1 + Math.floor(((j + 1) * innerLength) / innerBins);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j + 1] = sum / (end - start);\n        }\n        return output;\n    }\n    for (let j = 0; j < numberOfPoints; j++) {\n        const start = Math.floor((j * length) / numberOfPoints);\n        const end = Math.floor(((j + 1) * length) / numberOfPoints);\n        let sum = 0;\n        for (let k = start; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - start);\n    }\n    return output;\n}\n//# sourceMappingURL=xBinning.js.map","import { xBoxPlotWithOutliers } from \"./xBoxPlotWithOutliers.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data.\n * @returns q1, median, q3, min, max.\n */\nexport function xDistributionStats(array) {\n    const mean = xMean(array);\n    return {\n        ...xBoxPlotWithOutliers(array),\n        mean,\n        sd: xStandardDeviation(array, { mean }),\n        nb: array.length,\n    };\n}\n//# sourceMappingURL=xDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - array to check.\n * @param options - additional checks.\n * @returns Whether the value is a valid array of numbers.\n */\nexport function xIsArray(input, options = {}) {\n    const { minLength = 1 } = options;\n    return (isAnyArray(input) &&\n        input.length > 0 &&\n        typeof input[0] === 'number' &&\n        input.length >= minLength);\n}\n//# sourceMappingURL=xIsArray.js.map","import { xEqualIntegrationVectorSimilarity } from \"./xEqualIntegrationVectorSimilarity.js\";\n/**\n * Check the similarity between array created by xyMassCenterVector\n * @deprecated The center of mass trees it compares are misleading, see `xyMassCenterVector`.\n * Use `xEqualIntegrationVectorSimilarity` together with `xyEqualIntegrationVector`.\n * @param array1 - first mass center vector.\n * @param array2 - second mass center vector.\n * @param options - options.\n * @returns similarity score between 0 and 1.\n */\nexport function xMassCenterVectorSimilarity(array1, array2, options = {}) {\n    const { recenter = true, similarityFct = (a, b) => (a === b ? 1 : 0), } = options;\n    return xEqualIntegrationVectorSimilarity(array1, array2, {\n        recenter,\n        similarityFct,\n    });\n}\n//# sourceMappingURL=xMassCenterVectorSimilarity.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the maximum of the given values\n * @param array - array of numbers\n * @param  options - options\n * @returns - index\n */\nexport function xMaxIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > array[maxIndex]) {\n            maxIndex = i;\n        }\n    }\n    return maxIndex;\n}\n//# sourceMappingURL=xMaxIndex.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean absolute error.\n * @param array1 - first array\n * @param array2 - second array\n */\nexport function xMeanAbsoluteError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += Math.abs(array1[i] - array2[i]);\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanAbsoluteError.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean squared error.\n * @param array1 -first array\n * @param array2 - second array\n */\nexport function xMeanSquaredError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += (array1[i] - array2[i]) ** 2;\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanSquaredError.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @deprecated please use xyMassCenter\n * @param array - array of numbers\n * @param weights - array of weights\n * @param options - options\n */\nexport function xMeanWeighted(array, weights, options = {}) {\n    xCheck(array, { minLength: 1 });\n    xCheck(weights);\n    if (array.length !== weights.length) {\n        throw new Error('array and weights must have the same length');\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    // normalize weights\n    let sumWeights = 0;\n    let sumValue = array[fromIndex] * weights[fromIndex];\n    sumWeights += weights[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i] * weights[i];\n        sumWeights += weights[i];\n    }\n    if (sumWeights === 0) {\n        // We throw because the case is not well defined\n        throw new Error('sum of weights must be > 0');\n    }\n    return sumValue / sumWeights;\n}\n//# sourceMappingURL=xMeanWeighted.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the minimum of the given values.\n * @param array - array of numbers\n * @param options - options\n * @returns - index\n */\nexport function xMinIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < array[minIndex]) {\n            minIndex = i;\n        }\n    }\n    return minIndex;\n}\n//# sourceMappingURL=xMinIndex.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns object with 2 properties, min and max.\n */\nexport function xMinMaxDelta(array) {\n    xCheck(array, {\n        minLength: 2,\n    });\n    let minDelta = array[1] - array[0];\n    let maxDelta = minDelta;\n    for (let i = 0; i < array.length - 1; i++) {\n        const delta = array[i + 1] - array[i];\n        if (delta < minDelta)\n            minDelta = delta;\n        if (delta > maxDelta)\n            maxDelta = delta;\n    }\n    return { min: minDelta, max: maxDelta };\n}\n//# sourceMappingURL=xMinMaxDelta.js.map","/**\n * Calculates the mode of an array\n * @param input - array containing values.\n * @returns mode.\n */\nexport function xMode(input) {\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let maxValue = 0;\n    let maxCount = 0;\n    let count = 0;\n    const counts = {};\n    for (const element of input) {\n        count = counts[element];\n        if (count) {\n            counts[element]++;\n            count++;\n        }\n        else {\n            counts[element] = 1;\n            count = 1;\n        }\n        if (count > maxCount) {\n            maxCount = count;\n            maxValue = element;\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMode.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { isAnyArray } from 'is-any-array';\nimport { xBoxPlot } from \"./xBoxPlot.js\";\n/**\n * Remove the outliers from the array\n * Based on 1.5 IQR\n * @param array - data\n * @returns - trimmed data\n */\nexport function xRemoveOutliersIQR(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    if (array.length === 0) {\n        return array;\n    }\n    const boxPlot = xBoxPlot(array);\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const higherWhisker = boxPlot.q3 + 1.5 * iqr;\n    if (boxPlot.min >= lowerWhisker && boxPlot.max <= higherWhisker) {\n        return array;\n    }\n    const filteredArray = [];\n    for (const element of array) {\n        if (element >= lowerWhisker && element <= higherWhisker) {\n            filteredArray.push(element);\n        }\n    }\n    return filteredArray;\n}\n//# sourceMappingURL=xRemoveOutliersIQR.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { getSortedFloat64 } from \"./getSortedFloat64.js\";\nimport { boxPlotWithOutliersAndBounds } from \"./xBoxPlotWithOutliers.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options. Statistics\n * like sd and mean are calculated after removing outliers.\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data.\n * @returns q1, median, q3, min, max.\n */\nexport function xRobustDistributionStats(array) {\n    xCheck(array);\n    const sorted = getSortedFloat64(array);\n    const { boxPlot, bounds } = boxPlotWithOutliersAndBounds(sorted);\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            ...boxPlot,\n            mean: boxPlot.median,\n            sd: sorted.length === 1 ? Number.NaN : 0,\n            nb: sorted.length,\n        };\n    }\n    // non-outliers form a contiguous range in the sorted array, so we slice it\n    // as a zero-copy view instead of allocating and filling a filtered array.\n    const filteredArray = sorted.subarray(bounds.lowIndex, bounds.highIndex);\n    const mean = xMean(filteredArray);\n    return {\n        ...boxPlot,\n        mean,\n        sd: xStandardDeviation(filteredArray, { mean }),\n        nb: filteredArray.length,\n    };\n}\n//# sourceMappingURL=xRobustDistributionStats.js.map","import { xMaxValue } from \"./xMaxValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a maximum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMax(array, options = {}) {\n    return xRolling(array, xMaxValue, options);\n}\n//# sourceMappingURL=xRollingMax.js.map","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { xMinValue } from \"./xMinValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a minimum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMin(array, options = {}) {\n    return xRolling(array, xMinValue, options);\n}\n//# sourceMappingURL=xRollingMin.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Sample within the array\n * @param array - array from which to sample.\n * @param options - options.\n * @returns array with evenly spaced elements.\n * @link https://en.wikipedia.org/wiki/Sampling_(signal_processing)\n */\nexport function xSampling(array, options = {}) {\n    const { length = 10 } = options;\n    xCheck(array);\n    if (length === array.length) {\n        return Float64Array.from(array);\n    }\n    else if (length > array.length) {\n        throw new RangeError('length must be smaller than the array length');\n    }\n    else {\n        return downSampling(array, length);\n    }\n}\n/**\n * Downsample within the array\n * @param array - array from which to sample.\n * @param length - target number of elements.\n * @returns array with evenly spaced elements.\n * @link https://en.wikipedia.org/wiki/Downsampling_(signal_processing)\n */\nfunction downSampling(array, length) {\n    const returnArray = new Float64Array(length);\n    const delta = length === 1 ? 0 : (array.length - 1) / (length - 1);\n    for (let i = 0; i < length; i++) {\n        returnArray[i] = array[Math.round(i * delta)];\n    }\n    return returnArray;\n}\n//# sourceMappingURL=xSampling.js.map","import { xSequentialFillFromStep } from \"./xSequentialFillFromStep.js\";\nexport function xSequentialFillFromTo(parameters, options = {}) {\n    const { from, to, size } = parameters;\n    const step = size <= 1 ? 0 : (to - from) / (size - 1);\n    return xSequentialFillFromStep({ from, step, size }, options);\n}\n//# sourceMappingURL=xSequentialFillFromTo.js.map","/**\n * Function that sorts arrays or Float64Arrays in ascending order in place !\n * This method is optimized for typed arrays.\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortAscending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => a - b);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortAscending.js.map","/**\n * XUniqueSorted.\n * @param array - array of numbers\n * @returns - sorted array\n */\nexport function xUniqueSorted(array) {\n    const unique = Float64Array.from(new Set(array));\n    unique.sort();\n    return unique;\n}\n//# sourceMappingURL=xUniqueSorted.js.map","/**\n * Sort object of arrays, x has to be monotone.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @returns sorted DataXReIm object.\n */\nexport function xreimSortX(data) {\n    const { x, re, im } = data;\n    if (x.length !== re.length || x.length !== im.length) {\n        throw new TypeError('length of x, re and im must be identical');\n    }\n    if (x.length < 2 || x[0] < x[1])\n        return data;\n    return {\n        x: x.toReversed(),\n        re: re.toReversed(),\n        im: im.toReversed(),\n    };\n}\n//# sourceMappingURL=xreimSortX.js.map","import { reimZeroFilling } from \"../reim/index.js\";\n/**\n * This function makes a zero filling to re and im part.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @param totalLength - final number of points\n * @returns zero-filled DataXReIm object.\n */\nexport function xreimZeroFilling(data, totalLength) {\n    const { x, re, im } = data;\n    const length = x.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            x: x.slice(0, totalLength),\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newX = new Float64Array(totalLength);\n    newX.set(x);\n    const deltaX = (x.at(-1) - x[0]) / (length - 1);\n    for (let i = length; i < totalLength; i++) {\n        newX[i] = newX[i - 1] + deltaX;\n    }\n    return {\n        x: newX,\n        ...reimZeroFilling({ re, im }, totalLength),\n    };\n}\n//# sourceMappingURL=xreimZeroFilling.js.map","/**\n * Convert an array of XY arrays to a DataXY object containing x,y arrays\n * @param data - array of arrays [[x,y],[x,y],...]\n */\nexport function xy2ToXY(data) {\n    const xy2 = { x: [], y: [] };\n    for (const xyValue of data) {\n        xy2.x.push(xyValue[0]);\n        xy2.y.push(xyValue[1]);\n    }\n    return xy2;\n}\n//# sourceMappingURL=xy2ToXY.js.map","/**\n * Align data of two spectra by verifying wether x values are in a certain range (`delta`).\n * The two spectra should not have two consecutive x values which difference is\n * smaller than `delta` to achieve good results!\n * @param data1 - first spectrum data.\n * @param data2 - second spectrum data.\n * @param options - options.\n * @returns aligned x, y1, y2 arrays.\n */\nexport function xyAlign(data1, data2, options = {}) {\n    const { delta = 1, common = true, x = 'x1' } = options;\n    const result = {\n        x: [],\n        y1: [],\n        y2: [],\n    };\n    let i = 0;\n    let j = 0;\n    const length1 = data1.x.length;\n    const length2 = data2.x.length;\n    while (i < length1 && j < length2) {\n        let maxDiff = 0;\n        if (typeof delta === 'function') {\n            const mean = (data1.x[i] + data2.x[j]) / 2; // is this a good thing to do?\n            maxDiff = delta(mean);\n        }\n        else {\n            maxDiff = delta;\n        }\n        const difference = data1.x[i] - data2.x[j];\n        if (Math.abs(difference) > maxDiff) {\n            if (difference > 0) {\n                if (!common) {\n                    result.x.push(data2.x[j]);\n                    result.y1.push(0);\n                    result.y2.push(data2.y[j]);\n                    if (j === length2 - 1) {\n                        while (i < length1) {\n                            result.x.push(data1.x[i]);\n                            result.y1.push(data1.y[i]);\n                            result.y2.push(0);\n                            i++;\n                        }\n                    }\n                }\n                j++;\n            }\n            else {\n                if (!common) {\n                    result.x.push(data1.x[i]);\n                    result.y1.push(data1.y[i]);\n                    result.y2.push(0);\n                    if (i === length1 - 1) {\n                        while (j < length2) {\n                            result.x.push(data2.x[j]);\n                            result.y1.push(0);\n                            result.y2.push(data2.y[j]);\n                            j++;\n                        }\n                    }\n                }\n                i++;\n            }\n        }\n        else {\n            switch (x) {\n                case 'x1':\n                    result.x.push(data1.x[i]);\n                    break;\n                case 'x2':\n                    result.x.push(data2.x[j]);\n                    break;\n                case 'weighted':\n                    result.x.push((data1.x[i] * data1.y[i] + data2.x[j] * data2.y[j]) /\n                        (data1.y[i] + data2.y[j]));\n                    break;\n                default:\n                    throw new Error(`unknown x option value: ${String(x)}`);\n            }\n            result.y1.push(data1.y[i]);\n            result.y2.push(data2.y[j]);\n            i++;\n            j++;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyAlign.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Aligns data, can be used for spectra\n * @param data - data\n * @param options - options.\n */\nexport function xyArrayAlign(data, options = {}) {\n    const { delta = 1, requiredY = false } = options;\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    if (requiredY)\n        return filterRequiredY(x, ys);\n    return { x, ys };\n}\nfunction filterRequiredY(x, ys) {\n    const newX = [];\n    const newYs = Array.from(ys, () => []);\n    for (let i = 0; i < x.length; i++) {\n        if (ys.every((y) => y[i] !== 0)) {\n            newX.push(x[i]);\n            for (let j = 0; j < ys.length; j++) {\n                newYs[j].push(ys[j][i]);\n            }\n        }\n    }\n    return { x: newX, ys: newYs };\n}\n//# sourceMappingURL=xyArrayAlign.js.map","import { getSlotsToFirst } from \"./utils/getSlotsToFirst.js\";\n/**\n * We align all the data/spectra to the first array of X.\n * The alignment is based on the X values of the first spectrum and the `delta` error allowed.\n * If some x values are missing in the first spectrum we will add them\n * @param data - data\n * @param options - options\n * @returns the common `x` axis and one aligned `y` array per input spectrum.\n */\nexport function xyArrayAlignToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const slots = getSlotsToFirst(data, { delta });\n    const x = new Float64Array(slots.length);\n    for (let i = 0; i < slots.length; i++) {\n        x[i] = slots[i].value;\n    }\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] < slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, ys };\n}\n//# sourceMappingURL=xyArrayAlignToFirst.js.map","import { xyArrayWeightedMerge } from \"../xyArrayWeightedMerge.js\";\n/**\n * Computes slots aligned to the first spectrum's x values, adding slots for any x values not covered.\n * @param data - data.\n * @param options - options.\n * @returns the slots, sorted by x value, with non-overlapping `[from, to)` ranges.\n */\nexport function getSlotsToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const firstXs = data[0].x;\n    const slots = [];\n    // we first create the slots based on the first spectrum\n    for (const element of firstXs) {\n        const currentDelta = deltaIsFunction ? delta(element) : delta;\n        slots.push({\n            from: element - currentDelta,\n            to: element + currentDelta,\n            value: element,\n        });\n    }\n    const otherXs = xyArrayWeightedMerge(data.slice(1), options).x;\n    let currentPosition = 0;\n    // Only the first-spectrum slots drive this pass; slots created for uncovered\n    // x values are appended and merged in by the sort below, so we freeze the\n    // count instead of iterating an array we are mutating.\n    const firstSlotCount = slots.length;\n    for (let i = 0; i < firstSlotCount; i++) {\n        const slot = slots[i];\n        while (currentPosition < otherXs.length &&\n            otherXs[currentPosition] < slot.to) {\n            if (otherXs[currentPosition] < slot.from) {\n                const currentDelta = deltaIsFunction\n                    ? delta(otherXs[currentPosition])\n                    : delta;\n                slots.push({\n                    from: otherXs[currentPosition] - currentDelta,\n                    to: otherXs[currentPosition] + currentDelta,\n                    value: otherXs[currentPosition],\n                });\n            }\n            currentPosition++;\n        }\n    }\n    for (let i = currentPosition; i < otherXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(otherXs[i]) : delta;\n        slots.push({\n            from: otherXs[i] - currentDelta,\n            to: otherXs[i] + currentDelta,\n            value: otherXs[i],\n        });\n    }\n    slots.sort((a, b) => a.value - b.value);\n    // we prevent slots overlap in the first spectrum\n    for (let i = 0; i < slots.length - 1; i++) {\n        if (slots[i].to > slots[i + 1].from) {\n            const middle = (slots[i].value + slots[i + 1].value) / 2;\n            slots[i].to = middle;\n            slots[i + 1].from = middle;\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlotsToFirst.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values that are the closest possible\n * @param data - data\n * @param options - options.\n */\nexport function xyArrayMerge(data, options = {}) {\n    const { delta = 1 } = options;\n    // We start by checking that the data/spectra don't have peaks too close and we simplify them.\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    // At first, we will calculate the X values (simple mean).\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const y = new Float64Array(x.length);\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                y[i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyArrayMerge.js.map","import { xMean } from \"../x/index.js\";\n/**\n * Finds the covariance of the points.\n * @param data - data with x and y arrays.\n * @param options - options.\n * @returns the covariance.\n */\nexport function xyCovariance(data, options = {}) {\n    const { x, y } = data;\n    const { unbiased = true } = options;\n    const meanX = xMean(x);\n    const meanY = xMean(y);\n    let error = 0;\n    for (let i = 0; i < x.length; i++) {\n        error += (x[i] - meanX) * (y[i] - meanY);\n    }\n    if (unbiased) {\n        return error / (x.length - 1);\n    }\n    else {\n        return error / x.length;\n    }\n}\n//# sourceMappingURL=xyCovariance.js.map","import { xEnsureFloat64 } from \"../x/index.js\";\n/**\n * Converts both x and y arrays to Float64Array if they are not already.\n * @param data - object containing x and y arrays.\n * @returns data with x and y as Float64Array.\n */\nexport function xyEnsureFloat64(data) {\n    return {\n        x: xEnsureFloat64(data.x),\n        y: xEnsureFloat64(data.y),\n    };\n}\n//# sourceMappingURL=xyEnsureFloat64.js.map","import { xIsMonotonic } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @returns filtered data with strictly increasing x values.\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Extract zones from a XY data.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns extracted DataXY containing only the points within the specified zones.\n */\nexport function xyExtract(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    let { zones } = options;\n    zones = zonesNormalize(zones);\n    if (x === undefined ||\n        y === undefined ||\n        !Array.isArray(zones) ||\n        zones.length === 0) {\n        return data;\n    }\n    const newX = [];\n    const newY = [];\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyExtract.js.map","/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilter(data, options = {}) {\n    const { x, y } = data;\n    const { filter } = options;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (!filter || filter(x[i], y[i])) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilter.js.map","import { xMinMaxValues } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param minRelativeYValue - the minimum relative value compare to the Y max value\n * @returns filtered data\n */\nexport function xyFilterMinYValue(data, minRelativeYValue) {\n    if (minRelativeYValue === undefined)\n        return data;\n    const { x, y } = data;\n    const { min, max } = xMinMaxValues(y);\n    const threshold = max * minRelativeYValue;\n    if (min >= threshold)\n        return data;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] >= threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterMinYValue.js.map","import { xSortDescending } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y.\n * @param nbPeaks - number of top peaks to keep.\n * @returns filtered data.\n */\nexport function xyFilterTopYValues(data, nbPeaks) {\n    if (nbPeaks === undefined)\n        return data;\n    if (nbPeaks > data.x.length)\n        return data;\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    const descending = xSortDescending(y.slice());\n    const threshold = descending[nbPeaks - 1];\n    let nbThreshold = 0;\n    for (let i = 0; i < nbPeaks; i++) {\n        if (descending[i] === threshold) {\n            nbThreshold++;\n        }\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] > threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n        else if (y[i] === threshold) {\n            nbThreshold--;\n            if (nbThreshold >= 0) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterTopYValues.js.map","import { zonesNormalize } from \"../zones/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    // @ts-expect-error -- x.at(-1) returns number | undefined but array is guaranteed non-empty here\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns an object with the filtered data.\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","import { xFindClosestIndex } from \"../x/index.js\";\n/**\n * Finds the closest point\n * @param data - x array should be sorted and ascending\n * @param target - target to search\n * @returns - closest point\n */\nexport function xyFindClosestPoint(\n/** points */\ndata, target) {\n    const { x, y } = data;\n    const index = xFindClosestIndex(x, target);\n    return {\n        x: x[index],\n        y: y[index],\n    };\n}\n//# sourceMappingURL=xyFindClosestPoint.js.map","/**\n * Convert a flat interleaved array [x, y, x, y, ...] to a DataXY object.\n * @param data - flat array alternating x and y values.\n * @returns DataXY object with separate x and y arrays.\n */\nexport function xyFromInterleaved(data) {\n    if (data.length % 2 !== 0) {\n        throw new RangeError(`xyFromInterleaved: data length must be even, got ${data.length}`);\n    }\n    const length = data.length / 2;\n    const x = new Float64Array(length);\n    const y = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        x[i] = data[2 * i];\n        y[i] = data[2 * i + 1];\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyFromInterleaved.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns the numberMaxPoints points with the bigger y.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param numberMaxPoints - number of points to keep.\n * @returns the points filtered to keep the `numberMaxPoints` most intense points of the input.\n */\nexport function xyGetNMaxY(data, numberMaxPoints) {\n    xyCheck(data);\n    if (data.x.length <= numberMaxPoints) {\n        return data;\n    }\n    else {\n        const newX = new Float64Array(numberMaxPoints);\n        const newY = new Float64Array(numberMaxPoints);\n        const floatY = Float64Array.from(data.y);\n        floatY.sort();\n        floatY.reverse();\n        const threshold = floatY[numberMaxPoints - 1];\n        let index = 0;\n        for (let i = 0; i < data.x.length; i++) {\n            if (data.y[i] >= threshold) {\n                newX[index] = data.x[i];\n                newY[index] = data.y[i];\n                index++;\n            }\n            if (index === numberMaxPoints) {\n                return { x: newX, y: newY };\n            }\n        }\n        return data;\n    }\n}\n//# sourceMappingURL=xyGetNMaxY.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - object of kind {x:[], y:[]}.\n * @returns data with x in ascending order (reversed in-place if descending).\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Generate a X / Y of the xyIntegral\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the cumulative integral values.\n */\nexport function xyIntegral(data, options = {}) {\n    const { reverse = false } = options;\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let xyIntegration = 0;\n    const currentxyIntegral = {\n        x: new Float64Array(toIndex - fromIndex + 1),\n        y: new Float64Array(toIndex - fromIndex + 1),\n    };\n    let index = 0;\n    if (reverse) {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[toIndex];\n        for (let i = toIndex; i > fromIndex; i--) {\n            xyIntegration += ((x[i] - x[i - 1]) * (y[i - 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i - 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n        currentxyIntegral.x.reverse();\n        currentxyIntegral.y.reverse();\n    }\n    else {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[fromIndex];\n        for (let i = fromIndex; i < toIndex; i++) {\n            xyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i + 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n    }\n    return currentxyIntegral;\n}\n//# sourceMappingURL=xyIntegral.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Calculate integration\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns integration value on the specified range.\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return 0;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyIntegration = 0;\n    for (let i = fromIndex; i < toIndex; i++) {\n        currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n    }\n    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Interpolate y values at target x positions using linear interpolation.\n * This is useful for upsampling or resampling data to specific x positions.\n * Both the input data and target x values must be sorted in ascending order.\n * Uses a two-pointer approach with O(n + m) complexity.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param xTarget - target x positions where y values should be interpolated.\n * @returns interpolated y values at target x positions.\n */\nexport function xyInterpolateLinear(data, xTarget) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x.length === 0) {\n        return new Float64Array(0);\n    }\n    const result = new Float64Array(xTarget.length);\n    let sparseIndex = 0;\n    for (let i = 0; i < xTarget.length; i++) {\n        const targetX = xTarget[i];\n        // Move sparse index forward while we can\n        while (sparseIndex < x.length - 1 && x[sparseIndex + 1] < targetX) {\n            sparseIndex++;\n        }\n        // Handle edge cases\n        if (sparseIndex === 0 && targetX <= x[0]) {\n            // Before first point\n            if (x.length === 1) {\n                result[i] = y[0];\n            }\n            else {\n                // Extrapolate using first two points\n                const t = (targetX - x[0]) / (x[1] - x[0]);\n                result[i] = y[0] * (1 - t) + y[1] * t;\n            }\n        }\n        else if (sparseIndex >= x.length - 1) {\n            // After last point\n            result[i] = y[x.length - 1];\n        }\n        else {\n            // Normal interpolation between two points\n            const leftIdx = sparseIndex;\n            const rightIdx = sparseIndex + 1;\n            const t = (targetX - x[leftIdx]) / (x[rightIdx] - x[leftIdx]);\n            result[i] = y[leftIdx] * (1 - t) + y[rightIdx] * t;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyInterpolateLinear.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @param data - array of DataXY.\n * @param options - options.\n * @returns weighted mean x value (center of mass).\n */\nexport function xyMassCenter(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let sumYs = 0;\n    let sumProducts = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sumProducts += x[i] * y[i];\n        sumYs += y[i];\n    }\n    if (sumYs === 0) {\n        throw new Error('Sum of Ys can not be zero.');\n    }\n    return sumProducts / sumYs;\n}\n//# sourceMappingURL=xyMassCenter.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * We will calculate a vector containing center of mass of DataXY as well as center of mass of both parts, etc.\n * This approach allows to efficiently represent spectra like XPS, NMR, etc. It should provide an extremely efficient\n * way to store and search similar spectra.\n * @deprecated A center of mass averages positions, so a split lands between the peaks instead of on them, and\n * every point is weighted by its own x value, which lets the noise of a long baseline drag the result.\n * Use `xyEqualIntegrationVector`, that splits the spectrum in parts of equal integration.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns array of centers of mass.\n */\nexport function xyMassCenterVector(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { depth = 5 } = options;\n    const { weightedIntegral, integral } = getWeightedIntegral(data);\n    const results = new Float64Array((1 << depth) - 1);\n    const endIndexes = new Int32Array((1 << depth) - 1);\n    endIndexes[0] = data.x.length - 1;\n    const beginIndexes = new Int32Array((1 << depth) - 1);\n    beginIndexes[0] = -1;\n    let index = 0;\n    for (let i = 0; i < depth; i++) {\n        for (let j = 0; j < 1 << i; j++) {\n            const currentBeginIndex = beginIndexes[index];\n            const currentEndIndex = endIndexes[index];\n            const currentIntegration = currentBeginIndex === -1\n                ? integral[currentEndIndex]\n                : integral[currentEndIndex] - integral[currentBeginIndex];\n            // we need to solve the issue of null integration (rather in simulated spectra).\n            let x = 0;\n            if (currentIntegration !== 0) {\n                x =\n                    currentBeginIndex === -1\n                        ? weightedIntegral[currentEndIndex] / currentIntegration\n                        : (weightedIntegral[currentEndIndex] -\n                            weightedIntegral[currentBeginIndex]) /\n                            currentIntegration;\n            }\n            else {\n                x = (data.x[currentEndIndex] + data.x[currentBeginIndex]) / 2;\n            }\n            results[index++] = x;\n            // we can now prepare the next level\n            if (i < depth - 1) {\n                const nextIndex = (1 << (i + 1)) + j * 2 - 1;\n                let middleIndex = xFindClosestIndex(data.x, x);\n                if (middleIndex === currentBeginIndex) {\n                    middleIndex++;\n                }\n                beginIndexes[nextIndex] = currentBeginIndex;\n                endIndexes[nextIndex] = middleIndex;\n                if (middleIndex === currentEndIndex) {\n                    middleIndex--;\n                }\n                beginIndexes[nextIndex + 1] = middleIndex;\n                endIndexes[nextIndex + 1] = currentEndIndex;\n            }\n        }\n    }\n    return results;\n}\nfunction getWeightedIntegral(data) {\n    const { x, y } = data;\n    const weightedIntegral = new Float64Array(x.length);\n    const integral = new Float64Array(x.length);\n    // the first point, no points before\n    const firstIntegration = (x[1] - x[0]) * y[0];\n    let totalIntegration = firstIntegration;\n    integral[0] = totalIntegration;\n    let totalWeightedIntegral = firstIntegration * x[0];\n    weightedIntegral[0] = totalWeightedIntegral;\n    for (let i = 1; i < x.length - 1; i++) {\n        const currentIntegration = ((x[i + 1] - x[i - 1]) * y[i]) / 2;\n        const currentX = x[i];\n        totalIntegration += currentIntegration;\n        integral[i] = totalIntegration;\n        totalWeightedIntegral += currentIntegration * currentX;\n        weightedIntegral[i] = totalWeightedIntegral;\n    }\n    // the last point, no points after\n    const lastIntegration = (x.at(-1) - x.at(-2)) * y.at(-1);\n    totalIntegration += lastIntegration;\n    integral[x.length - 1] = totalIntegration;\n    totalWeightedIntegral += lastIntegration * x.at(-1);\n    weightedIntegral[x.length - 1] = totalWeightedIntegral;\n    return { integral, weightedIntegral };\n}\n//# sourceMappingURL=xyMassCenterVector.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest maximum going up hill\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the x/y value.\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n            currentIndex++;\n        }\n        xyMaxY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMaxClosestYPoint.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyMaxMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const maxAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            maxAbscissa.x.push(x[index]);\n            maxAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            if (y[index] > maxAbscissa.y[size - 1]) {\n                maxAbscissa.x[size - 1] = x[index];\n                maxAbscissa.y[size - 1] = y[index];\n            }\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    merged.x = maxAbscissa.x.slice();\n    return merged;\n}\n//# sourceMappingURL=xyMaxMerge.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max value in a zone\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns max y on the specified range.\n */\nexport function xyMaxY(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyMaxY = y[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (y[i] > currentxyMaxY)\n            currentxyMaxY = y[i];\n    }\n    return currentxyMaxY;\n}\n//# sourceMappingURL=xyMaxY.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the max values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options with from and to properties.\n * @returns array of points.\n */\nexport function xyMaximaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] < y[i] && y[i + 1] < y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] < y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] < y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMaximaY.js.map","/**\n * Computes the weighted median of the x values, using the y values as weights.\n * This is the x value that splits the total weight (sum of y) into two equal halves.\n * If the cumulative weight lands exactly at 50%, the result is the average of the two surrounding x values.\n * @param data - x should be sorted in increasing order, y values are used as weights and should be non-negative.\n * @returns The weighted median x value, or NaN if the data is empty.\n */\nexport function xyMedian(data) {\n    const { x, y } = data;\n    let sumY = 0;\n    let cumSumY = 0;\n    let i;\n    if (x.length === 0) {\n        return Number.NaN;\n    }\n    if (x.length === 1) {\n        return x[0];\n    }\n    for (i = 0; i < y.length; i++) {\n        sumY += y[i];\n    }\n    for (i = 0; i < y.length; i++) {\n        cumSumY += y[i];\n        if (cumSumY > sumY / 2) {\n            return x[i];\n        }\n        else if (cumSumY === sumY / 2) {\n            if (i === x.length - 1)\n                return x[i];\n            return 0.5 * (x[i] + x[i + 1]);\n        }\n    }\n    return Number.NaN;\n}\n//# sourceMappingURL=xyMedian.js.map","import { xMedian } from \"../x/xMedian.js\";\n/**\n * Computes the median of Y values in a sliding window around each point.\n * @param data - object with x and y arrays of the same length.\n * @param options - options for the median computation.\n * @returns A new DataXY with the same x values and smoothed y values.\n */\nexport function xyMedianY(data, options = {}) {\n    const { windowSize = 5 } = options;\n    const { x, y } = data;\n    const halfWindow = Math.floor(windowSize / 2);\n    const result = new Float64Array(y.length);\n    for (let i = 0; i < y.length; i++) {\n        const fromIndex = Math.max(0, i - halfWindow);\n        const toIndex = Math.min(y.length, i + halfWindow + 1);\n        result[i] = xMedian(y, { exact: false, fromIndex, toIndex });\n    }\n    return { x, y: result };\n}\n//# sourceMappingURL=xyMedianY.js.map","import { xFindClosestIndex } from \"../x/xFindClosestIndex.js\";\nimport { xMedian } from \"../x/xMedian.js\";\n/**\n * Computes the median of Y values in a sliding window around each target x position.\n * For each value in xValues, the closest index in data.x is found and the median\n * of the surrounding y values (within the window) is returned.\n * @param data - object with x (sorted in increasing order) and y arrays of the same length.\n * @param xValues - array of x positions at which to compute the median.\n * @param options - options for the median computation.\n * @returns A new DataXY with x = xValues and y = computed medians.\n */\nexport function xyMedianYAtXs(data, xValues, options = {}) {\n    const { windowSize = 5 } = options;\n    const { x, y } = data;\n    const halfWindow = Math.floor(windowSize / 2);\n    const result = new Float64Array(xValues.length);\n    for (let i = 0; i < xValues.length; i++) {\n        const centerIndex = xFindClosestIndex(x, xValues[i]);\n        const fromIndex = Math.max(0, centerIndex - halfWindow);\n        const toIndex = Math.min(y.length, centerIndex + halfWindow + 1);\n        result[i] = xMedian(y, { exact: false, fromIndex, toIndex });\n    }\n    return { x: xValues, y: result };\n}\n//# sourceMappingURL=xyMedianYAtXs.js.map","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param data - object containing 2 properties x and y\n * @param centroids - centroids\n * @param options - options\n * @returns merged points\n */\nexport function xyMergeByCentroids(data, centroids, options = {}) {\n    const { window = 0.01 } = options;\n    const mergedPoints = {\n        x: Float64Array.from(centroids),\n        y: new Float64Array(centroids.length).fill(0),\n    };\n    let originalIndex = 0;\n    let mergedIndex = 0;\n    while (originalIndex < data.x.length && mergedIndex < centroids.length) {\n        const diff = data.x[originalIndex] - centroids[mergedIndex];\n        if (Math.abs(diff) < window) {\n            mergedPoints.y[mergedIndex] += data.y[originalIndex++];\n        }\n        else if (diff < 0) {\n            originalIndex++;\n        }\n        else {\n            mergedIndex++;\n        }\n    }\n    return mergedPoints;\n}\n//# sourceMappingURL=xyMergeByCentroids.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the x/y value.\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n            currentIndex++;\n        }\n        minY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMinClosestYPoint.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the min y value in a range and return a {x,y} point\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n */\nexport function xyMinYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return { x: x[0], y: y[0], index: 0 };\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = {\n        x: x[fromIndex],\n        y: y[fromIndex],\n        index: fromIndex,\n    };\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (y[i] < current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMinYPoint.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the min values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options with from and to properties.\n * @returns array of points.\n */\nexport function xyMinimaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] > y[i] && y[i + 1] > y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] > y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] > y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMinimaY.js.map","import { xyObjectMaxXPoint } from \"./xyObjectMaxXPoint.js\";\nimport { xyObjectMinXPoint } from \"./xyObjectMinXPoint.js\";\n/**\n * Filter the array by taking the higher points (max y value) and only.\n * Keep one per slot. There are 2 different slots, the smallest one will have the\n * new property `close` to true\n * @param points - array of all the points\n * @param options - options.\n * @returns copy of points with 'close' property.\n */\nexport function xyObjectBestPoints(points, options = {}) {\n    const { from = xyObjectMinXPoint(points).x, to = xyObjectMaxXPoint(points).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, } = options;\n    const slot = (to - from) / numberSlots;\n    const closeSlot = (to - from) / numberCloseSlots;\n    const selected = points\n        .filter((point) => point.x >= from && point.x <= to)\n        .map((point) => {\n        return {\n            point,\n        };\n    });\n    selected.sort((a, b) => {\n        return b.point.y - a.point.y;\n    });\n    const toReturn = [];\n    if (selected.length === 0)\n        return [];\n    const minY = selected[0].point.y * threshold;\n    peakLoop: for (const item of selected) {\n        if (item.point.y < minY) {\n            break;\n        }\n        let close = false;\n        for (const existing of toReturn) {\n            if (Math.abs(existing.x - item.point.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.point.x) < slot) {\n                close = true;\n            }\n        }\n        const newPeak = { ...item.point, close };\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    toReturn.sort((a, b) => a.x - b.x);\n    return toReturn;\n}\n//# sourceMappingURL=xyObjectBestPoints.js.map","/**\n * Joins points whose x values are within xError of each other using weighted averaging.\n * @param points - array of growing points {x,y}.\n * @param options - options.\n */\nexport function xyObjectJoinX(points, options = {}) {\n    const { xError = Number.EPSILON } = options;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.MIN_SAFE_INTEGER,\n        y: 0,\n    };\n    for (const point of points) {\n        if (point.x - current.x <= xError) {\n            // weighted sum\n            if (current.y !== 0 || point.y !== 0) {\n                current.x =\n                    (point.y / (current.y + point.y)) * (point.x - current.x) + current.x;\n                current.y += point.y;\n            }\n        }\n        else {\n            current = {\n                x: point.x,\n                y: point.y,\n            };\n            result.push(current);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectJoinX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max y value and return a {x,y,index} point\n * @param points - object that contains property x (an ordered increasing array) and y (an array).\n * @returns max point.\n */\nexport function xyObjectMaxYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y > current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxYPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Returns all min and max values of an array of points.\n * @param points - array of points {x,y}.\n * @returns object with the 4 extrema.\n */\nexport function xyObjectMinMaxValues(points) {\n    xyObjectCheck(points, { minLength: 1 });\n    let minX = points[0].x;\n    let maxX = minX;\n    let minY = points[0].y;\n    let maxY = minY;\n    for (const point of points) {\n        if (point.x < minX)\n            minX = point.x;\n        if (point.x > maxX)\n            maxX = point.x;\n        if (point.y < minY)\n            minY = point.y;\n        if (point.y > maxY)\n            maxY = point.y;\n    }\n    return { minX, maxX, minY, maxY };\n}\n//# sourceMappingURL=xyObjectMinMaxValues.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min y value and return a {x,y,index} point\n * @param points - object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyObjectMinYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y < current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinYPoint.js.map","import { xNormed } from \"../x/xNormed.js\";\n/**\n * Resize the Y values of the points to be normalized.\n * @param points - array of points {x,y}.\n * @param options - options.\n * @returns array of points {x,y} with normalized Y values.\n */\nexport function xyObjectNormedY(points, options) {\n    points = structuredClone(points);\n    const ys = points.map((point) => point.y);\n    const normalizedYs = xNormed(ys, options);\n    for (let i = 0; i < points.length; i++) {\n        points[i].y = normalizedYs[i];\n    }\n    return points;\n}\n//# sourceMappingURL=xyObjectNormedY.js.map","/**\n * Slots growing points into fixed-width buckets and sums their y values.\n * @param points - array of growing points {x,y}.\n * @param options - options.\n */\nexport function xyObjectSlotX(points, options = {}) {\n    const { slotWidth = 1 } = options;\n    const halfSlot = slotWidth / 2;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.NEGATIVE_INFINITY,\n        y: 0,\n    };\n    for (const point of points) {\n        const slot = point.x - ((point.x + halfSlot) % slotWidth) + halfSlot;\n        if (Math.abs(current.x - slot) > Number.EPSILON) {\n            current = {\n                x: slot,\n                y: 0,\n            };\n            result.push(current);\n        }\n        current.y += point.y;\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectSlotX.js.map","/**\n * Sorts an array of points in-place.\n * @param points - array of points {x,y}.\n * @returns sorted array of points {x,y}.\n */\nexport function xyObjectSortX(points) {\n    points.sort((a, b) => a.x - b.x);\n    return points;\n}\n//# sourceMappingURL=xyObjectSortX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Calculate the sum of Y values.\n * @param points - object that contains property x and y (an array).\n */\nexport function xyObjectSumY(points = []) {\n    xyObjectCheck(points);\n    let sum = 0;\n    for (const point of points) {\n        sum += point.y;\n    }\n    return sum;\n}\n//# sourceMappingURL=xyObjectSumY.js.map","/**\n * Converts an array of {x,y} point objects to a DataXY object.\n * @param points - array of {x,y} point objects.\n */\nexport function xyObjectToXY(points) {\n    return {\n        x: points.map((entry) => entry.x),\n        y: points.map((entry) => entry.y),\n    };\n}\n//# sourceMappingURL=xyObjectToXY.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns an information about a signal.\n *\n *\n * We expect ordered data and equidistant X axis\n * You can use the method helper if required:\n * ML.ArrayPoints.uniqueX\n * ML.ArrayPoints.sortX\n * ML.ArrayPoints.equallySpaced\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns information about signal.\n */\nexport function xyPeakInfo(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x === undefined || y === undefined || x.length < 3) {\n        return;\n    }\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined && target !== undefined) {\n        targetIndex = xFindClosestIndex(x, target);\n    }\n    if (targetIndex === undefined) {\n        throw new Error('must specify target or targetIndex');\n    }\n    let i = targetIndex;\n    let currentDiff = y[i] - y[i + 1];\n    const multiplier = currentDiff < 0 ? -1 : 1;\n    currentDiff *= multiplier;\n    while (i < x.length - 1) {\n        i++;\n        const newDiff = (y[i] - y[i + 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const after = { x: x[i], y: y[i] };\n    i = targetIndex;\n    currentDiff = (y[i] - y[i - 1]) * multiplier;\n    while (i > 1) {\n        i--;\n        const newDiff = (y[i] - y[i - 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const before = { x: x[i], y: y[i] };\n    return {\n        inflectionBefore: before,\n        inflectionAfter: after,\n        extrema: { x: x[targetIndex], y: y[targetIndex] },\n        inflectionMiddle: {\n            x: (before.x + after.x) / 2,\n            y: (before.y + after.y) / 2,\n        },\n        width: Math.abs(before.x - after.x),\n    };\n}\n//# sourceMappingURL=xyPeakInfo.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the x/y value.\n */\nexport function xyRealMaxYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] > 0 &&\n        y[targetIndex + 1] > 0 &&\n        y[targetIndex] >= y[targetIndex - 1] &&\n        y[targetIndex] >= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(y[targetIndex - 1]);\n        const beta = 20 * Math.log10(y[targetIndex]);\n        const gamma = 20 * Math.log10(y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMaxYPoint.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the real minimum y point using parabolic interpolation when possible.\n * @param data - data.\n * @param options - options.\n */\nexport function xyRealMinYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] < 0 &&\n        y[targetIndex + 1] < 0 &&\n        y[targetIndex] <= y[targetIndex - 1] &&\n        y[targetIndex] <= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(-y[targetIndex - 1]);\n        const beta = 20 * Math.log10(-y[targetIndex]);\n        const gamma = 20 * Math.log10(-y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMinYPoint.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { getInternalZones, notEnoughPoints } from \"./xyReduce.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. This algorithm is designed for non-continuous data.\n * We are expecting peaks to be only positive and the x values to be ordered.\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns object with x and y arrays.\n */\nexport function xyReduceNonContinuous(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length < 2) {\n        // todo we should check that the single point is really in the range and the zones\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), maxApproximateNbPoints = 4001 } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    // @ts-expect-error -- x.at(-1) returns number | undefined but array is guaranteed non-empty here\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= maxApproximateNbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    // @ts-expect-error -- x.at(-1) returns number | undefined but array is guaranteed non-empty here\n    const deltaX = (to - from) / (maxApproximateNbPoints - 1);\n    const newX = [];\n    const newY = [];\n    for (const internalZone of internalZones) {\n        const maxNbPoints = Math.ceil((internalZone.to - internalZone.from) / deltaX) + 1;\n        const fromIndex = internalZone.fromIndex;\n        const toIndex = internalZone.toIndex;\n        if (toIndex - fromIndex + 1 <= maxNbPoints) {\n            // we keep all the points\n            for (let i = fromIndex; i <= toIndex; i++) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n        else {\n            // we need to reduce the number of points\n            let currentX = x[fromIndex];\n            let currentY = y[fromIndex];\n            let lastX = currentX + deltaX;\n            newX.push(currentX);\n            newY.push(currentY);\n            for (let i = fromIndex; i <= toIndex; i++) {\n                if (x[i] > lastX) {\n                    // next slot\n                    currentX = x[i];\n                    currentY = y[i];\n                    newX.push(currentX);\n                    newY.push(currentY);\n                    lastX += deltaX;\n                }\n                if (y[i] > currentY) {\n                    currentY = y[i];\n                    newY[newY.length - 1] = currentY;\n                }\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyReduceNonContinuous.js.map","import { xRolling, xRollingAverage } from \"../x/index.js\";\n/**\n * This function calculates a rolling average.\n * This methods will recalculate the x values by using xRollingAverage\n * @param data - array of points {x,y}\n * @param fct - callback function that from an array returns a value.\n * @param options - options\n */\nexport function xyRolling(data, fct, options = {}) {\n    let { x, y } = data;\n    y = xRolling(y, fct, options);\n    if (x.length !== y.length) {\n        x = xRollingAverage(x, options);\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyRolling.js.map","/**\n *\n * Dong, Jian, et al. \"An algorithm of filtering noises in multi-beam data based on rolling circle transform.\" 2019 2nd International Conference on Sustainable Energy, Environment and Information Engineering (SEEIE 2019). Atlantis Press, 2019.\n * DONG Jian, PENG Rencan, ZHANG Lihua, WANG Zhijun. An Algorithm of Filtering Noises in Multi-beam Data Based on Rolling Circle Transform[J]. Geomatics and Information Science of Wuhan University, 2016, 41(1): 86-92. DOI: 10.13203/j.whugis20130757\n * @param data - data with x and y arrays.\n * @param options - options.\n */\nimport { xFindClosestIndex } from \"../x/xFindClosestIndex.js\";\nexport function xyRollingCircleTransform(data, options = {}) {\n    const { x } = data;\n    let { y } = data;\n    const { radius = 1, position = 'top', shifted = true } = options;\n    if (position !== 'top' && position !== 'bottom') {\n        throw new Error(`Invalid position: ${String(position)}`);\n    }\n    if (position === 'bottom') {\n        y = y.slice();\n        for (let i = 0; i < y.length; i++) {\n            y[i] = -y[i];\n        }\n    }\n    if (x.length === 0 || y.length === 0) {\n        return new Float64Array();\n    }\n    const yCenters = new Float64Array(x.length);\n    for (let i = 0; i < x.length; i++) {\n        const x0 = x[i]; // x center of the current circle\n        const fromX = xFindClosestIndex(x, x0 - radius);\n        const toX = xFindClosestIndex(x, x0 + radius);\n        // for the circle radius we need to evaluate the minimal vertical shift\n        const y0 = y[i] + radius; // y center of the circle on top of peak\n        let yShift = y0; // this is the minimal possible shift\n        for (let j = fromX; j <= toX; j++) {\n            const currentX = x[j];\n            if (currentX < x0 - radius || currentX > x0 + radius) {\n                continue;\n            }\n            const currentMinYShift = y[j] + Math.sqrt(radius ** 2 - (currentX - x0) ** 2);\n            if (currentMinYShift > yShift) {\n                yShift = currentMinYShift;\n            }\n        }\n        yCenters[i] = yShift;\n    }\n    if (!shifted) {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] -= radius;\n        }\n    }\n    if (position === 'bottom') {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] = -yCenters[i];\n        }\n    }\n    return yCenters;\n}\n//# sourceMappingURL=xyRollingCircleTransform.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Set a value (default 0) to specific zones.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns data with y values set to the given value in the specified zones.\n */\nexport function xySetYValue(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { value = 0 } = options;\n    let { zones } = options;\n    if (!Array.isArray(zones) || zones.length === 0) {\n        return data;\n    }\n    zones = zonesNormalize(zones);\n    const newX = x.slice();\n    const newY = y.slice();\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newY[i] = value;\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xySetYValue.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Convert a DataXY object to a flat interleaved array [x, y, x, y, ...].\n * @param data - DataXY object with x and y arrays.\n * @returns flat array alternating x and y values.\n */\nexport function xyToInterleaved(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const result = new Float64Array(x.length * 2);\n    for (let i = 0; i < x.length; i++) {\n        result[2 * i] = x[i];\n        result[2 * i + 1] = y[i];\n    }\n    return result;\n}\n//# sourceMappingURL=xyToInterleaved.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Convert a DataXY to an array of array containing x,y.\n * @param data - array of points {x,y}\n */\nexport function xyToXYArray(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push([x[i], y[i]]);\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYArray.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Converts a DataXY object to an array of {x,y} point objects.\n * @param data - array of points {x,y}.\n */\nexport function xyToXYObject(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push({ x: x[i], y: y[i] });\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYObject.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyWeightedMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const weightedAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            weightedAbscissa.x.push(x[index] * y[index]);\n            weightedAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            weightedAbscissa.x[size - 1] += x[index] * y[index];\n            weightedAbscissa.y[size - 1] += y[index];\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    for (let i = 0; i < merged.x.length; i++) {\n        merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n    }\n    return merged;\n}\n//# sourceMappingURL=xyWeightedMerge.js.map","import { createFromToArray } from \"../utils/createFromToArray.js\";\nimport { zonesNormalize } from \"./zonesNormalize.js\";\nimport { zonesWithPoints } from \"./zonesWithPoints.js\";\n/**\n * Function that returns a Number array of equally spaced numberOfPoints x values\n * distributed across the specified zones.\n * @param zones - array of from/to zones where x values should be distributed\n * @param numberOfPoints - total number of points to distribute across all zones\n * @param options - options\n * @returns array of equally spaced x values distributed across zones\n */\nexport function zonesToXEquallySpaced(zones, numberOfPoints, options = {}) {\n    if (!zones || zones.length === 0) {\n        throw new RangeError('zones array must not be empty');\n    }\n    if (numberOfPoints < 1) {\n        throw new RangeError(\"'numberOfPoints' must be greater than 0\");\n    }\n    const from = options.from ?? zones[0].from;\n    //@ts-expect-error zones is tested before\n    const to = options.to ?? zones.at(-1).to;\n    if (from > to) {\n        throw new RangeError('from should be less than or equal to to');\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions: [] });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneXValues = Array.from(createFromToArray({\n            from: zone.from,\n            to: zone.to,\n            length: zone.numberOfPoints,\n            includeFrom: false,\n            includeTo: false,\n        }));\n        xResult = xResult.concat(zoneXValues);\n    }\n    return new Float64Array(xResult);\n}\n//# sourceMappingURL=zonesToXEquallySpaced.js.map","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","import { ensureString } from 'ensure-string';\nimport { xIsMonotonic, xMaxValue, xyUniqueX } from 'ml-spectra-processing';\n/**\n * General internal parsing function\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns parsed text file with column information\n */\nexport function parse(text, options = {}) {\n    const { rescale = false, uniqueX = false, bestGuess = false, \n    //@ts-expect-error old library used this property and we want to throw an error so that people are forced to migrate\n    keepInfo, } = options;\n    let { xColumn = 0, yColumn = 1, numberColumns = Number.MAX_SAFE_INTEGER, maxNumberColumns = Number.MAX_SAFE_INTEGER, minNumberColumns = 2, } = options;\n    if (keepInfo !== undefined) {\n        throw new Error('keepInfo has been deprecated, please use the new method parseXYAndKeepInfo');\n    }\n    text = ensureString(text);\n    maxNumberColumns = Math.max(maxNumberColumns, xColumn + 1, yColumn + 1);\n    minNumberColumns = Math.max(xColumn + 1, yColumn + 1, minNumberColumns);\n    const lines = text.split(/[\\n\\r]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    for (let line of lines) {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/\\d+/.test(line) && /^[\\d\\t +,.;Ee-]+$/.test(line)) {\n            let fields = line.split(/,[\\t ;]+|[\\t ;]+/);\n            if (fields.length === 1) {\n                fields = line.split(/[\\t ,;]+/);\n            }\n            if (fields &&\n                fields.length >= minNumberColumns && // we filter lines that have not enough or too many columns\n                fields.length <= maxNumberColumns) {\n                matrix.push(fields.map((value) => Number.parseFloat(value.replace(',', '.'))));\n                position++;\n            }\n        }\n        else if (line) {\n            info.push({ position, value: line });\n        }\n    }\n    if (bestGuess) {\n        if (matrix[0]?.length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a sequential number?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                const currentFirst = matrix[i][0];\n                const nextFirst = matrix[i + 1][0];\n                if (Math.abs(currentFirst - nextFirst) !== 1) {\n                    skipFirstColumn = false;\n                }\n            }\n            if (skipFirstColumn) {\n                xColumn = 1;\n                yColumn = 2;\n            }\n        }\n        if (matrix[0] && matrix[0].length > 3) {\n            const xs = [];\n            for (const row of matrix) {\n                for (let i = xColumn; i < row.length; i += 2) {\n                    xs.push(row[i]);\n                }\n            }\n            if (xIsMonotonic(xs)) {\n                numberColumns = 2;\n            }\n        }\n    }\n    if (numberColumns) {\n        const newMatrix = [];\n        for (const row of matrix) {\n            for (let i = 0; i < row.length; i += numberColumns) {\n                newMatrix.push(row.slice(i, i + numberColumns));\n            }\n        }\n        matrix = newMatrix;\n    }\n    let result = {\n        x: matrix.map((row) => row[xColumn]),\n        y: matrix.map((row) => row[yColumn]),\n    };\n    if (uniqueX) {\n        result = xyUniqueX(result, { algorithm: 'sum' });\n    }\n    if (rescale) {\n        const maxY = xMaxValue(result.y);\n        const yValues = result.y;\n        for (let i = 0; i < yValues.length; i++) {\n            yValues[i] = yValues[i] / maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","import { parse } from \"./parse.js\";\nexport * from \"./ParseXYOptions.js\";\n/**\n * Parse a text-file and convert it to an object {x:[], y:[]}\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data\n */\nexport function parseXY(text, options = {}) {\n    return parse(text, options).data;\n}\n/**\n * Parse a text-file and returns the parsed data and information about the columns\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data with information about the columns\n */\nexport function parseXYAndKeepInfo(text, options = {}) {\n    return parse(text, options);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBestPeaks = getBestPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array by taking the higher peaks and only\n * keep one per slot.\n * There are 2 different slots, the smallest one will have the\n * extra annotation `close` to true\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.minValue=Number.NEGATIVE_INFINITY] - min Y value of the window to consider\n * @param {number} [options.maxValue=Number.POSITIVE_INFINITY] - max Y value of the window to consider\n * @param {number} [options.searchMonoisotopicRatio=0] - search previous peaks with at least ratio height\n * @param {number} [options.limit=20] - max number of peaks\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.numberSlots=10] - define the number of slots and indirectly the slot width\n * @param {number} [options.numberCloseSlots=50]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getBestPeaks(peaks, options = {}) {\n    const { searchMonoisotopicRatio = 0, from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, minValue = Number.NEGATIVE_INFINITY, maxValue = Number.POSITIVE_INFINITY, } = options;\n    let slot = (to - from) / numberSlots;\n    let closeSlot = (to - from) / numberCloseSlots;\n    let selected = peaks\n        .filter((peak) => peak.x >= from && peak.x <= to)\n        .filter((peak) => peak.y >= minValue && peak.y <= maxValue)\n        .map((peak) => {\n        return {\n            peak,\n            monoisotopic: false,\n        };\n    });\n    if (searchMonoisotopicRatio) {\n        selected = selected.toSorted((a, b) => b.peak.x - a.peak.x);\n        for (let i = 0; i < selected.length; i++) {\n            let item = selected[i];\n            for (let j = i + 1; j < selected.length; j++) {\n                let nextItem = selected[j];\n                if (item.peak.x - nextItem.peak.x < 0.09)\n                    continue;\n                if (item.peak.x - nextItem.peak.x > 1.1)\n                    break;\n                if (nextItem.peak.y > item.peak.y * searchMonoisotopicRatio) {\n                    item.monoisotopic = false;\n                    nextItem.monoisotopic = true;\n                    break;\n                }\n            }\n        }\n    }\n    selected = selected.toSorted((a, b) => {\n        if (a.monoisotopic && !b.monoisotopic)\n            return -1;\n        if (b.monoisotopic && !a.monoisotopic)\n            return 1;\n        return b.peak.y - a.peak.y;\n    });\n    let toReturn = [];\n    if (selected.length === 0)\n        return [];\n    let minY = selected[0].peak.y * threshold;\n    peakLoop: for (let item of selected) {\n        if (item.peak.y < minY) {\n            if (item.monoisotopic) {\n                continue;\n            }\n            else {\n                break;\n            }\n        }\n        let close = false;\n        for (let existing of toReturn) {\n            if (Math.abs(existing.x - item.peak.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.peak.x) < slot) {\n                close = true;\n            }\n        }\n        let newPeak = structuredClone(item.peak);\n        newPeak.close = close;\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    return toReturn.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getBestPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getChargeClusters = getChargeClusters;\nexports.getPeaksWithClusterCharge = getPeaksWithClusterCharge;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst NEUTRON_MASS = 1;\n/**\n * Group the peaks into isotopologue clusters and give a charge to each cluster.\n *\n * The charge of a single peak can not be evaluated: an isotopologue in the\n * middle of an envelope looks the same whatever the charge, and the last one of\n * an envelope has nothing after it. What carries the charge is the series: a\n * run of peaks separated by NEUTRON_MASS / charge. So the series are searched\n * first, and the charge of a series is given to all the peaks it holds.\n *\n * A series of charge 1 is always a subseries of a series of charge 2, which is\n * one of a series of charge 4: the clusters are therefore assigned from the one\n * explaining the most intensity to the one explaining the least, and a peak\n * only takes the charge of the first cluster that claims it.\n * @param {Array<{x: number, y: number}>} peaks - sorted by mass\n * @param {object} [options={}]\n * @param {number} [options.minCharge=1]\n * @param {number} [options.maxCharge=10]\n * @param {number} [options.precision=20] - tolerance on the position of an\n * isotopologue, in ppm. It is never allowed to reach half of the distance\n * between two isotopologues, otherwise a series could jump from one to another.\n * @param {number} [options.minLength=3] - two peaks that happen to be at the\n * right distance are common, three in a row much less\n * @returns {Array<{charge: number, peaks: Array}>} the clusters, from the one\n * holding the most intensity to the one holding the least\n */\nfunction getChargeClusters(peaks, options = {}) {\n    const clusters = buildClusters(peaks, options);\n    const result = [];\n    for (const cluster of clusters) {\n        const clusterPeaks = [];\n        for (let i = 0; i < cluster.indexes.length; i++) {\n            clusterPeaks.push(peaks[cluster.indexes[i]]);\n        }\n        result.push({ charge: cluster.charge, peaks: clusterPeaks });\n    }\n    return result;\n}\n/**\n * The clusters as the two functions above need them: the position of the peaks\n * rather than the peaks, and the intensity they hold to be able to sort them.\n * @param {Array<{x: number, y: number}>} peaks\n * @param {object} [options={}]\n * @returns {Array<{charge: number, indexes: number[], intensity: number}>}\n */\nfunction buildClusters(peaks, options = {}) {\n    const { minCharge = 1, maxCharge = 10, precision = 20, minLength = 3, } = options;\n    const nbPeaks = peaks.length;\n    if (nbPeaks < minLength)\n        return [];\n    const masses = new Float64Array(nbPeaks);\n    for (let i = 0; i < nbPeaks; i++)\n        masses[i] = peaks[i].x;\n    // the charge is evaluated on its magnitude: a negative range describes the\n    // same isotopologue distances as the positive one\n    const first = Math.abs(Math.round(minCharge));\n    const last = Math.abs(Math.round(maxCharge));\n    const from = Math.max(1, Math.min(first, last));\n    const to = Math.max(1, Math.max(first, last));\n    // a series is grown from the most intense peak first: an envelope must claim\n    // its own isotopologues before a weak neighbour builds a series out of them\n    const byIntensity = [];\n    for (let i = 0; i < nbPeaks; i++)\n        byIntensity.push(i);\n    const sorted = byIntensity.toSorted((a, b) => peaks[b].y - peaks[a].y);\n    const clusters = [];\n    const claimed = new Uint8Array(nbPeaks);\n    for (let charge = from; charge <= to; charge++) {\n        const spacing = NEUTRON_MASS / charge;\n        claimed.fill(0);\n        for (const start of sorted) {\n            if (claimed[start])\n                continue;\n            // the most intense peak of an envelope is rarely its first isotopologue,\n            // so the series grows on both sides of it\n            const before = [];\n            let expected = masses[start] - spacing;\n            let previousIndex = start;\n            let next = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, expected);\n            while (next < previousIndex) {\n                // that peak already belongs to another series of the same charge\n                if (claimed[next])\n                    break;\n                if (!isOnPosition(masses, next, expected, spacing, charge, precision)) {\n                    break;\n                }\n                before.push(next);\n                claimed[next] = 1;\n                previousIndex = next;\n                expected = masses[next] - spacing;\n                next = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, expected);\n            }\n            before.reverse();\n            const series = before;\n            series.push(start);\n            claimed[start] = 1;\n            expected = masses[start] + spacing;\n            previousIndex = start;\n            next = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, expected);\n            while (next > previousIndex) {\n                if (claimed[next])\n                    break;\n                if (!isOnPosition(masses, next, expected, spacing, charge, precision)) {\n                    break;\n                }\n                series.push(next);\n                claimed[next] = 1;\n                previousIndex = next;\n                expected = masses[next] + spacing;\n                next = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, expected);\n            }\n            if (series.length >= minLength) {\n                let intensity = 0;\n                for (let i = 0; i < series.length; i++)\n                    intensity += peaks[series[i]].y;\n                clusters.push({ charge, indexes: series, intensity });\n            }\n        }\n    }\n    clusters.sort((a, b) => b.intensity - a.intensity);\n    return clusters;\n}\n/**\n * Give to each peak the charge of the cluster that explains it.\n * @param {Array<{x: number, y: number}>} peaks - sorted by mass\n * @param {object} [options={}] - same as `getChargeClusters`\n * @returns {Array} copy of the peaks, with a `charge` when one was found\n */\nfunction getPeaksWithClusterCharge(peaks, options = {}) {\n    const clusters = buildClusters(peaks, options);\n    const charges = new Int8Array(peaks.length);\n    for (const cluster of clusters) {\n        const { indexes, charge } = cluster;\n        // a cluster whose peaks are already explained by a more intense one brings\n        // nothing: it is the same series read with a lower charge\n        let free = 0;\n        for (let i = 0; i < indexes.length; i++) {\n            if (charges[indexes[i]] === 0)\n                free++;\n        }\n        if (free < indexes.length)\n            continue;\n        for (let i = 0; i < indexes.length; i++) {\n            charges[indexes[i]] = charge;\n        }\n    }\n    const result = [];\n    for (let i = 0; i < peaks.length; i++) {\n        result.push(charges[i] === 0 ? { ...peaks[i] } : { ...peaks[i], charge: charges[i] });\n    }\n    return result;\n}\n/**\n * Is the peak at `index` where the next isotopologue is expected?\n *\n * The isotopologues of the charges `z` and `z + 1` are only `spacing / (z + 1)`\n * apart, and that distance shrinks fast: 0.5 Da between the charges 1 and 2,\n * but 0.024 Da between 6 and 7. A tolerance that reaches it would let the same\n * peaks be read with either charge, so it is capped well under.\n * @param {Float64Array} masses\n * @param {number} index\n * @param {number} expected\n * @param {number} spacing\n * @param {number} charge\n * @param {number} precision - in ppm\n * @returns {boolean}\n */\nfunction isOnPosition(masses, index, expected, spacing, charge, precision) {\n    const tolerance = Math.min(precision * 1e-6 * masses[index], (0.4 * spacing) / (charge + 1));\n    return Math.abs(masses[index] - expected) <= tolerance;\n}\n//# sourceMappingURL=getChargeClusters.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopes = void 0;\nexports.elementsAndIsotopes = [\n    {\n        number: 1,\n        isotopes: [\n            { nominal: 1, mass: 1.00782503223, abundance: 0.999885 },\n            { nominal: 2, mass: 2.01410177812, abundance: 0.000115 },\n            { nominal: 3, mass: 3.0160492779 },\n            { nominal: 4, mass: 4.02643 },\n            { nominal: 5, mass: 5.035311 },\n            { nominal: 6, mass: 6.04496 },\n            { nominal: 7, mass: 7.0527 },\n        ],\n        symbol: 'H',\n        mass: 1.0079407540557772,\n        name: 'Hydrogen',\n        monoisotopicMass: 1.00782503223,\n    },\n    {\n        number: 2,\n        isotopes: [\n            { nominal: 3, mass: 3.0160293201, abundance: 0.00000134 },\n            { nominal: 4, mass: 4.00260325413, abundance: 0.99999866 },\n            { nominal: 5, mass: 5.012057 },\n            { nominal: 6, mass: 6.018885891 },\n            { nominal: 7, mass: 7.0279907 },\n            { nominal: 8, mass: 8.03393439 },\n            { nominal: 9, mass: 9.043946 },\n            { nominal: 10, mass: 10.05279 },\n        ],\n        symbol: 'He',\n        mass: 4.002601932120929,\n        name: 'Helium',\n        monoisotopicMass: 4.00260325413,\n    },\n    {\n        number: 3,\n        isotopes: [\n            { nominal: 3, mass: 3.0308 },\n            { nominal: 4, mass: 4.02719 },\n            { nominal: 5, mass: 5.012538 },\n            { nominal: 6, mass: 6.0151228874, abundance: 0.0759 },\n            { nominal: 7, mass: 7.0160034366, abundance: 0.9241 },\n            { nominal: 8, mass: 8.022486246 },\n            { nominal: 9, mass: 9.02679019 },\n            { nominal: 10, mass: 10.035483 },\n            { nominal: 11, mass: 11.04372358 },\n            { nominal: 12, mass: 12.052517 },\n            { nominal: 13, mass: 13.06263 },\n        ],\n        symbol: 'Li',\n        mass: 6.94003660291572,\n        name: 'Lithium',\n        monoisotopicMass: 7.0160034366,\n    },\n    {\n        number: 4,\n        isotopes: [\n            { nominal: 5, mass: 5.0399 },\n            { nominal: 6, mass: 6.0197264 },\n            { nominal: 7, mass: 7.016928717 },\n            { nominal: 8, mass: 8.005305102 },\n            { nominal: 9, mass: 9.012183065, abundance: 1 },\n            { nominal: 10, mass: 10.013534695 },\n            { nominal: 11, mass: 11.02166108 },\n            { nominal: 12, mass: 12.0269221 },\n            { nominal: 13, mass: 13.036135 },\n            { nominal: 14, mass: 14.04289 },\n            { nominal: 15, mass: 15.05342 },\n            { nominal: 16, mass: 16.06167 },\n        ],\n        symbol: 'Be',\n        mass: 9.012183065,\n        name: 'Beryllium',\n        monoisotopicMass: 9.012183065,\n    },\n    {\n        number: 5,\n        isotopes: [\n            { nominal: 6, mass: 6.0508 },\n            { nominal: 7, mass: 7.029712 },\n            { nominal: 8, mass: 8.0246073 },\n            { nominal: 9, mass: 9.01332965 },\n            { nominal: 10, mass: 10.01293695, abundance: 0.199 },\n            { nominal: 11, mass: 11.00930536, abundance: 0.801 },\n            { nominal: 12, mass: 12.0143527 },\n            { nominal: 13, mass: 13.0177802 },\n            { nominal: 14, mass: 14.025404 },\n            { nominal: 15, mass: 15.031088 },\n            { nominal: 16, mass: 16.039842 },\n            { nominal: 17, mass: 17.04699 },\n            { nominal: 18, mass: 18.05566 },\n            { nominal: 19, mass: 19.0631 },\n            { nominal: 20, mass: 20.07207 },\n            { nominal: 21, mass: 21.08129 },\n        ],\n        symbol: 'B',\n        mass: 10.811028046410001,\n        name: 'Boron',\n        monoisotopicMass: 11.00930536,\n    },\n    {\n        number: 6,\n        isotopes: [\n            { nominal: 8, mass: 8.037643 },\n            { nominal: 9, mass: 9.0310372 },\n            { nominal: 10, mass: 10.01685331 },\n            { nominal: 11, mass: 11.0114336 },\n            { nominal: 12, mass: 12, abundance: 0.9893 },\n            { nominal: 13, mass: 13.00335483507, abundance: 0.0107 },\n            { nominal: 14, mass: 14.0032419884 },\n            { nominal: 15, mass: 15.01059926 },\n            { nominal: 16, mass: 16.0147013 },\n            { nominal: 17, mass: 17.022577 },\n            { nominal: 18, mass: 18.026751 },\n            { nominal: 19, mass: 19.0348 },\n            { nominal: 20, mass: 20.04032 },\n            { nominal: 21, mass: 21.049 },\n            { nominal: 22, mass: 22.05753 },\n            { nominal: 23, mass: 23.0689 },\n        ],\n        symbol: 'C',\n        mass: 12.010735896735248,\n        name: 'Carbon',\n        monoisotopicMass: 12,\n    },\n    {\n        number: 7,\n        isotopes: [\n            { nominal: 10, mass: 10.04165 },\n            { nominal: 11, mass: 11.026091 },\n            { nominal: 12, mass: 12.0186132 },\n            { nominal: 13, mass: 13.00573861 },\n            { nominal: 14, mass: 14.00307400443, abundance: 0.99636 },\n            { nominal: 15, mass: 15.00010889888, abundance: 0.00364 },\n            { nominal: 16, mass: 16.0061019 },\n            { nominal: 17, mass: 17.008449 },\n            { nominal: 18, mass: 18.014078 },\n            { nominal: 19, mass: 19.017022 },\n            { nominal: 20, mass: 20.023366 },\n            { nominal: 21, mass: 21.02711 },\n            { nominal: 22, mass: 22.03439 },\n            { nominal: 23, mass: 23.04114 },\n            { nominal: 24, mass: 24.05039 },\n            { nominal: 25, mass: 25.0601 },\n        ],\n        symbol: 'N',\n        mass: 14.006703211445798,\n        name: 'Nitrogen',\n        monoisotopicMass: 14.00307400443,\n    },\n    {\n        number: 8,\n        isotopes: [\n            { nominal: 12, mass: 12.034262 },\n            { nominal: 13, mass: 13.024815 },\n            { nominal: 14, mass: 14.00859636 },\n            { nominal: 15, mass: 15.00306562 },\n            { nominal: 16, mass: 15.99491461957, abundance: 0.99757 },\n            { nominal: 17, mass: 16.9991317565, abundance: 0.00038 },\n            { nominal: 18, mass: 17.99915961286, abundance: 0.00205 },\n            { nominal: 19, mass: 19.003578 },\n            { nominal: 20, mass: 20.00407535 },\n            { nominal: 21, mass: 21.008655 },\n            { nominal: 22, mass: 22.009966 },\n            { nominal: 23, mass: 23.015696 },\n            { nominal: 24, mass: 24.01986 },\n            { nominal: 25, mass: 25.02936 },\n            { nominal: 26, mass: 26.03729 },\n            { nominal: 27, mass: 27.04772 },\n            { nominal: 28, mass: 28.05591 },\n        ],\n        symbol: 'O',\n        mass: 15.999404924318277,\n        name: 'Oxygen',\n        monoisotopicMass: 15.99491461957,\n    },\n    {\n        number: 9,\n        isotopes: [\n            { nominal: 14, mass: 14.034315 },\n            { nominal: 15, mass: 15.018043 },\n            { nominal: 16, mass: 16.0114657 },\n            { nominal: 17, mass: 17.00209524 },\n            { nominal: 18, mass: 18.00093733 },\n            { nominal: 19, mass: 18.99840316273, abundance: 1 },\n            { nominal: 20, mass: 19.999981252 },\n            { nominal: 21, mass: 20.9999489 },\n            { nominal: 22, mass: 22.002999 },\n            { nominal: 23, mass: 23.003557 },\n            { nominal: 24, mass: 24.008115 },\n            { nominal: 25, mass: 25.012199 },\n            { nominal: 26, mass: 26.020038 },\n            { nominal: 27, mass: 27.02644 },\n            { nominal: 28, mass: 28.03534 },\n            { nominal: 29, mass: 29.04254 },\n            { nominal: 30, mass: 30.05165 },\n            { nominal: 31, mass: 31.05971 },\n        ],\n        symbol: 'F',\n        mass: 18.99840316273,\n        name: 'Fluorine',\n        monoisotopicMass: 18.99840316273,\n    },\n    {\n        number: 10,\n        isotopes: [\n            { nominal: 16, mass: 16.02575 },\n            { nominal: 17, mass: 17.01771396 },\n            { nominal: 18, mass: 18.0057087 },\n            { nominal: 19, mass: 19.00188091 },\n            { nominal: 20, mass: 19.9924401762, abundance: 0.9048 },\n            { nominal: 21, mass: 20.993846685, abundance: 0.0027 },\n            { nominal: 22, mass: 21.991385114, abundance: 0.0925 },\n            { nominal: 23, mass: 22.99446691 },\n            { nominal: 24, mass: 23.99361065 },\n            { nominal: 25, mass: 24.997789 },\n            { nominal: 26, mass: 26.000515 },\n            { nominal: 27, mass: 27.007553 },\n            { nominal: 28, mass: 28.01212 },\n            { nominal: 29, mass: 29.01975 },\n            { nominal: 30, mass: 30.02473 },\n            { nominal: 31, mass: 31.0331 },\n            { nominal: 32, mass: 32.03972 },\n            { nominal: 33, mass: 33.04938 },\n            { nominal: 34, mass: 34.05673 },\n        ],\n        symbol: 'Ne',\n        mass: 20.18004638052026,\n        name: 'Neon',\n        monoisotopicMass: 19.9924401762,\n    },\n    {\n        number: 11,\n        isotopes: [\n            { nominal: 18, mass: 18.02688 },\n            { nominal: 19, mass: 19.01388 },\n            { nominal: 20, mass: 20.0073544 },\n            { nominal: 21, mass: 20.99765469 },\n            { nominal: 22, mass: 21.99443741 },\n            { nominal: 23, mass: 22.989769282, abundance: 1 },\n            { nominal: 24, mass: 23.99096295 },\n            { nominal: 25, mass: 24.989954 },\n            { nominal: 26, mass: 25.9926346 },\n            { nominal: 27, mass: 26.9940765 },\n            { nominal: 28, mass: 27.998939 },\n            { nominal: 29, mass: 29.0028771 },\n            { nominal: 30, mass: 30.0090979 },\n            { nominal: 31, mass: 31.013163 },\n            { nominal: 32, mass: 32.02019 },\n            { nominal: 33, mass: 33.02573 },\n            { nominal: 34, mass: 34.03359 },\n            { nominal: 35, mass: 35.04062 },\n            { nominal: 36, mass: 36.04929 },\n            { nominal: 37, mass: 37.05705 },\n        ],\n        symbol: 'Na',\n        mass: 22.989769282,\n        name: 'Sodium',\n        monoisotopicMass: 22.989769282,\n    },\n    {\n        number: 12,\n        isotopes: [\n            { nominal: 19, mass: 19.034169 },\n            { nominal: 20, mass: 20.01885 },\n            { nominal: 21, mass: 21.011716 },\n            { nominal: 22, mass: 21.99957065 },\n            { nominal: 23, mass: 22.99412421 },\n            { nominal: 24, mass: 23.985041697, abundance: 0.7899 },\n            { nominal: 25, mass: 24.985836976, abundance: 0.1 },\n            { nominal: 26, mass: 25.982592968, abundance: 0.1101 },\n            { nominal: 27, mass: 26.984340624 },\n            { nominal: 28, mass: 27.9838767 },\n            { nominal: 29, mass: 28.988617 },\n            { nominal: 30, mass: 29.9904629 },\n            { nominal: 31, mass: 30.996648 },\n            { nominal: 32, mass: 31.9991102 },\n            { nominal: 33, mass: 33.0053271 },\n            { nominal: 34, mass: 34.008935 },\n            { nominal: 35, mass: 35.01679 },\n            { nominal: 36, mass: 36.02188 },\n            { nominal: 37, mass: 37.03037 },\n            { nominal: 38, mass: 38.03658 },\n            { nominal: 39, mass: 39.04538 },\n            { nominal: 40, mass: 40.05218 },\n        ],\n        symbol: 'Mg',\n        mass: 24.3050516198371,\n        name: 'Magnesium',\n        monoisotopicMass: 23.985041697,\n    },\n    {\n        number: 13,\n        isotopes: [\n            { nominal: 21, mass: 21.02897 },\n            { nominal: 22, mass: 22.01954 },\n            { nominal: 23, mass: 23.00724435 },\n            { nominal: 24, mass: 23.9999489 },\n            { nominal: 25, mass: 24.9904281 },\n            { nominal: 26, mass: 25.986891904 },\n            { nominal: 27, mass: 26.98153853, abundance: 1 },\n            { nominal: 28, mass: 27.98191021 },\n            { nominal: 29, mass: 28.9804565 },\n            { nominal: 30, mass: 29.98296 },\n            { nominal: 31, mass: 30.983945 },\n            { nominal: 32, mass: 31.988085 },\n            { nominal: 33, mass: 32.990909 },\n            { nominal: 34, mass: 33.996705 },\n            { nominal: 35, mass: 34.999764 },\n            { nominal: 36, mass: 36.00639 },\n            { nominal: 37, mass: 37.01053 },\n            { nominal: 38, mass: 38.0174 },\n            { nominal: 39, mass: 39.02254 },\n            { nominal: 40, mass: 40.03003 },\n            { nominal: 41, mass: 41.03638 },\n            { nominal: 42, mass: 42.04384 },\n            { nominal: 43, mass: 43.05147 },\n        ],\n        symbol: 'Al',\n        mass: 26.98153853,\n        name: 'Aluminium',\n        monoisotopicMass: 26.98153853,\n    },\n    {\n        number: 14,\n        isotopes: [\n            { nominal: 22, mass: 22.03579 },\n            { nominal: 23, mass: 23.02544 },\n            { nominal: 24, mass: 24.011535 },\n            { nominal: 25, mass: 25.004109 },\n            { nominal: 26, mass: 25.99233384 },\n            { nominal: 27, mass: 26.98670481 },\n            { nominal: 28, mass: 27.97692653465, abundance: 0.92223 },\n            { nominal: 29, mass: 28.9764946649, abundance: 0.04685 },\n            { nominal: 30, mass: 29.973770136, abundance: 0.03092 },\n            { nominal: 31, mass: 30.975363194 },\n            { nominal: 32, mass: 31.97415154 },\n            { nominal: 33, mass: 32.97797696 },\n            { nominal: 34, mass: 33.978576 },\n            { nominal: 35, mass: 34.984583 },\n            { nominal: 36, mass: 35.986695 },\n            { nominal: 37, mass: 36.992921 },\n            { nominal: 38, mass: 37.995523 },\n            { nominal: 39, mass: 39.002491 },\n            { nominal: 40, mass: 40.00583 },\n            { nominal: 41, mass: 41.01301 },\n            { nominal: 42, mass: 42.01778 },\n            { nominal: 43, mass: 43.0248 },\n            { nominal: 44, mass: 44.03061 },\n            { nominal: 45, mass: 45.03995 },\n        ],\n        symbol: 'Si',\n        mass: 28.085498705705955,\n        name: 'Silicon',\n        monoisotopicMass: 27.97692653465,\n    },\n    {\n        number: 15,\n        isotopes: [\n            { nominal: 24, mass: 24.03577 },\n            { nominal: 25, mass: 25.02119 },\n            { nominal: 26, mass: 26.01178 },\n            { nominal: 27, mass: 26.999224 },\n            { nominal: 28, mass: 27.9923266 },\n            { nominal: 29, mass: 28.98180079 },\n            { nominal: 30, mass: 29.97831375 },\n            { nominal: 31, mass: 30.97376199842, abundance: 1 },\n            { nominal: 32, mass: 31.973907643 },\n            { nominal: 33, mass: 32.9717257 },\n            { nominal: 34, mass: 33.97364589 },\n            { nominal: 35, mass: 34.9733141 },\n            { nominal: 36, mass: 35.97826 },\n            { nominal: 37, mass: 36.979607 },\n            { nominal: 38, mass: 37.984252 },\n            { nominal: 39, mass: 38.986227 },\n            { nominal: 40, mass: 39.99133 },\n            { nominal: 41, mass: 40.994654 },\n            { nominal: 42, mass: 42.00108 },\n            { nominal: 43, mass: 43.00502 },\n            { nominal: 44, mass: 44.01121 },\n            { nominal: 45, mass: 45.01645 },\n            { nominal: 46, mass: 46.02446 },\n            { nominal: 47, mass: 47.03139 },\n        ],\n        symbol: 'P',\n        mass: 30.97376199842,\n        name: 'Phosphorus',\n        monoisotopicMass: 30.97376199842,\n    },\n    {\n        number: 16,\n        isotopes: [\n            { nominal: 26, mass: 26.02907 },\n            { nominal: 27, mass: 27.01828 },\n            { nominal: 28, mass: 28.00437 },\n            { nominal: 29, mass: 28.996611 },\n            { nominal: 30, mass: 29.98490703 },\n            { nominal: 31, mass: 30.97955701 },\n            { nominal: 32, mass: 31.9720711744, abundance: 0.9499 },\n            { nominal: 33, mass: 32.9714589098, abundance: 0.0075 },\n            { nominal: 34, mass: 33.967867004, abundance: 0.0425 },\n            { nominal: 35, mass: 34.96903231 },\n            { nominal: 36, mass: 35.96708071, abundance: 0.0001 },\n            { nominal: 37, mass: 36.97112551 },\n            { nominal: 38, mass: 37.9711633 },\n            { nominal: 39, mass: 38.975134 },\n            { nominal: 40, mass: 39.9754826 },\n            { nominal: 41, mass: 40.9795935 },\n            { nominal: 42, mass: 41.9810651 },\n            { nominal: 43, mass: 42.9869076 },\n            { nominal: 44, mass: 43.9901188 },\n            { nominal: 45, mass: 44.99572 },\n            { nominal: 46, mass: 46.00004 },\n            { nominal: 47, mass: 47.00795 },\n            { nominal: 48, mass: 48.0137 },\n            { nominal: 49, mass: 49.02276 },\n        ],\n        symbol: 'S',\n        mass: 32.06478740612706,\n        name: 'Sulfur',\n        monoisotopicMass: 31.9720711744,\n    },\n    {\n        number: 17,\n        isotopes: [\n            { nominal: 28, mass: 28.02954 },\n            { nominal: 29, mass: 29.01478 },\n            { nominal: 30, mass: 30.00477 },\n            { nominal: 31, mass: 30.992414 },\n            { nominal: 32, mass: 31.98568464 },\n            { nominal: 33, mass: 32.97745199 },\n            { nominal: 34, mass: 33.973762485 },\n            { nominal: 35, mass: 34.968852682, abundance: 0.7576 },\n            { nominal: 36, mass: 35.968306809 },\n            { nominal: 37, mass: 36.965902602, abundance: 0.2424 },\n            { nominal: 38, mass: 37.96801044 },\n            { nominal: 39, mass: 38.9680082 },\n            { nominal: 40, mass: 39.970415 },\n            { nominal: 41, mass: 40.970685 },\n            { nominal: 42, mass: 41.97325 },\n            { nominal: 43, mass: 42.97389 },\n            { nominal: 44, mass: 43.97787 },\n            { nominal: 45, mass: 44.98029 },\n            { nominal: 46, mass: 45.98517 },\n            { nominal: 47, mass: 46.98916 },\n            { nominal: 48, mass: 47.99564 },\n            { nominal: 49, mass: 49.00123 },\n            { nominal: 50, mass: 50.00905 },\n            { nominal: 51, mass: 51.01554 },\n        ],\n        symbol: 'Cl',\n        mass: 35.452937582608,\n        name: 'Chlorine',\n        monoisotopicMass: 34.968852682,\n    },\n    {\n        number: 18,\n        isotopes: [\n            { nominal: 30, mass: 30.02307 },\n            { nominal: 31, mass: 31.01212 },\n            { nominal: 32, mass: 31.9976378 },\n            { nominal: 33, mass: 32.98992555 },\n            { nominal: 34, mass: 33.98027009 },\n            { nominal: 35, mass: 34.97525759 },\n            { nominal: 36, mass: 35.967545105, abundance: 0.003336 },\n            { nominal: 37, mass: 36.96677633 },\n            { nominal: 38, mass: 37.96273211, abundance: 0.000629 },\n            { nominal: 39, mass: 38.964313 },\n            { nominal: 40, mass: 39.9623831237, abundance: 0.996035 },\n            { nominal: 41, mass: 40.96450057 },\n            { nominal: 42, mass: 41.9630457 },\n            { nominal: 43, mass: 42.9656361 },\n            { nominal: 44, mass: 43.9649238 },\n            { nominal: 45, mass: 44.96803973 },\n            { nominal: 46, mass: 45.968083 },\n            { nominal: 47, mass: 46.972935 },\n            { nominal: 48, mass: 47.97591 },\n            { nominal: 49, mass: 48.9819 },\n            { nominal: 50, mass: 49.98613 },\n            { nominal: 51, mass: 50.9937 },\n            { nominal: 52, mass: 51.99896 },\n            { nominal: 53, mass: 53.00729 },\n        ],\n        symbol: 'Ar',\n        mass: 39.947798563582005,\n        name: 'Argon',\n        monoisotopicMass: 39.9623831237,\n    },\n    {\n        number: 19,\n        isotopes: [\n            { nominal: 32, mass: 32.02265 },\n            { nominal: 33, mass: 33.00756 },\n            { nominal: 34, mass: 33.99869 },\n            { nominal: 35, mass: 34.98800541 },\n            { nominal: 36, mass: 35.98130201 },\n            { nominal: 37, mass: 36.97337589 },\n            { nominal: 38, mass: 37.96908112 },\n            { nominal: 39, mass: 38.9637064864, abundance: 0.932581 },\n            { nominal: 40, mass: 39.963998166, abundance: 0.000117 },\n            { nominal: 41, mass: 40.9618252579, abundance: 0.067302 },\n            { nominal: 42, mass: 41.96240231 },\n            { nominal: 43, mass: 42.9607347 },\n            { nominal: 44, mass: 43.96158699 },\n            { nominal: 45, mass: 44.96069149 },\n            { nominal: 46, mass: 45.96198159 },\n            { nominal: 47, mass: 46.9616616 },\n            { nominal: 48, mass: 47.96534119 },\n            { nominal: 49, mass: 48.96821075 },\n            { nominal: 50, mass: 49.97238 },\n            { nominal: 51, mass: 50.975828 },\n            { nominal: 52, mass: 51.98224 },\n            { nominal: 53, mass: 52.98746 },\n            { nominal: 54, mass: 53.99463 },\n            { nominal: 55, mass: 55.00076 },\n            { nominal: 56, mass: 56.00851 },\n        ],\n        symbol: 'K',\n        mass: 39.098300910086,\n        name: 'Potassium',\n        monoisotopicMass: 38.9637064864,\n    },\n    {\n        number: 20,\n        isotopes: [\n            { nominal: 34, mass: 34.01487 },\n            { nominal: 35, mass: 35.00514 },\n            { nominal: 36, mass: 35.993074 },\n            { nominal: 37, mass: 36.98589785 },\n            { nominal: 38, mass: 37.97631922 },\n            { nominal: 39, mass: 38.97071081 },\n            { nominal: 40, mass: 39.962590863, abundance: 0.96941 },\n            { nominal: 41, mass: 40.96227792 },\n            { nominal: 42, mass: 41.95861783, abundance: 0.00647 },\n            { nominal: 43, mass: 42.95876644, abundance: 0.00135 },\n            { nominal: 44, mass: 43.95548156, abundance: 0.02086 },\n            { nominal: 45, mass: 44.95618635 },\n            { nominal: 46, mass: 45.953689, abundance: 0.00004 },\n            { nominal: 47, mass: 46.9545424 },\n            { nominal: 48, mass: 47.95252276, abundance: 0.00187 },\n            { nominal: 49, mass: 48.95566274 },\n            { nominal: 50, mass: 49.9574992 },\n            { nominal: 51, mass: 50.960989 },\n            { nominal: 52, mass: 51.963217 },\n            { nominal: 53, mass: 52.96945 },\n            { nominal: 54, mass: 53.9734 },\n            { nominal: 55, mass: 54.9803 },\n            { nominal: 56, mass: 55.98508 },\n            { nominal: 57, mass: 56.99262 },\n            { nominal: 58, mass: 57.99794 },\n        ],\n        symbol: 'Ca',\n        mass: 40.078022511017735,\n        name: 'Calcium',\n        monoisotopicMass: 39.962590863,\n    },\n    {\n        number: 21,\n        isotopes: [\n            { nominal: 36, mass: 36.01648 },\n            { nominal: 37, mass: 37.00374 },\n            { nominal: 38, mass: 37.99512 },\n            { nominal: 39, mass: 38.984785 },\n            { nominal: 40, mass: 39.9779673 },\n            { nominal: 41, mass: 40.969251105 },\n            { nominal: 42, mass: 41.96551653 },\n            { nominal: 43, mass: 42.9611505 },\n            { nominal: 44, mass: 43.9594029 },\n            { nominal: 45, mass: 44.95590828, abundance: 1 },\n            { nominal: 46, mass: 45.95516826 },\n            { nominal: 47, mass: 46.9524037 },\n            { nominal: 48, mass: 47.9522236 },\n            { nominal: 49, mass: 48.9500146 },\n            { nominal: 50, mass: 49.952176 },\n            { nominal: 51, mass: 50.953592 },\n            { nominal: 52, mass: 51.95688 },\n            { nominal: 53, mass: 52.95909 },\n            { nominal: 54, mass: 53.96393 },\n            { nominal: 55, mass: 54.96782 },\n            { nominal: 56, mass: 55.97345 },\n            { nominal: 57, mass: 56.97777 },\n            { nominal: 58, mass: 57.98403 },\n            { nominal: 59, mass: 58.98894 },\n            { nominal: 60, mass: 59.99565 },\n            { nominal: 61, mass: 61.001 },\n        ],\n        symbol: 'Sc',\n        mass: 44.95590828,\n        name: 'Scandium',\n        monoisotopicMass: 44.95590828,\n    },\n    {\n        number: 22,\n        isotopes: [\n            { nominal: 38, mass: 38.01145 },\n            { nominal: 39, mass: 39.00236 },\n            { nominal: 40, mass: 39.9905 },\n            { nominal: 41, mass: 40.983148 },\n            { nominal: 42, mass: 41.97304903 },\n            { nominal: 43, mass: 42.9685225 },\n            { nominal: 44, mass: 43.95968995 },\n            { nominal: 45, mass: 44.95812198 },\n            { nominal: 46, mass: 45.95262772, abundance: 0.0825 },\n            { nominal: 47, mass: 46.95175879, abundance: 0.0744 },\n            { nominal: 48, mass: 47.94794198, abundance: 0.7372 },\n            { nominal: 49, mass: 48.94786568, abundance: 0.0541 },\n            { nominal: 50, mass: 49.94478689, abundance: 0.0518 },\n            { nominal: 51, mass: 50.94661065 },\n            { nominal: 52, mass: 51.946893 },\n            { nominal: 53, mass: 52.94973 },\n            { nominal: 54, mass: 53.95105 },\n            { nominal: 55, mass: 54.95527 },\n            { nominal: 56, mass: 55.95791 },\n            { nominal: 57, mass: 56.96364 },\n            { nominal: 58, mass: 57.9666 },\n            { nominal: 59, mass: 58.97247 },\n            { nominal: 60, mass: 59.97603 },\n            { nominal: 61, mass: 60.98245 },\n            { nominal: 62, mass: 61.98651 },\n            { nominal: 63, mass: 62.99375 },\n        ],\n        symbol: 'Ti',\n        mass: 47.866744962721995,\n        name: 'Titanium',\n        monoisotopicMass: 47.94794198,\n    },\n    {\n        number: 23,\n        isotopes: [\n            { nominal: 40, mass: 40.01276 },\n            { nominal: 41, mass: 41.00021 },\n            { nominal: 42, mass: 41.99182 },\n            { nominal: 43, mass: 42.980766 },\n            { nominal: 44, mass: 43.97411 },\n            { nominal: 45, mass: 44.9657748 },\n            { nominal: 46, mass: 45.96019878 },\n            { nominal: 47, mass: 46.95490491 },\n            { nominal: 48, mass: 47.9522522 },\n            { nominal: 49, mass: 48.9485118 },\n            { nominal: 50, mass: 49.94715601, abundance: 0.0025 },\n            { nominal: 51, mass: 50.94395704, abundance: 0.9975 },\n            { nominal: 52, mass: 51.94477301 },\n            { nominal: 53, mass: 52.9443367 },\n            { nominal: 54, mass: 53.946439 },\n            { nominal: 55, mass: 54.94724 },\n            { nominal: 56, mass: 55.95048 },\n            { nominal: 57, mass: 56.95252 },\n            { nominal: 58, mass: 57.95672 },\n            { nominal: 59, mass: 58.95939 },\n            { nominal: 60, mass: 59.96431 },\n            { nominal: 61, mass: 60.96725 },\n            { nominal: 62, mass: 61.97265 },\n            { nominal: 63, mass: 62.97639 },\n            { nominal: 64, mass: 63.98264 },\n            { nominal: 65, mass: 64.9875 },\n            { nominal: 66, mass: 65.99398 },\n        ],\n        symbol: 'V',\n        mass: 50.941465037425004,\n        name: 'Vanadium',\n        monoisotopicMass: 50.94395704,\n    },\n    {\n        number: 24,\n        isotopes: [\n            { nominal: 42, mass: 42.0067 },\n            { nominal: 43, mass: 42.99753 },\n            { nominal: 44, mass: 43.98536 },\n            { nominal: 45, mass: 44.97905 },\n            { nominal: 46, mass: 45.968359 },\n            { nominal: 47, mass: 46.9628974 },\n            { nominal: 48, mass: 47.9540291 },\n            { nominal: 49, mass: 48.9513333 },\n            { nominal: 50, mass: 49.94604183, abundance: 0.04345 },\n            { nominal: 51, mass: 50.94476502 },\n            { nominal: 52, mass: 51.94050623, abundance: 0.83789 },\n            { nominal: 53, mass: 52.94064815, abundance: 0.09501 },\n            { nominal: 54, mass: 53.93887916, abundance: 0.02365 },\n            { nominal: 55, mass: 54.94083843 },\n            { nominal: 56, mass: 55.9406531 },\n            { nominal: 57, mass: 56.943613 },\n            { nominal: 58, mass: 57.94435 },\n            { nominal: 59, mass: 58.94859 },\n            { nominal: 60, mass: 59.95008 },\n            { nominal: 61, mass: 60.95442 },\n            { nominal: 62, mass: 61.9561 },\n            { nominal: 63, mass: 62.96165 },\n            { nominal: 64, mass: 63.96408 },\n            { nominal: 65, mass: 64.96996 },\n            { nominal: 66, mass: 65.97366 },\n            { nominal: 67, mass: 66.98016 },\n            { nominal: 68, mass: 67.98403 },\n        ],\n        symbol: 'Cr',\n        mass: 51.9961317554337,\n        name: 'Chromium',\n        monoisotopicMass: 51.94050623,\n    },\n    {\n        number: 25,\n        isotopes: [\n            { nominal: 44, mass: 44.00715 },\n            { nominal: 45, mass: 44.99449 },\n            { nominal: 46, mass: 45.98609 },\n            { nominal: 47, mass: 46.975775 },\n            { nominal: 48, mass: 47.96852 },\n            { nominal: 49, mass: 48.959595 },\n            { nominal: 50, mass: 49.95423778 },\n            { nominal: 51, mass: 50.94820847 },\n            { nominal: 52, mass: 51.9455639 },\n            { nominal: 53, mass: 52.94128889 },\n            { nominal: 54, mass: 53.9403576 },\n            { nominal: 55, mass: 54.93804391, abundance: 1 },\n            { nominal: 56, mass: 55.93890369 },\n            { nominal: 57, mass: 56.9382861 },\n            { nominal: 58, mass: 57.9400666 },\n            { nominal: 59, mass: 58.9403911 },\n            { nominal: 60, mass: 59.9431366 },\n            { nominal: 61, mass: 60.9444525 },\n            { nominal: 62, mass: 61.94795 },\n            { nominal: 63, mass: 62.9496647 },\n            { nominal: 64, mass: 63.9538494 },\n            { nominal: 65, mass: 64.9560198 },\n            { nominal: 66, mass: 65.960547 },\n            { nominal: 67, mass: 66.96424 },\n            { nominal: 68, mass: 67.96962 },\n            { nominal: 69, mass: 68.97366 },\n            { nominal: 70, mass: 69.97937 },\n            { nominal: 71, mass: 70.98368 },\n        ],\n        symbol: 'Mn',\n        mass: 54.93804391,\n        name: 'Manganese',\n        monoisotopicMass: 54.93804391,\n    },\n    {\n        number: 26,\n        isotopes: [\n            { nominal: 45, mass: 45.01442 },\n            { nominal: 46, mass: 46.00063 },\n            { nominal: 47, mass: 46.99185 },\n            { nominal: 48, mass: 47.98023 },\n            { nominal: 49, mass: 48.973429 },\n            { nominal: 50, mass: 49.962975 },\n            { nominal: 51, mass: 50.956841 },\n            { nominal: 52, mass: 51.9481131 },\n            { nominal: 53, mass: 52.9453064 },\n            { nominal: 54, mass: 53.93960899, abundance: 0.05845 },\n            { nominal: 55, mass: 54.93829199 },\n            { nominal: 56, mass: 55.93493633, abundance: 0.91754 },\n            { nominal: 57, mass: 56.93539284, abundance: 0.02119 },\n            { nominal: 58, mass: 57.93327443, abundance: 0.00282 },\n            { nominal: 59, mass: 58.93487434 },\n            { nominal: 60, mass: 59.9340711 },\n            { nominal: 61, mass: 60.9367462 },\n            { nominal: 62, mass: 61.9367918 },\n            { nominal: 63, mass: 62.9402727 },\n            { nominal: 64, mass: 63.9409878 },\n            { nominal: 65, mass: 64.9450115 },\n            { nominal: 66, mass: 65.94625 },\n            { nominal: 67, mass: 66.95054 },\n            { nominal: 68, mass: 67.95295 },\n            { nominal: 69, mass: 68.95807 },\n            { nominal: 70, mass: 69.96102 },\n            { nominal: 71, mass: 70.96672 },\n            { nominal: 72, mass: 71.96983 },\n            { nominal: 73, mass: 72.97572 },\n            { nominal: 74, mass: 73.97935 },\n        ],\n        symbol: 'Fe',\n        mass: 55.845144433865904,\n        name: 'Iron',\n        monoisotopicMass: 55.93493633,\n    },\n    {\n        number: 27,\n        isotopes: [\n            { nominal: 47, mass: 47.01057 },\n            { nominal: 48, mass: 48.00093 },\n            { nominal: 49, mass: 48.98891 },\n            { nominal: 50, mass: 49.98091 },\n            { nominal: 51, mass: 50.970647 },\n            { nominal: 52, mass: 51.96351 },\n            { nominal: 53, mass: 52.9542041 },\n            { nominal: 54, mass: 53.94845987 },\n            { nominal: 55, mass: 54.9419972 },\n            { nominal: 56, mass: 55.9398388 },\n            { nominal: 57, mass: 56.93629057 },\n            { nominal: 58, mass: 57.9357521 },\n            { nominal: 59, mass: 58.93319429, abundance: 1 },\n            { nominal: 60, mass: 59.9338163 },\n            { nominal: 61, mass: 60.93247662 },\n            { nominal: 62, mass: 61.934059 },\n            { nominal: 63, mass: 62.9336 },\n            { nominal: 64, mass: 63.935811 },\n            { nominal: 65, mass: 64.9364621 },\n            { nominal: 66, mass: 65.939443 },\n            { nominal: 67, mass: 66.9406096 },\n            { nominal: 68, mass: 67.94426 },\n            { nominal: 69, mass: 68.94614 },\n            { nominal: 70, mass: 69.94963 },\n            { nominal: 71, mass: 70.95237 },\n            { nominal: 72, mass: 71.95729 },\n            { nominal: 73, mass: 72.96039 },\n            { nominal: 74, mass: 73.96515 },\n            { nominal: 75, mass: 74.96876 },\n            { nominal: 76, mass: 75.97413 },\n        ],\n        symbol: 'Co',\n        mass: 58.93319429,\n        name: 'Cobalt',\n        monoisotopicMass: 58.93319429,\n    },\n    {\n        number: 28,\n        isotopes: [\n            { nominal: 48, mass: 48.01769 },\n            { nominal: 49, mass: 49.0077 },\n            { nominal: 50, mass: 49.99474 },\n            { nominal: 51, mass: 50.98611 },\n            { nominal: 52, mass: 51.9748 },\n            { nominal: 53, mass: 52.96819 },\n            { nominal: 54, mass: 53.957892 },\n            { nominal: 55, mass: 54.95133063 },\n            { nominal: 56, mass: 55.94212855 },\n            { nominal: 57, mass: 56.93979218 },\n            { nominal: 58, mass: 57.93534241, abundance: 0.68077 },\n            { nominal: 59, mass: 58.9343462 },\n            { nominal: 60, mass: 59.93078588, abundance: 0.26223 },\n            { nominal: 61, mass: 60.93105557, abundance: 0.011399 },\n            { nominal: 62, mass: 61.92834537, abundance: 0.036346 },\n            { nominal: 63, mass: 62.92966963 },\n            { nominal: 64, mass: 63.92796682, abundance: 0.009255 },\n            { nominal: 65, mass: 64.93008517 },\n            { nominal: 66, mass: 65.9291393 },\n            { nominal: 67, mass: 66.9315694 },\n            { nominal: 68, mass: 67.9318688 },\n            { nominal: 69, mass: 68.9356103 },\n            { nominal: 70, mass: 69.9364313 },\n            { nominal: 71, mass: 70.940519 },\n            { nominal: 72, mass: 71.9417859 },\n            { nominal: 73, mass: 72.9462067 },\n            { nominal: 74, mass: 73.94798 },\n            { nominal: 75, mass: 74.9525 },\n            { nominal: 76, mass: 75.95533 },\n            { nominal: 77, mass: 76.96055 },\n            { nominal: 78, mass: 77.96336 },\n            { nominal: 79, mass: 78.97025 },\n        ],\n        symbol: 'Ni',\n        mass: 58.69334710994765,\n        name: 'Nickel',\n        monoisotopicMass: 57.93534241,\n    },\n    {\n        number: 29,\n        isotopes: [\n            { nominal: 52, mass: 51.99671 },\n            { nominal: 53, mass: 52.98459 },\n            { nominal: 54, mass: 53.97666 },\n            { nominal: 55, mass: 54.96604 },\n            { nominal: 56, mass: 55.95895 },\n            { nominal: 57, mass: 56.9492125 },\n            { nominal: 58, mass: 57.94453305 },\n            { nominal: 59, mass: 58.93949748 },\n            { nominal: 60, mass: 59.9373645 },\n            { nominal: 61, mass: 60.9334576 },\n            { nominal: 62, mass: 61.93259541 },\n            { nominal: 63, mass: 62.92959772, abundance: 0.6915 },\n            { nominal: 64, mass: 63.92976434 },\n            { nominal: 65, mass: 64.9277897, abundance: 0.3085 },\n            { nominal: 66, mass: 65.92886903 },\n            { nominal: 67, mass: 66.9277303 },\n            { nominal: 68, mass: 67.9296109 },\n            { nominal: 69, mass: 68.9294293 },\n            { nominal: 70, mass: 69.9323921 },\n            { nominal: 71, mass: 70.9326768 },\n            { nominal: 72, mass: 71.9358203 },\n            { nominal: 73, mass: 72.9366744 },\n            { nominal: 74, mass: 73.9398749 },\n            { nominal: 75, mass: 74.9415226 },\n            { nominal: 76, mass: 75.945275 },\n            { nominal: 77, mass: 76.94792 },\n            { nominal: 78, mass: 77.95223 },\n            { nominal: 79, mass: 78.95502 },\n            { nominal: 80, mass: 79.96089 },\n            { nominal: 81, mass: 80.96587 },\n            { nominal: 82, mass: 81.97244 },\n        ],\n        symbol: 'Cu',\n        mass: 63.54603994583,\n        name: 'Copper',\n        monoisotopicMass: 62.92959772,\n    },\n    {\n        number: 30,\n        isotopes: [\n            { nominal: 54, mass: 53.99204 },\n            { nominal: 55, mass: 54.98398 },\n            { nominal: 56, mass: 55.97254 },\n            { nominal: 57, mass: 56.96506 },\n            { nominal: 58, mass: 57.954591 },\n            { nominal: 59, mass: 58.94931266 },\n            { nominal: 60, mass: 59.9418421 },\n            { nominal: 61, mass: 60.939507 },\n            { nominal: 62, mass: 61.93433397 },\n            { nominal: 63, mass: 62.9332115 },\n            { nominal: 64, mass: 63.92914201, abundance: 0.4917 },\n            { nominal: 65, mass: 64.92924077 },\n            { nominal: 66, mass: 65.92603381, abundance: 0.2773 },\n            { nominal: 67, mass: 66.92712775, abundance: 0.0404 },\n            { nominal: 68, mass: 67.92484455, abundance: 0.1845 },\n            { nominal: 69, mass: 68.9265507 },\n            { nominal: 70, mass: 69.9253192, abundance: 0.0061 },\n            { nominal: 71, mass: 70.9277196 },\n            { nominal: 72, mass: 71.9268428 },\n            { nominal: 73, mass: 72.9295826 },\n            { nominal: 74, mass: 73.9294073 },\n            { nominal: 75, mass: 74.9328402 },\n            { nominal: 76, mass: 75.933115 },\n            { nominal: 77, mass: 76.9368872 },\n            { nominal: 78, mass: 77.9382892 },\n            { nominal: 79, mass: 78.9426381 },\n            { nominal: 80, mass: 79.9445529 },\n            { nominal: 81, mass: 80.9504026 },\n            { nominal: 82, mass: 81.95426 },\n            { nominal: 83, mass: 82.96056 },\n            { nominal: 84, mass: 83.96521 },\n            { nominal: 85, mass: 84.97226 },\n        ],\n        symbol: 'Zn',\n        mass: 65.37778252952499,\n        name: 'Zinc',\n        monoisotopicMass: 63.92914201,\n    },\n    {\n        number: 31,\n        isotopes: [\n            { nominal: 56, mass: 55.99536 },\n            { nominal: 57, mass: 56.9832 },\n            { nominal: 58, mass: 57.97478 },\n            { nominal: 59, mass: 58.96353 },\n            { nominal: 60, mass: 59.95729 },\n            { nominal: 61, mass: 60.949399 },\n            { nominal: 62, mass: 61.94419025 },\n            { nominal: 63, mass: 62.9392942 },\n            { nominal: 64, mass: 63.9368404 },\n            { nominal: 65, mass: 64.93273459 },\n            { nominal: 66, mass: 65.9315894 },\n            { nominal: 67, mass: 66.9282025 },\n            { nominal: 68, mass: 67.9279805 },\n            { nominal: 69, mass: 68.9255735, abundance: 0.60108 },\n            { nominal: 70, mass: 69.9260219 },\n            { nominal: 71, mass: 70.92470258, abundance: 0.39892 },\n            { nominal: 72, mass: 71.92636747 },\n            { nominal: 73, mass: 72.9251747 },\n            { nominal: 74, mass: 73.9269457 },\n            { nominal: 75, mass: 74.9265002 },\n            { nominal: 76, mass: 75.9288276 },\n            { nominal: 77, mass: 76.9291543 },\n            { nominal: 78, mass: 77.9316088 },\n            { nominal: 79, mass: 78.9328523 },\n            { nominal: 80, mass: 79.9364208 },\n            { nominal: 81, mass: 80.9381338 },\n            { nominal: 82, mass: 81.9431765 },\n            { nominal: 83, mass: 82.9471203 },\n            { nominal: 84, mass: 83.95246 },\n            { nominal: 85, mass: 84.95699 },\n            { nominal: 86, mass: 85.96301 },\n            { nominal: 87, mass: 86.96824 },\n        ],\n        symbol: 'Ga',\n        mass: 69.7230660725936,\n        name: 'Gallium',\n        monoisotopicMass: 68.9255735,\n    },\n    {\n        number: 32,\n        isotopes: [\n            { nominal: 58, mass: 57.99172 },\n            { nominal: 59, mass: 58.98249 },\n            { nominal: 60, mass: 59.97036 },\n            { nominal: 61, mass: 60.96379 },\n            { nominal: 62, mass: 61.95502 },\n            { nominal: 63, mass: 62.949628 },\n            { nominal: 64, mass: 63.9416899 },\n            { nominal: 65, mass: 64.9393681 },\n            { nominal: 66, mass: 65.9338621 },\n            { nominal: 67, mass: 66.9327339 },\n            { nominal: 68, mass: 67.9280953 },\n            { nominal: 69, mass: 68.9279645 },\n            { nominal: 70, mass: 69.92424875, abundance: 0.2057 },\n            { nominal: 71, mass: 70.92495233 },\n            { nominal: 72, mass: 71.922075826, abundance: 0.2745 },\n            { nominal: 73, mass: 72.923458956, abundance: 0.0775 },\n            { nominal: 74, mass: 73.921177761, abundance: 0.365 },\n            { nominal: 75, mass: 74.92285837 },\n            { nominal: 76, mass: 75.921402726, abundance: 0.0773 },\n            { nominal: 77, mass: 76.923549843 },\n            { nominal: 78, mass: 77.9228529 },\n            { nominal: 79, mass: 78.92536 },\n            { nominal: 80, mass: 79.9253508 },\n            { nominal: 81, mass: 80.9288329 },\n            { nominal: 82, mass: 81.929774 },\n            { nominal: 83, mass: 82.9345391 },\n            { nominal: 84, mass: 83.9375751 },\n            { nominal: 85, mass: 84.9429697 },\n            { nominal: 86, mass: 85.94658 },\n            { nominal: 87, mass: 86.95268 },\n            { nominal: 88, mass: 87.95691 },\n            { nominal: 89, mass: 88.96379 },\n            { nominal: 90, mass: 89.96863 },\n        ],\n        symbol: 'Ge',\n        mass: 72.6275501646868,\n        name: 'Germanium',\n        monoisotopicMass: 73.921177761,\n    },\n    {\n        number: 33,\n        isotopes: [\n            { nominal: 60, mass: 59.99388 },\n            { nominal: 61, mass: 60.98112 },\n            { nominal: 62, mass: 61.97361 },\n            { nominal: 63, mass: 62.9639 },\n            { nominal: 64, mass: 63.95743 },\n            { nominal: 65, mass: 64.949611 },\n            { nominal: 66, mass: 65.9441488 },\n            { nominal: 67, mass: 66.93925111 },\n            { nominal: 68, mass: 67.9367741 },\n            { nominal: 69, mass: 68.932246 },\n            { nominal: 70, mass: 69.930926 },\n            { nominal: 71, mass: 70.9271138 },\n            { nominal: 72, mass: 71.9267523 },\n            { nominal: 73, mass: 72.9238291 },\n            { nominal: 74, mass: 73.9239286 },\n            { nominal: 75, mass: 74.92159457, abundance: 1 },\n            { nominal: 76, mass: 75.92239202 },\n            { nominal: 77, mass: 76.9206476 },\n            { nominal: 78, mass: 77.921828 },\n            { nominal: 79, mass: 78.9209484 },\n            { nominal: 80, mass: 79.9224746 },\n            { nominal: 81, mass: 80.9221323 },\n            { nominal: 82, mass: 81.9247412 },\n            { nominal: 83, mass: 82.9252069 },\n            { nominal: 84, mass: 83.9293033 },\n            { nominal: 85, mass: 84.9321637 },\n            { nominal: 86, mass: 85.9367015 },\n            { nominal: 87, mass: 86.9402917 },\n            { nominal: 88, mass: 87.94555 },\n            { nominal: 89, mass: 88.94976 },\n            { nominal: 90, mass: 89.95563 },\n            { nominal: 91, mass: 90.96039 },\n            { nominal: 92, mass: 91.96674 },\n        ],\n        symbol: 'As',\n        mass: 74.92159457,\n        name: 'Arsenic',\n        monoisotopicMass: 74.92159457,\n    },\n    {\n        number: 34,\n        isotopes: [\n            { nominal: 64, mass: 63.97109 },\n            { nominal: 65, mass: 64.9644 },\n            { nominal: 66, mass: 65.95559 },\n            { nominal: 67, mass: 66.949994 },\n            { nominal: 68, mass: 67.94182524 },\n            { nominal: 69, mass: 68.9394148 },\n            { nominal: 70, mass: 69.9335155 },\n            { nominal: 71, mass: 70.9322094 },\n            { nominal: 72, mass: 71.9271405 },\n            { nominal: 73, mass: 72.9267549 },\n            { nominal: 74, mass: 73.922475934, abundance: 0.0089 },\n            { nominal: 75, mass: 74.92252287 },\n            { nominal: 76, mass: 75.919213704, abundance: 0.0937 },\n            { nominal: 77, mass: 76.919914154, abundance: 0.0763 },\n            { nominal: 78, mass: 77.91730928, abundance: 0.2377 },\n            { nominal: 79, mass: 78.91849929 },\n            { nominal: 80, mass: 79.9165218, abundance: 0.4961 },\n            { nominal: 81, mass: 80.917993 },\n            { nominal: 82, mass: 81.9166995, abundance: 0.0873 },\n            { nominal: 83, mass: 82.9191186 },\n            { nominal: 84, mass: 83.9184668 },\n            { nominal: 85, mass: 84.9222608 },\n            { nominal: 86, mass: 85.9243117 },\n            { nominal: 87, mass: 86.9286886 },\n            { nominal: 88, mass: 87.9314175 },\n            { nominal: 89, mass: 88.9366691 },\n            { nominal: 90, mass: 89.9401 },\n            { nominal: 91, mass: 90.94596 },\n            { nominal: 92, mass: 91.94984 },\n            { nominal: 93, mass: 92.95629 },\n            { nominal: 94, mass: 93.96049 },\n            { nominal: 95, mass: 94.9673 },\n        ],\n        symbol: 'Se',\n        mass: 78.95938855701361,\n        name: 'Selenium',\n        monoisotopicMass: 79.9165218,\n    },\n    {\n        number: 35,\n        isotopes: [\n            { nominal: 67, mass: 66.96465 },\n            { nominal: 68, mass: 67.95873 },\n            { nominal: 69, mass: 68.950497 },\n            { nominal: 70, mass: 69.944792 },\n            { nominal: 71, mass: 70.9393422 },\n            { nominal: 72, mass: 71.9365886 },\n            { nominal: 73, mass: 72.9316715 },\n            { nominal: 74, mass: 73.9299102 },\n            { nominal: 75, mass: 74.9258105 },\n            { nominal: 76, mass: 75.924542 },\n            { nominal: 77, mass: 76.9213792 },\n            { nominal: 78, mass: 77.9211459 },\n            { nominal: 79, mass: 78.9183376, abundance: 0.5069 },\n            { nominal: 80, mass: 79.9185298 },\n            { nominal: 81, mass: 80.9162897, abundance: 0.4931 },\n            { nominal: 82, mass: 81.9168032 },\n            { nominal: 83, mass: 82.9151756 },\n            { nominal: 84, mass: 83.916496 },\n            { nominal: 85, mass: 84.9156458 },\n            { nominal: 86, mass: 85.9188054 },\n            { nominal: 87, mass: 86.920674 },\n            { nominal: 88, mass: 87.9240833 },\n            { nominal: 89, mass: 88.9267046 },\n            { nominal: 90, mass: 89.9312928 },\n            { nominal: 91, mass: 90.9343986 },\n            { nominal: 92, mass: 91.9396316 },\n            { nominal: 93, mass: 92.94313 },\n            { nominal: 94, mass: 93.9489 },\n            { nominal: 95, mass: 94.95301 },\n            { nominal: 96, mass: 95.95903 },\n            { nominal: 97, mass: 96.96344 },\n            { nominal: 98, mass: 97.96946 },\n        ],\n        symbol: 'Br',\n        mass: 79.90352778050999,\n        name: 'Bromine',\n        monoisotopicMass: 78.9183376,\n    },\n    {\n        number: 36,\n        isotopes: [\n            { nominal: 69, mass: 68.96518 },\n            { nominal: 70, mass: 69.95604 },\n            { nominal: 71, mass: 70.95027 },\n            { nominal: 72, mass: 71.9420924 },\n            { nominal: 73, mass: 72.9392892 },\n            { nominal: 74, mass: 73.933084 },\n            { nominal: 75, mass: 74.9309457 },\n            { nominal: 76, mass: 75.9259103 },\n            { nominal: 77, mass: 76.92467 },\n            { nominal: 78, mass: 77.92036494, abundance: 0.00355 },\n            { nominal: 79, mass: 78.9200829 },\n            { nominal: 80, mass: 79.91637808, abundance: 0.02286 },\n            { nominal: 81, mass: 80.9165912 },\n            { nominal: 82, mass: 81.91348273, abundance: 0.11593 },\n            { nominal: 83, mass: 82.91412716, abundance: 0.115 },\n            { nominal: 84, mass: 83.9114977282, abundance: 0.56987 },\n            { nominal: 85, mass: 84.9125273 },\n            { nominal: 86, mass: 85.9106106269, abundance: 0.17279 },\n            { nominal: 87, mass: 86.91335476 },\n            { nominal: 88, mass: 87.9144479 },\n            { nominal: 89, mass: 88.9178355 },\n            { nominal: 90, mass: 89.9195279 },\n            { nominal: 91, mass: 90.9238063 },\n            { nominal: 92, mass: 91.9261731 },\n            { nominal: 93, mass: 92.9311472 },\n            { nominal: 94, mass: 93.93414 },\n            { nominal: 95, mass: 94.939711 },\n            { nominal: 96, mass: 95.943017 },\n            { nominal: 97, mass: 96.94909 },\n            { nominal: 98, mass: 97.95243 },\n            { nominal: 99, mass: 98.95839 },\n            { nominal: 100, mass: 99.96237 },\n            { nominal: 101, mass: 100.96873 },\n        ],\n        symbol: 'Kr',\n        mass: 83.7979999953261,\n        name: 'Krypton',\n        monoisotopicMass: 83.9114977282,\n    },\n    {\n        number: 37,\n        isotopes: [\n            { nominal: 71, mass: 70.96532 },\n            { nominal: 72, mass: 71.95908 },\n            { nominal: 73, mass: 72.95053 },\n            { nominal: 74, mass: 73.9442659 },\n            { nominal: 75, mass: 74.9385732 },\n            { nominal: 76, mass: 75.935073 },\n            { nominal: 77, mass: 76.9304016 },\n            { nominal: 78, mass: 77.9281419 },\n            { nominal: 79, mass: 78.9239899 },\n            { nominal: 80, mass: 79.9225164 },\n            { nominal: 81, mass: 80.9189939 },\n            { nominal: 82, mass: 81.918209 },\n            { nominal: 83, mass: 82.9151142 },\n            { nominal: 84, mass: 83.9143752 },\n            { nominal: 85, mass: 84.9117897379, abundance: 0.7217 },\n            { nominal: 86, mass: 85.91116743 },\n            { nominal: 87, mass: 86.909180531, abundance: 0.2783 },\n            { nominal: 88, mass: 87.91131559 },\n            { nominal: 89, mass: 88.9122783 },\n            { nominal: 90, mass: 89.9147985 },\n            { nominal: 91, mass: 90.9165372 },\n            { nominal: 92, mass: 91.9197284 },\n            { nominal: 93, mass: 92.9220393 },\n            { nominal: 94, mass: 93.9263948 },\n            { nominal: 95, mass: 94.92926 },\n            { nominal: 96, mass: 95.9341334 },\n            { nominal: 97, mass: 96.9371771 },\n            { nominal: 98, mass: 97.9416869 },\n            { nominal: 99, mass: 98.94503 },\n            { nominal: 100, mass: 99.95003 },\n            { nominal: 101, mass: 100.95404 },\n            { nominal: 102, mass: 101.95952 },\n            { nominal: 103, mass: 102.96392 },\n        ],\n        symbol: 'Rb',\n        mass: 85.46766359561973,\n        name: 'Rubidium',\n        monoisotopicMass: 84.9117897379,\n    },\n    {\n        number: 38,\n        isotopes: [\n            { nominal: 73, mass: 72.9657 },\n            { nominal: 74, mass: 73.95617 },\n            { nominal: 75, mass: 74.94995 },\n            { nominal: 76, mass: 75.941763 },\n            { nominal: 77, mass: 76.9379455 },\n            { nominal: 78, mass: 77.93218 },\n            { nominal: 79, mass: 78.9297077 },\n            { nominal: 80, mass: 79.9245175 },\n            { nominal: 81, mass: 80.9232114 },\n            { nominal: 82, mass: 81.9183999 },\n            { nominal: 83, mass: 82.9175544 },\n            { nominal: 84, mass: 83.9134191, abundance: 0.0056 },\n            { nominal: 85, mass: 84.912932 },\n            { nominal: 86, mass: 85.9092606, abundance: 0.0986 },\n            { nominal: 87, mass: 86.9088775, abundance: 0.07 },\n            { nominal: 88, mass: 87.9056125, abundance: 0.8258 },\n            { nominal: 89, mass: 88.9074511 },\n            { nominal: 90, mass: 89.90773 },\n            { nominal: 91, mass: 90.9101954 },\n            { nominal: 92, mass: 91.9110382 },\n            { nominal: 93, mass: 92.9140242 },\n            { nominal: 94, mass: 93.9153556 },\n            { nominal: 95, mass: 94.9193529 },\n            { nominal: 96, mass: 95.9217066 },\n            { nominal: 97, mass: 96.926374 },\n            { nominal: 98, mass: 97.9286888 },\n            { nominal: 99, mass: 98.9328907 },\n            { nominal: 100, mass: 99.93577 },\n            { nominal: 101, mass: 100.940352 },\n            { nominal: 102, mass: 101.943791 },\n            { nominal: 103, mass: 102.94909 },\n            { nominal: 104, mass: 103.95265 },\n            { nominal: 105, mass: 104.95855 },\n            { nominal: 106, mass: 105.96265 },\n            { nominal: 107, mass: 106.96897 },\n        ],\n        symbol: 'Sr',\n        mass: 87.61664446962,\n        name: 'Strontium',\n        monoisotopicMass: 87.9056125,\n    },\n    {\n        number: 39,\n        isotopes: [\n            { nominal: 76, mass: 75.95856 },\n            { nominal: 77, mass: 76.949781 },\n            { nominal: 78, mass: 77.94361 },\n            { nominal: 79, mass: 78.93735 },\n            { nominal: 80, mass: 79.9343561 },\n            { nominal: 81, mass: 80.9294556 },\n            { nominal: 82, mass: 81.9269314 },\n            { nominal: 83, mass: 82.922485 },\n            { nominal: 84, mass: 83.9206721 },\n            { nominal: 85, mass: 84.916433 },\n            { nominal: 86, mass: 85.914886 },\n            { nominal: 87, mass: 86.9108761 },\n            { nominal: 88, mass: 87.9095016 },\n            { nominal: 89, mass: 88.9058403, abundance: 1 },\n            { nominal: 90, mass: 89.9071439 },\n            { nominal: 91, mass: 90.9072974 },\n            { nominal: 92, mass: 91.9089451 },\n            { nominal: 93, mass: 92.909578 },\n            { nominal: 94, mass: 93.9115906 },\n            { nominal: 95, mass: 94.9128161 },\n            { nominal: 96, mass: 95.9158968 },\n            { nominal: 97, mass: 96.9182741 },\n            { nominal: 98, mass: 97.9223821 },\n            { nominal: 99, mass: 98.924148 },\n            { nominal: 100, mass: 99.927715 },\n            { nominal: 101, mass: 100.9301477 },\n            { nominal: 102, mass: 101.9343277 },\n            { nominal: 103, mass: 102.937243 },\n            { nominal: 104, mass: 103.94196 },\n            { nominal: 105, mass: 104.94544 },\n            { nominal: 106, mass: 105.95056 },\n            { nominal: 107, mass: 106.95452 },\n            { nominal: 108, mass: 107.95996 },\n            { nominal: 109, mass: 108.96436 },\n        ],\n        symbol: 'Y',\n        mass: 88.9058403,\n        name: 'Yttrium',\n        monoisotopicMass: 88.9058403,\n    },\n    {\n        number: 40,\n        isotopes: [\n            { nominal: 78, mass: 77.95566 },\n            { nominal: 79, mass: 78.94948 },\n            { nominal: 80, mass: 79.9404 },\n            { nominal: 81, mass: 80.93731 },\n            { nominal: 82, mass: 81.93135 },\n            { nominal: 83, mass: 82.9292421 },\n            { nominal: 84, mass: 83.9233269 },\n            { nominal: 85, mass: 84.9214444 },\n            { nominal: 86, mass: 85.9162972 },\n            { nominal: 87, mass: 86.914818 },\n            { nominal: 88, mass: 87.9102213 },\n            { nominal: 89, mass: 88.9088814 },\n            { nominal: 90, mass: 89.9046977, abundance: 0.5145 },\n            { nominal: 91, mass: 90.9056396, abundance: 0.1122 },\n            { nominal: 92, mass: 91.9050347, abundance: 0.1715 },\n            { nominal: 93, mass: 92.9064699 },\n            { nominal: 94, mass: 93.9063108, abundance: 0.1738 },\n            { nominal: 95, mass: 94.9080385 },\n            { nominal: 96, mass: 95.9082714, abundance: 0.028 },\n            { nominal: 97, mass: 96.9109512 },\n            { nominal: 98, mass: 97.9127289 },\n            { nominal: 99, mass: 98.916667 },\n            { nominal: 100, mass: 99.9180006 },\n            { nominal: 101, mass: 100.921448 },\n            { nominal: 102, mass: 101.9231409 },\n            { nominal: 103, mass: 102.927191 },\n            { nominal: 104, mass: 103.929436 },\n            { nominal: 105, mass: 104.934008 },\n            { nominal: 106, mass: 105.93676 },\n            { nominal: 107, mass: 106.94174 },\n            { nominal: 108, mass: 107.94487 },\n            { nominal: 109, mass: 108.95041 },\n            { nominal: 110, mass: 109.95396 },\n            { nominal: 111, mass: 110.95968 },\n            { nominal: 112, mass: 111.9637 },\n        ],\n        symbol: 'Zr',\n        mass: 91.22364159706,\n        name: 'Zirconium',\n        monoisotopicMass: 89.9046977,\n    },\n    {\n        number: 41,\n        isotopes: [\n            { nominal: 81, mass: 80.9496 },\n            { nominal: 82, mass: 81.94396 },\n            { nominal: 83, mass: 82.93729 },\n            { nominal: 84, mass: 83.93449 },\n            { nominal: 85, mass: 84.9288458 },\n            { nominal: 86, mass: 85.9257828 },\n            { nominal: 87, mass: 86.9206937 },\n            { nominal: 88, mass: 87.918222 },\n            { nominal: 89, mass: 88.913445 },\n            { nominal: 90, mass: 89.9112584 },\n            { nominal: 91, mass: 90.9069897 },\n            { nominal: 92, mass: 91.9071881 },\n            { nominal: 93, mass: 92.906373, abundance: 1 },\n            { nominal: 94, mass: 93.9072788 },\n            { nominal: 95, mass: 94.9068324 },\n            { nominal: 96, mass: 95.9080973 },\n            { nominal: 97, mass: 96.9080959 },\n            { nominal: 98, mass: 97.9103265 },\n            { nominal: 99, mass: 98.911613 },\n            { nominal: 100, mass: 99.9143276 },\n            { nominal: 101, mass: 100.9153103 },\n            { nominal: 102, mass: 101.9180772 },\n            { nominal: 103, mass: 102.9194572 },\n            { nominal: 104, mass: 103.9228925 },\n            { nominal: 105, mass: 104.9249465 },\n            { nominal: 106, mass: 105.9289317 },\n            { nominal: 107, mass: 106.9315937 },\n            { nominal: 108, mass: 107.9360748 },\n            { nominal: 109, mass: 108.93922 },\n            { nominal: 110, mass: 109.94403 },\n            { nominal: 111, mass: 110.94753 },\n            { nominal: 112, mass: 111.95247 },\n            { nominal: 113, mass: 112.95651 },\n            { nominal: 114, mass: 113.96201 },\n            { nominal: 115, mass: 114.96634 },\n        ],\n        symbol: 'Nb',\n        mass: 92.906373,\n        name: 'Niobium',\n        monoisotopicMass: 92.906373,\n    },\n    {\n        number: 42,\n        isotopes: [\n            { nominal: 83, mass: 82.94988 },\n            { nominal: 84, mass: 83.94149 },\n            { nominal: 85, mass: 84.938261 },\n            { nominal: 86, mass: 85.9311748 },\n            { nominal: 87, mass: 86.9281962 },\n            { nominal: 88, mass: 87.9219678 },\n            { nominal: 89, mass: 88.9194682 },\n            { nominal: 90, mass: 89.9139309 },\n            { nominal: 91, mass: 90.9117453 },\n            { nominal: 92, mass: 91.90680796, abundance: 0.1453 },\n            { nominal: 93, mass: 92.90680958 },\n            { nominal: 94, mass: 93.9050849, abundance: 0.0915 },\n            { nominal: 95, mass: 94.90583877, abundance: 0.1584 },\n            { nominal: 96, mass: 95.90467612, abundance: 0.1667 },\n            { nominal: 97, mass: 96.90601812, abundance: 0.096 },\n            { nominal: 98, mass: 97.90540482, abundance: 0.2439 },\n            { nominal: 99, mass: 98.90770851 },\n            { nominal: 100, mass: 99.9074718, abundance: 0.0982 },\n            { nominal: 101, mass: 100.9103414 },\n            { nominal: 102, mass: 101.9102834 },\n            { nominal: 103, mass: 102.913079 },\n            { nominal: 104, mass: 103.9137344 },\n            { nominal: 105, mass: 104.916969 },\n            { nominal: 106, mass: 105.918259 },\n            { nominal: 107, mass: 106.922106 },\n            { nominal: 108, mass: 107.924033 },\n            { nominal: 109, mass: 108.928424 },\n            { nominal: 110, mass: 109.930704 },\n            { nominal: 111, mass: 110.935654 },\n            { nominal: 112, mass: 111.93831 },\n            { nominal: 113, mass: 112.94335 },\n            { nominal: 114, mass: 113.94653 },\n            { nominal: 115, mass: 114.95196 },\n            { nominal: 116, mass: 115.95545 },\n            { nominal: 117, mass: 116.96117 },\n        ],\n        symbol: 'Mo',\n        mass: 95.959788541188,\n        name: 'Molybdenum',\n        monoisotopicMass: 97.90540482,\n    },\n    {\n        number: 43,\n        isotopes: [\n            { nominal: 85, mass: 84.95058 },\n            { nominal: 86, mass: 85.94493 },\n            { nominal: 87, mass: 86.9380672 },\n            { nominal: 88, mass: 87.93378 },\n            { nominal: 89, mass: 88.9276487 },\n            { nominal: 90, mass: 89.9240739 },\n            { nominal: 91, mass: 90.9184254 },\n            { nominal: 92, mass: 91.9152698 },\n            { nominal: 93, mass: 92.910246 },\n            { nominal: 94, mass: 93.9096536 },\n            { nominal: 95, mass: 94.9076536 },\n            { nominal: 96, mass: 95.907868 },\n            { nominal: 97, mass: 96.9063667 },\n            { nominal: 98, mass: 97.9072124 },\n            { nominal: 99, mass: 98.9062508 },\n            { nominal: 100, mass: 99.9076539 },\n            { nominal: 101, mass: 100.907309 },\n            { nominal: 102, mass: 101.9092097 },\n            { nominal: 103, mass: 102.909176 },\n            { nominal: 104, mass: 103.911425 },\n            { nominal: 105, mass: 104.911655 },\n            { nominal: 106, mass: 105.914358 },\n            { nominal: 107, mass: 106.9154606 },\n            { nominal: 108, mass: 107.9184957 },\n            { nominal: 109, mass: 108.920256 },\n            { nominal: 110, mass: 109.923744 },\n            { nominal: 111, mass: 110.925901 },\n            { nominal: 112, mass: 111.9299458 },\n            { nominal: 113, mass: 112.932569 },\n            { nominal: 114, mass: 113.93691 },\n            { nominal: 115, mass: 114.93998 },\n            { nominal: 116, mass: 115.94476 },\n            { nominal: 117, mass: 116.94806 },\n            { nominal: 118, mass: 117.95299 },\n            { nominal: 119, mass: 118.95666 },\n            { nominal: 120, mass: 119.96187 },\n        ],\n        symbol: 'Tc',\n        mass: null,\n        name: 'Technetium',\n    },\n    {\n        number: 44,\n        isotopes: [\n            { nominal: 87, mass: 86.95069 },\n            { nominal: 88, mass: 87.9416 },\n            { nominal: 89, mass: 88.93762 },\n            { nominal: 90, mass: 89.9303444 },\n            { nominal: 91, mass: 90.9267419 },\n            { nominal: 92, mass: 91.9202344 },\n            { nominal: 93, mass: 92.9171044 },\n            { nominal: 94, mass: 93.9113429 },\n            { nominal: 95, mass: 94.910406 },\n            { nominal: 96, mass: 95.90759025, abundance: 0.0554 },\n            { nominal: 97, mass: 96.9075471 },\n            { nominal: 98, mass: 97.9052868, abundance: 0.0187 },\n            { nominal: 99, mass: 98.9059341, abundance: 0.1276 },\n            { nominal: 100, mass: 99.9042143, abundance: 0.126 },\n            { nominal: 101, mass: 100.9055769, abundance: 0.1706 },\n            { nominal: 102, mass: 101.9043441, abundance: 0.3155 },\n            { nominal: 103, mass: 102.9063186 },\n            { nominal: 104, mass: 103.9054275, abundance: 0.1862 },\n            { nominal: 105, mass: 104.9077476 },\n            { nominal: 106, mass: 105.9073291 },\n            { nominal: 107, mass: 106.909972 },\n            { nominal: 108, mass: 107.910188 },\n            { nominal: 109, mass: 108.913326 },\n            { nominal: 110, mass: 109.9140407 },\n            { nominal: 111, mass: 110.91757 },\n            { nominal: 112, mass: 111.918809 },\n            { nominal: 113, mass: 112.922844 },\n            { nominal: 114, mass: 113.9246136 },\n            { nominal: 115, mass: 114.92882 },\n            { nominal: 116, mass: 115.9312192 },\n            { nominal: 117, mass: 116.9361 },\n            { nominal: 118, mass: 117.93853 },\n            { nominal: 119, mass: 118.94357 },\n            { nominal: 120, mass: 119.94631 },\n            { nominal: 121, mass: 120.95164 },\n            { nominal: 122, mass: 121.95447 },\n            { nominal: 123, mass: 122.95989 },\n            { nominal: 124, mass: 123.96305 },\n        ],\n        symbol: 'Ru',\n        mass: 101.06494013916,\n        name: 'Ruthenium',\n        monoisotopicMass: 101.9043441,\n    },\n    {\n        number: 45,\n        isotopes: [\n            { nominal: 89, mass: 88.95058 },\n            { nominal: 90, mass: 89.94422 },\n            { nominal: 91, mass: 90.93688 },\n            { nominal: 92, mass: 91.9323677 },\n            { nominal: 93, mass: 92.9259128 },\n            { nominal: 94, mass: 93.9217305 },\n            { nominal: 95, mass: 94.9158979 },\n            { nominal: 96, mass: 95.914453 },\n            { nominal: 97, mass: 96.911329 },\n            { nominal: 98, mass: 97.910708 },\n            { nominal: 99, mass: 98.9081282 },\n            { nominal: 100, mass: 99.908117 },\n            { nominal: 101, mass: 100.9061606 },\n            { nominal: 102, mass: 101.9068374 },\n            { nominal: 103, mass: 102.905498, abundance: 1 },\n            { nominal: 104, mass: 103.9066492 },\n            { nominal: 105, mass: 104.9056885 },\n            { nominal: 106, mass: 105.9072868 },\n            { nominal: 107, mass: 106.906748 },\n            { nominal: 108, mass: 107.908714 },\n            { nominal: 109, mass: 108.9087488 },\n            { nominal: 110, mass: 109.911079 },\n            { nominal: 111, mass: 110.9116423 },\n            { nominal: 112, mass: 111.914403 },\n            { nominal: 113, mass: 112.9154393 },\n            { nominal: 114, mass: 113.918718 },\n            { nominal: 115, mass: 114.9203116 },\n            { nominal: 116, mass: 115.924059 },\n            { nominal: 117, mass: 116.9260354 },\n            { nominal: 118, mass: 117.93034 },\n            { nominal: 119, mass: 118.932557 },\n            { nominal: 120, mass: 119.93686 },\n            { nominal: 121, mass: 120.93942 },\n            { nominal: 122, mass: 121.94399 },\n            { nominal: 123, mass: 122.94685 },\n            { nominal: 124, mass: 123.95151 },\n            { nominal: 125, mass: 124.95469 },\n            { nominal: 126, mass: 125.95946 },\n        ],\n        symbol: 'Rh',\n        mass: 102.905498,\n        name: 'Rhodium',\n        monoisotopicMass: 102.905498,\n    },\n    {\n        number: 46,\n        isotopes: [\n            { nominal: 91, mass: 90.95032 },\n            { nominal: 92, mass: 91.94088 },\n            { nominal: 93, mass: 92.93651 },\n            { nominal: 94, mass: 93.9290376 },\n            { nominal: 95, mass: 94.9248898 },\n            { nominal: 96, mass: 95.9182151 },\n            { nominal: 97, mass: 96.916472 },\n            { nominal: 98, mass: 97.9126983 },\n            { nominal: 99, mass: 98.9117748 },\n            { nominal: 100, mass: 99.908505 },\n            { nominal: 101, mass: 100.9082864 },\n            { nominal: 102, mass: 101.9056022, abundance: 0.0102 },\n            { nominal: 103, mass: 102.9060809 },\n            { nominal: 104, mass: 103.9040305, abundance: 0.1114 },\n            { nominal: 105, mass: 104.9050796, abundance: 0.2233 },\n            { nominal: 106, mass: 105.9034804, abundance: 0.2733 },\n            { nominal: 107, mass: 106.9051282 },\n            { nominal: 108, mass: 107.9038916, abundance: 0.2646 },\n            { nominal: 109, mass: 108.9059504 },\n            { nominal: 110, mass: 109.9051722, abundance: 0.1172 },\n            { nominal: 111, mass: 110.90768968 },\n            { nominal: 112, mass: 111.9073297 },\n            { nominal: 113, mass: 112.910261 },\n            { nominal: 114, mass: 113.9103686 },\n            { nominal: 115, mass: 114.913659 },\n            { nominal: 116, mass: 115.914297 },\n            { nominal: 117, mass: 116.9179547 },\n            { nominal: 118, mass: 117.9190667 },\n            { nominal: 119, mass: 118.9233402 },\n            { nominal: 120, mass: 119.9245511 },\n            { nominal: 121, mass: 120.9289503 },\n            { nominal: 122, mass: 121.930632 },\n            { nominal: 123, mass: 122.93514 },\n            { nominal: 124, mass: 123.93714 },\n            { nominal: 125, mass: 124.94179 },\n            { nominal: 126, mass: 125.94416 },\n            { nominal: 127, mass: 126.94907 },\n            { nominal: 128, mass: 127.95183 },\n        ],\n        symbol: 'Pd',\n        mass: 106.41532750734,\n        name: 'Palladium',\n        monoisotopicMass: 105.9034804,\n    },\n    {\n        number: 47,\n        isotopes: [\n            { nominal: 93, mass: 92.95033 },\n            { nominal: 94, mass: 93.94373 },\n            { nominal: 95, mass: 94.93602 },\n            { nominal: 96, mass: 95.930744 },\n            { nominal: 97, mass: 96.92397 },\n            { nominal: 98, mass: 97.92156 },\n            { nominal: 99, mass: 98.9176458 },\n            { nominal: 100, mass: 99.9161154 },\n            { nominal: 101, mass: 100.912684 },\n            { nominal: 102, mass: 101.9117047 },\n            { nominal: 103, mass: 102.9089631 },\n            { nominal: 104, mass: 103.9086239 },\n            { nominal: 105, mass: 104.9065256 },\n            { nominal: 106, mass: 105.9066636 },\n            { nominal: 107, mass: 106.9050916, abundance: 0.51839 },\n            { nominal: 108, mass: 107.9059503 },\n            { nominal: 109, mass: 108.9047553, abundance: 0.48161 },\n            { nominal: 110, mass: 109.9061102 },\n            { nominal: 111, mass: 110.9052959 },\n            { nominal: 112, mass: 111.9070486 },\n            { nominal: 113, mass: 112.906573 },\n            { nominal: 114, mass: 113.908823 },\n            { nominal: 115, mass: 114.908767 },\n            { nominal: 116, mass: 115.9113868 },\n            { nominal: 117, mass: 116.911774 },\n            { nominal: 118, mass: 117.9145955 },\n            { nominal: 119, mass: 118.91557 },\n            { nominal: 120, mass: 119.9187848 },\n            { nominal: 121, mass: 120.920125 },\n            { nominal: 122, mass: 121.923664 },\n            { nominal: 123, mass: 122.925337 },\n            { nominal: 124, mass: 123.92893 },\n            { nominal: 125, mass: 124.93105 },\n            { nominal: 126, mass: 125.93475 },\n            { nominal: 127, mass: 126.93711 },\n            { nominal: 128, mass: 127.94106 },\n            { nominal: 129, mass: 128.94395 },\n            { nominal: 130, mass: 129.9507 },\n        ],\n        symbol: 'Ag',\n        mass: 107.868149634557,\n        name: 'Silver',\n        monoisotopicMass: 106.9050916,\n    },\n    {\n        number: 48,\n        isotopes: [\n            { nominal: 95, mass: 94.94994 },\n            { nominal: 96, mass: 95.94034 },\n            { nominal: 97, mass: 96.9351 },\n            { nominal: 98, mass: 97.927389 },\n            { nominal: 99, mass: 98.9249258 },\n            { nominal: 100, mass: 99.9203488 },\n            { nominal: 101, mass: 100.9185862 },\n            { nominal: 102, mass: 101.914482 },\n            { nominal: 103, mass: 102.9134165 },\n            { nominal: 104, mass: 103.9098564 },\n            { nominal: 105, mass: 104.9094639 },\n            { nominal: 106, mass: 105.9064599, abundance: 0.0125 },\n            { nominal: 107, mass: 106.9066121 },\n            { nominal: 108, mass: 107.9041834, abundance: 0.0089 },\n            { nominal: 109, mass: 108.9049867 },\n            { nominal: 110, mass: 109.90300661, abundance: 0.1249 },\n            { nominal: 111, mass: 110.90418287, abundance: 0.128 },\n            { nominal: 112, mass: 111.90276287, abundance: 0.2413 },\n            { nominal: 113, mass: 112.90440813, abundance: 0.1222 },\n            { nominal: 114, mass: 113.90336509, abundance: 0.2873 },\n            { nominal: 115, mass: 114.90543751 },\n            { nominal: 116, mass: 115.90476315, abundance: 0.0749 },\n            { nominal: 117, mass: 116.907226 },\n            { nominal: 118, mass: 117.906922 },\n            { nominal: 119, mass: 118.909847 },\n            { nominal: 120, mass: 119.9098681 },\n            { nominal: 121, mass: 120.9129637 },\n            { nominal: 122, mass: 121.9134591 },\n            { nominal: 123, mass: 122.9168925 },\n            { nominal: 124, mass: 123.9176574 },\n            { nominal: 125, mass: 124.9212576 },\n            { nominal: 126, mass: 125.9224291 },\n            { nominal: 127, mass: 126.926472 },\n            { nominal: 128, mass: 127.9278129 },\n            { nominal: 129, mass: 128.93182 },\n            { nominal: 130, mass: 129.93394 },\n            { nominal: 131, mass: 130.9406 },\n            { nominal: 132, mass: 131.94604 },\n            { nominal: 133, mass: 132.95285 },\n        ],\n        symbol: 'Cd',\n        mass: 112.411557818268,\n        name: 'Cadmium',\n        monoisotopicMass: 113.90336509,\n    },\n    {\n        number: 49,\n        isotopes: [\n            { nominal: 97, mass: 96.94934 },\n            { nominal: 98, mass: 97.94214 },\n            { nominal: 99, mass: 98.93411 },\n            { nominal: 100, mass: 99.93096 },\n            { nominal: 101, mass: 100.92634 },\n            { nominal: 102, mass: 101.9241071 },\n            { nominal: 103, mass: 102.9198819 },\n            { nominal: 104, mass: 103.9182145 },\n            { nominal: 105, mass: 104.914502 },\n            { nominal: 106, mass: 105.913464 },\n            { nominal: 107, mass: 106.91029 },\n            { nominal: 108, mass: 107.9096935 },\n            { nominal: 109, mass: 108.9071514 },\n            { nominal: 110, mass: 109.90717 },\n            { nominal: 111, mass: 110.9051085 },\n            { nominal: 112, mass: 111.9055377 },\n            { nominal: 113, mass: 112.90406184, abundance: 0.0429 },\n            { nominal: 114, mass: 113.90491791 },\n            { nominal: 115, mass: 114.903878776, abundance: 0.9571 },\n            { nominal: 116, mass: 115.90525999 },\n            { nominal: 117, mass: 116.9045157 },\n            { nominal: 118, mass: 117.9063566 },\n            { nominal: 119, mass: 118.9058507 },\n            { nominal: 120, mass: 119.907967 },\n            { nominal: 121, mass: 120.907851 },\n            { nominal: 122, mass: 121.910281 },\n            { nominal: 123, mass: 122.910434 },\n            { nominal: 124, mass: 123.913182 },\n            { nominal: 125, mass: 124.913605 },\n            { nominal: 126, mass: 125.916507 },\n            { nominal: 127, mass: 126.917446 },\n            { nominal: 128, mass: 127.9204 },\n            { nominal: 129, mass: 128.9218053 },\n            { nominal: 130, mass: 129.924977 },\n            { nominal: 131, mass: 130.9269715 },\n            { nominal: 132, mass: 131.933001 },\n            { nominal: 133, mass: 132.93831 },\n            { nominal: 134, mass: 133.94454 },\n            { nominal: 135, mass: 134.95005 },\n        ],\n        symbol: 'In',\n        mass: 114.81808662944559,\n        name: 'Indium',\n        monoisotopicMass: 114.903878776,\n    },\n    {\n        number: 50,\n        isotopes: [\n            { nominal: 99, mass: 98.94853 },\n            { nominal: 100, mass: 99.9385 },\n            { nominal: 101, mass: 100.93526 },\n            { nominal: 102, mass: 101.93029 },\n            { nominal: 103, mass: 102.928105 },\n            { nominal: 104, mass: 103.9231052 },\n            { nominal: 105, mass: 104.9212684 },\n            { nominal: 106, mass: 105.9169574 },\n            { nominal: 107, mass: 106.9157137 },\n            { nominal: 108, mass: 107.9118943 },\n            { nominal: 109, mass: 108.9112921 },\n            { nominal: 110, mass: 109.907845 },\n            { nominal: 111, mass: 110.9077401 },\n            { nominal: 112, mass: 111.90482387, abundance: 0.0097 },\n            { nominal: 113, mass: 112.9051757 },\n            { nominal: 114, mass: 113.9027827, abundance: 0.0066 },\n            { nominal: 115, mass: 114.903344699, abundance: 0.0034 },\n            { nominal: 116, mass: 115.9017428, abundance: 0.1454 },\n            { nominal: 117, mass: 116.90295398, abundance: 0.0768 },\n            { nominal: 118, mass: 117.90160657, abundance: 0.2422 },\n            { nominal: 119, mass: 118.90331117, abundance: 0.0859 },\n            { nominal: 120, mass: 119.90220163, abundance: 0.3258 },\n            { nominal: 121, mass: 120.9042426 },\n            { nominal: 122, mass: 121.9034438, abundance: 0.0463 },\n            { nominal: 123, mass: 122.9057252 },\n            { nominal: 124, mass: 123.9052766, abundance: 0.0579 },\n            { nominal: 125, mass: 124.9077864 },\n            { nominal: 126, mass: 125.907659 },\n            { nominal: 127, mass: 126.91039 },\n            { nominal: 128, mass: 127.910507 },\n            { nominal: 129, mass: 128.913465 },\n            { nominal: 130, mass: 129.9139738 },\n            { nominal: 131, mass: 130.917045 },\n            { nominal: 132, mass: 131.9178267 },\n            { nominal: 133, mass: 132.9239134 },\n            { nominal: 134, mass: 133.9286821 },\n            { nominal: 135, mass: 134.9349086 },\n            { nominal: 136, mass: 135.93999 },\n            { nominal: 137, mass: 136.94655 },\n            { nominal: 138, mass: 137.95184 },\n        ],\n        symbol: 'Sn',\n        mass: 118.71011259301059,\n        name: 'Tin',\n        monoisotopicMass: 119.90220163,\n    },\n    {\n        number: 51,\n        isotopes: [\n            { nominal: 103, mass: 102.93969 },\n            { nominal: 104, mass: 103.93648 },\n            { nominal: 105, mass: 104.931276 },\n            { nominal: 106, mass: 105.928638 },\n            { nominal: 107, mass: 106.9241506 },\n            { nominal: 108, mass: 107.9222267 },\n            { nominal: 109, mass: 108.9181411 },\n            { nominal: 110, mass: 109.9168543 },\n            { nominal: 111, mass: 110.9132182 },\n            { nominal: 112, mass: 111.9124 },\n            { nominal: 113, mass: 112.909375 },\n            { nominal: 114, mass: 113.90929 },\n            { nominal: 115, mass: 114.906598 },\n            { nominal: 116, mass: 115.9067931 },\n            { nominal: 117, mass: 116.9048415 },\n            { nominal: 118, mass: 117.9055321 },\n            { nominal: 119, mass: 118.9039455 },\n            { nominal: 120, mass: 119.9050794 },\n            { nominal: 121, mass: 120.903812, abundance: 0.5721 },\n            { nominal: 122, mass: 121.9051699 },\n            { nominal: 123, mass: 122.9042132, abundance: 0.4279 },\n            { nominal: 124, mass: 123.905935 },\n            { nominal: 125, mass: 124.905253 },\n            { nominal: 126, mass: 125.907253 },\n            { nominal: 127, mass: 126.9069243 },\n            { nominal: 128, mass: 127.909146 },\n            { nominal: 129, mass: 128.909147 },\n            { nominal: 130, mass: 129.911662 },\n            { nominal: 131, mass: 130.9119888 },\n            { nominal: 132, mass: 131.9145077 },\n            { nominal: 133, mass: 132.9152732 },\n            { nominal: 134, mass: 133.9205357 },\n            { nominal: 135, mass: 134.9251851 },\n            { nominal: 136, mass: 135.9307459 },\n            { nominal: 137, mass: 136.93555 },\n            { nominal: 138, mass: 137.94145 },\n            { nominal: 139, mass: 138.94655 },\n            { nominal: 140, mass: 139.95283 },\n        ],\n        symbol: 'Sb',\n        mass: 121.75978367348,\n        name: 'Antimony',\n        monoisotopicMass: 120.903812,\n    },\n    {\n        number: 52,\n        isotopes: [\n            { nominal: 105, mass: 104.9433 },\n            { nominal: 106, mass: 105.9375 },\n            { nominal: 107, mass: 106.935012 },\n            { nominal: 108, mass: 107.9293805 },\n            { nominal: 109, mass: 108.9273045 },\n            { nominal: 110, mass: 109.9224581 },\n            { nominal: 111, mass: 110.9210006 },\n            { nominal: 112, mass: 111.9167279 },\n            { nominal: 113, mass: 112.915891 },\n            { nominal: 114, mass: 113.912089 },\n            { nominal: 115, mass: 114.911902 },\n            { nominal: 116, mass: 115.90846 },\n            { nominal: 117, mass: 116.908646 },\n            { nominal: 118, mass: 117.905854 },\n            { nominal: 119, mass: 118.9064071 },\n            { nominal: 120, mass: 119.9040593, abundance: 0.0009 },\n            { nominal: 121, mass: 120.904944 },\n            { nominal: 122, mass: 121.9030435, abundance: 0.0255 },\n            { nominal: 123, mass: 122.9042698, abundance: 0.0089 },\n            { nominal: 124, mass: 123.9028171, abundance: 0.0474 },\n            { nominal: 125, mass: 124.9044299, abundance: 0.0707 },\n            { nominal: 126, mass: 125.9033109, abundance: 0.1884 },\n            { nominal: 127, mass: 126.9052257 },\n            { nominal: 128, mass: 127.90446128, abundance: 0.3174 },\n            { nominal: 129, mass: 128.90659646 },\n            { nominal: 130, mass: 129.906222748, abundance: 0.3408 },\n            { nominal: 131, mass: 130.908522213 },\n            { nominal: 132, mass: 131.9085467 },\n            { nominal: 133, mass: 132.9109688 },\n            { nominal: 134, mass: 133.911394 },\n            { nominal: 135, mass: 134.9165557 },\n            { nominal: 136, mass: 135.9201006 },\n            { nominal: 137, mass: 136.9255989 },\n            { nominal: 138, mass: 137.9294722 },\n            { nominal: 139, mass: 138.9353672 },\n            { nominal: 140, mass: 139.939499 },\n            { nominal: 141, mass: 140.9458 },\n            { nominal: 142, mass: 141.95022 },\n            { nominal: 143, mass: 142.95676 },\n        ],\n        symbol: 'Te',\n        mass: 127.6031264846604,\n        name: 'Tellurium',\n        monoisotopicMass: 129.906222748,\n    },\n    {\n        number: 53,\n        isotopes: [\n            { nominal: 107, mass: 106.94678 },\n            { nominal: 108, mass: 107.94348 },\n            { nominal: 109, mass: 108.9380853 },\n            { nominal: 110, mass: 109.935089 },\n            { nominal: 111, mass: 110.9302692 },\n            { nominal: 112, mass: 111.928005 },\n            { nominal: 113, mass: 112.9236501 },\n            { nominal: 114, mass: 113.92185 },\n            { nominal: 115, mass: 114.918048 },\n            { nominal: 116, mass: 115.91681 },\n            { nominal: 117, mass: 116.913648 },\n            { nominal: 118, mass: 117.913074 },\n            { nominal: 119, mass: 118.910074 },\n            { nominal: 120, mass: 119.910087 },\n            { nominal: 121, mass: 120.9074051 },\n            { nominal: 122, mass: 121.9075888 },\n            { nominal: 123, mass: 122.9055885 },\n            { nominal: 124, mass: 123.906209 },\n            { nominal: 125, mass: 124.9046294 },\n            { nominal: 126, mass: 125.9056233 },\n            { nominal: 127, mass: 126.9044719, abundance: 1 },\n            { nominal: 128, mass: 127.9058086 },\n            { nominal: 129, mass: 128.9049837 },\n            { nominal: 130, mass: 129.9066702 },\n            { nominal: 131, mass: 130.9061263 },\n            { nominal: 132, mass: 131.9079935 },\n            { nominal: 133, mass: 132.907797 },\n            { nominal: 134, mass: 133.9097588 },\n            { nominal: 135, mass: 134.9100488 },\n            { nominal: 136, mass: 135.914604 },\n            { nominal: 137, mass: 136.9180282 },\n            { nominal: 138, mass: 137.9227264 },\n            { nominal: 139, mass: 138.926506 },\n            { nominal: 140, mass: 139.93173 },\n            { nominal: 141, mass: 140.93569 },\n            { nominal: 142, mass: 141.9412 },\n            { nominal: 143, mass: 142.94565 },\n            { nominal: 144, mass: 143.95139 },\n            { nominal: 145, mass: 144.95605 },\n        ],\n        symbol: 'I',\n        mass: 126.9044719,\n        name: 'Iodine',\n        monoisotopicMass: 126.9044719,\n    },\n    {\n        number: 54,\n        isotopes: [\n            { nominal: 109, mass: 108.95043 },\n            { nominal: 110, mass: 109.94426 },\n            { nominal: 111, mass: 110.941607 },\n            { nominal: 112, mass: 111.935559 },\n            { nominal: 113, mass: 112.9332217 },\n            { nominal: 114, mass: 113.92798 },\n            { nominal: 115, mass: 114.926294 },\n            { nominal: 116, mass: 115.921581 },\n            { nominal: 117, mass: 116.920359 },\n            { nominal: 118, mass: 117.916179 },\n            { nominal: 119, mass: 118.915411 },\n            { nominal: 120, mass: 119.911784 },\n            { nominal: 121, mass: 120.911453 },\n            { nominal: 122, mass: 121.908368 },\n            { nominal: 123, mass: 122.908482 },\n            { nominal: 124, mass: 123.905892, abundance: 0.000952 },\n            { nominal: 125, mass: 124.9063944 },\n            { nominal: 126, mass: 125.9042983, abundance: 0.00089 },\n            { nominal: 127, mass: 126.9051829 },\n            { nominal: 128, mass: 127.903531, abundance: 0.019102 },\n            { nominal: 129, mass: 128.9047808611, abundance: 0.264006 },\n            { nominal: 130, mass: 129.903509349, abundance: 0.04071 },\n            { nominal: 131, mass: 130.90508406, abundance: 0.212324 },\n            { nominal: 132, mass: 131.9041550856, abundance: 0.269086 },\n            { nominal: 133, mass: 132.9059108 },\n            { nominal: 134, mass: 133.90539466, abundance: 0.104357 },\n            { nominal: 135, mass: 134.9072278 },\n            { nominal: 136, mass: 135.907214484, abundance: 0.088573 },\n            { nominal: 137, mass: 136.91155778 },\n            { nominal: 138, mass: 137.9141463 },\n            { nominal: 139, mass: 138.9187922 },\n            { nominal: 140, mass: 139.9216458 },\n            { nominal: 141, mass: 140.9267872 },\n            { nominal: 142, mass: 141.9299731 },\n            { nominal: 143, mass: 142.9353696 },\n            { nominal: 144, mass: 143.9389451 },\n            { nominal: 145, mass: 144.94472 },\n            { nominal: 146, mass: 145.948518 },\n            { nominal: 147, mass: 146.95426 },\n            { nominal: 148, mass: 147.95813 },\n        ],\n        symbol: 'Xe',\n        mass: 131.29276144779053,\n        name: 'Xenon',\n        monoisotopicMass: 131.9041550856,\n    },\n    {\n        number: 55,\n        isotopes: [\n            { nominal: 112, mass: 111.950309 },\n            { nominal: 113, mass: 112.9444291 },\n            { nominal: 114, mass: 113.941296 },\n            { nominal: 115, mass: 114.93591 },\n            { nominal: 116, mass: 115.93337 },\n            { nominal: 117, mass: 116.928617 },\n            { nominal: 118, mass: 117.92656 },\n            { nominal: 119, mass: 118.922377 },\n            { nominal: 120, mass: 119.920677 },\n            { nominal: 121, mass: 120.917227 },\n            { nominal: 122, mass: 121.916108 },\n            { nominal: 123, mass: 122.912996 },\n            { nominal: 124, mass: 123.9122578 },\n            { nominal: 125, mass: 124.909728 },\n            { nominal: 126, mass: 125.909446 },\n            { nominal: 127, mass: 126.9074174 },\n            { nominal: 128, mass: 127.9077487 },\n            { nominal: 129, mass: 128.9060657 },\n            { nominal: 130, mass: 129.9067093 },\n            { nominal: 131, mass: 130.9054649 },\n            { nominal: 132, mass: 131.9064339 },\n            { nominal: 133, mass: 132.905451961, abundance: 1 },\n            { nominal: 134, mass: 133.906718503 },\n            { nominal: 135, mass: 134.905977 },\n            { nominal: 136, mass: 135.9073114 },\n            { nominal: 137, mass: 136.90708923 },\n            { nominal: 138, mass: 137.9110171 },\n            { nominal: 139, mass: 138.9133638 },\n            { nominal: 140, mass: 139.9172831 },\n            { nominal: 141, mass: 140.9200455 },\n            { nominal: 142, mass: 141.924296 },\n            { nominal: 143, mass: 142.927349 },\n            { nominal: 144, mass: 143.932076 },\n            { nominal: 145, mass: 144.935527 },\n            { nominal: 146, mass: 145.940344 },\n            { nominal: 147, mass: 146.944156 },\n            { nominal: 148, mass: 147.94923 },\n            { nominal: 149, mass: 148.95302 },\n            { nominal: 150, mass: 149.95833 },\n            { nominal: 151, mass: 150.96258 },\n        ],\n        symbol: 'Cs',\n        mass: 132.905451961,\n        name: 'Caesium',\n        monoisotopicMass: 132.905451961,\n    },\n    {\n        number: 56,\n        isotopes: [\n            { nominal: 114, mass: 113.95066 },\n            { nominal: 115, mass: 114.94737 },\n            { nominal: 116, mass: 115.94128 },\n            { nominal: 117, mass: 116.93814 },\n            { nominal: 118, mass: 117.93306 },\n            { nominal: 119, mass: 118.93066 },\n            { nominal: 120, mass: 119.92605 },\n            { nominal: 121, mass: 120.92405 },\n            { nominal: 122, mass: 121.919904 },\n            { nominal: 123, mass: 122.918781 },\n            { nominal: 124, mass: 123.915094 },\n            { nominal: 125, mass: 124.914472 },\n            { nominal: 126, mass: 125.91125 },\n            { nominal: 127, mass: 126.911091 },\n            { nominal: 128, mass: 127.908342 },\n            { nominal: 129, mass: 128.908681 },\n            { nominal: 130, mass: 129.9063207, abundance: 0.00106 },\n            { nominal: 131, mass: 130.906941 },\n            { nominal: 132, mass: 131.9050611, abundance: 0.00101 },\n            { nominal: 133, mass: 132.9060074 },\n            { nominal: 134, mass: 133.90450818, abundance: 0.02417 },\n            { nominal: 135, mass: 134.90568838, abundance: 0.06592 },\n            { nominal: 136, mass: 135.90457573, abundance: 0.07854 },\n            { nominal: 137, mass: 136.90582714, abundance: 0.11232 },\n            { nominal: 138, mass: 137.905247, abundance: 0.71698 },\n            { nominal: 139, mass: 138.9088411 },\n            { nominal: 140, mass: 139.9106057 },\n            { nominal: 141, mass: 140.9144033 },\n            { nominal: 142, mass: 141.9164324 },\n            { nominal: 143, mass: 142.9206253 },\n            { nominal: 144, mass: 143.9229549 },\n            { nominal: 145, mass: 144.9275184 },\n            { nominal: 146, mass: 145.930284 },\n            { nominal: 147, mass: 146.935304 },\n            { nominal: 148, mass: 147.938171 },\n            { nominal: 149, mass: 148.94308 },\n            { nominal: 150, mass: 149.94605 },\n            { nominal: 151, mass: 150.95127 },\n            { nominal: 152, mass: 151.95481 },\n            { nominal: 153, mass: 152.96036 },\n        ],\n        symbol: 'Ba',\n        mass: 137.3268916286322,\n        name: 'Barium',\n        monoisotopicMass: 137.905247,\n    },\n    {\n        number: 57,\n        isotopes: [\n            { nominal: 116, mass: 115.9563 },\n            { nominal: 117, mass: 116.94999 },\n            { nominal: 118, mass: 117.94673 },\n            { nominal: 119, mass: 118.94099 },\n            { nominal: 120, mass: 119.93807 },\n            { nominal: 121, mass: 120.93315 },\n            { nominal: 122, mass: 121.93071 },\n            { nominal: 123, mass: 122.9263 },\n            { nominal: 124, mass: 123.924574 },\n            { nominal: 125, mass: 124.920816 },\n            { nominal: 126, mass: 125.919513 },\n            { nominal: 127, mass: 126.916375 },\n            { nominal: 128, mass: 127.915592 },\n            { nominal: 129, mass: 128.912694 },\n            { nominal: 130, mass: 129.912369 },\n            { nominal: 131, mass: 130.91007 },\n            { nominal: 132, mass: 131.910119 },\n            { nominal: 133, mass: 132.908218 },\n            { nominal: 134, mass: 133.908514 },\n            { nominal: 135, mass: 134.906984 },\n            { nominal: 136, mass: 135.907635 },\n            { nominal: 137, mass: 136.9064504 },\n            { nominal: 138, mass: 137.9071149, abundance: 0.0008881 },\n            { nominal: 139, mass: 138.9063563, abundance: 0.9991119 },\n            { nominal: 140, mass: 139.9094806 },\n            { nominal: 141, mass: 140.910966 },\n            { nominal: 142, mass: 141.9140909 },\n            { nominal: 143, mass: 142.9160795 },\n            { nominal: 144, mass: 143.919646 },\n            { nominal: 145, mass: 144.921808 },\n            { nominal: 146, mass: 145.925875 },\n            { nominal: 147, mass: 146.928418 },\n            { nominal: 148, mass: 147.932679 },\n            { nominal: 149, mass: 148.93535 },\n            { nominal: 150, mass: 149.93947 },\n            { nominal: 151, mass: 150.94232 },\n            { nominal: 152, mass: 151.94682 },\n            { nominal: 153, mass: 152.95036 },\n            { nominal: 154, mass: 153.95517 },\n            { nominal: 155, mass: 154.95901 },\n        ],\n        symbol: 'La',\n        mass: 138.90546887371266,\n        name: 'Lanthanum',\n        monoisotopicMass: 138.9063563,\n    },\n    {\n        number: 58,\n        isotopes: [\n            { nominal: 119, mass: 118.95271 },\n            { nominal: 120, mass: 119.94654 },\n            { nominal: 121, mass: 120.94335 },\n            { nominal: 122, mass: 121.93787 },\n            { nominal: 123, mass: 122.93528 },\n            { nominal: 124, mass: 123.93031 },\n            { nominal: 125, mass: 124.92844 },\n            { nominal: 126, mass: 125.923971 },\n            { nominal: 127, mass: 126.922727 },\n            { nominal: 128, mass: 127.918911 },\n            { nominal: 129, mass: 128.918102 },\n            { nominal: 130, mass: 129.914736 },\n            { nominal: 131, mass: 130.914429 },\n            { nominal: 132, mass: 131.911464 },\n            { nominal: 133, mass: 132.91152 },\n            { nominal: 134, mass: 133.908928 },\n            { nominal: 135, mass: 134.909161 },\n            { nominal: 136, mass: 135.90712921, abundance: 0.00185 },\n            { nominal: 137, mass: 136.90776236 },\n            { nominal: 138, mass: 137.905991, abundance: 0.00251 },\n            { nominal: 139, mass: 138.9066551 },\n            { nominal: 140, mass: 139.9054431, abundance: 0.8845 },\n            { nominal: 141, mass: 140.9082807 },\n            { nominal: 142, mass: 141.9092504, abundance: 0.11114 },\n            { nominal: 143, mass: 142.9123921 },\n            { nominal: 144, mass: 143.9136529 },\n            { nominal: 145, mass: 144.917265 },\n            { nominal: 146, mass: 145.918802 },\n            { nominal: 147, mass: 146.9226899 },\n            { nominal: 148, mass: 147.924424 },\n            { nominal: 149, mass: 148.928427 },\n            { nominal: 150, mass: 149.930384 },\n            { nominal: 151, mass: 150.934272 },\n            { nominal: 152, mass: 151.9366 },\n            { nominal: 153, mass: 152.94093 },\n            { nominal: 154, mass: 153.9438 },\n            { nominal: 155, mass: 154.94855 },\n            { nominal: 156, mass: 155.95183 },\n            { nominal: 157, mass: 156.95705 },\n        ],\n        symbol: 'Ce',\n        mass: 140.1157307378545,\n        name: 'Cerium',\n        monoisotopicMass: 139.9054431,\n    },\n    {\n        number: 59,\n        isotopes: [\n            { nominal: 121, mass: 120.95532 },\n            { nominal: 122, mass: 121.95175 },\n            { nominal: 123, mass: 122.94596 },\n            { nominal: 124, mass: 123.94294 },\n            { nominal: 125, mass: 124.9377 },\n            { nominal: 126, mass: 125.93524 },\n            { nominal: 127, mass: 126.93071 },\n            { nominal: 128, mass: 127.928791 },\n            { nominal: 129, mass: 128.925095 },\n            { nominal: 130, mass: 129.92359 },\n            { nominal: 131, mass: 130.920235 },\n            { nominal: 132, mass: 131.919255 },\n            { nominal: 133, mass: 132.916331 },\n            { nominal: 134, mass: 133.915697 },\n            { nominal: 135, mass: 134.913112 },\n            { nominal: 136, mass: 135.912677 },\n            { nominal: 137, mass: 136.9106792 },\n            { nominal: 138, mass: 137.910754 },\n            { nominal: 139, mass: 138.9089408 },\n            { nominal: 140, mass: 139.9090803 },\n            { nominal: 141, mass: 140.9076576, abundance: 1 },\n            { nominal: 142, mass: 141.9100496 },\n            { nominal: 143, mass: 142.9108228 },\n            { nominal: 144, mass: 143.9133109 },\n            { nominal: 145, mass: 144.9145182 },\n            { nominal: 146, mass: 145.91768 },\n            { nominal: 147, mass: 146.919008 },\n            { nominal: 148, mass: 147.92213 },\n            { nominal: 149, mass: 148.923736 },\n            { nominal: 150, mass: 149.9266765 },\n            { nominal: 151, mass: 150.928309 },\n            { nominal: 152, mass: 151.931553 },\n            { nominal: 153, mass: 152.933904 },\n            { nominal: 154, mass: 153.93753 },\n            { nominal: 155, mass: 154.940509 },\n            { nominal: 156, mass: 155.94464 },\n            { nominal: 157, mass: 156.94789 },\n            { nominal: 158, mass: 157.95241 },\n            { nominal: 159, mass: 158.95589 },\n        ],\n        symbol: 'Pr',\n        mass: 140.9076576,\n        name: 'Praseodymium',\n        monoisotopicMass: 140.9076576,\n    },\n    {\n        number: 60,\n        isotopes: [\n            { nominal: 124, mass: 123.9522 },\n            { nominal: 125, mass: 124.9489 },\n            { nominal: 126, mass: 125.94311 },\n            { nominal: 127, mass: 126.94038 },\n            { nominal: 128, mass: 127.93525 },\n            { nominal: 129, mass: 128.9331 },\n            { nominal: 130, mass: 129.928506 },\n            { nominal: 131, mass: 130.927248 },\n            { nominal: 132, mass: 131.923321 },\n            { nominal: 133, mass: 132.922348 },\n            { nominal: 134, mass: 133.91879 },\n            { nominal: 135, mass: 134.918181 },\n            { nominal: 136, mass: 135.914976 },\n            { nominal: 137, mass: 136.914562 },\n            { nominal: 138, mass: 137.91195 },\n            { nominal: 139, mass: 138.911954 },\n            { nominal: 140, mass: 139.90955 },\n            { nominal: 141, mass: 140.9096147 },\n            { nominal: 142, mass: 141.907729, abundance: 0.27152 },\n            { nominal: 143, mass: 142.90982, abundance: 0.12174 },\n            { nominal: 144, mass: 143.910093, abundance: 0.23798 },\n            { nominal: 145, mass: 144.9125793, abundance: 0.08293 },\n            { nominal: 146, mass: 145.9131226, abundance: 0.17189 },\n            { nominal: 147, mass: 146.9161061 },\n            { nominal: 148, mass: 147.9168993, abundance: 0.05756 },\n            { nominal: 149, mass: 148.9201548 },\n            { nominal: 150, mass: 149.9209022, abundance: 0.05638 },\n            { nominal: 151, mass: 150.9238403 },\n            { nominal: 152, mass: 151.924692 },\n            { nominal: 153, mass: 152.927718 },\n            { nominal: 154, mass: 153.92948 },\n            { nominal: 155, mass: 154.9331357 },\n            { nominal: 156, mass: 155.93508 },\n            { nominal: 157, mass: 156.939386 },\n            { nominal: 158, mass: 157.94197 },\n            { nominal: 159, mass: 158.94653 },\n            { nominal: 160, mass: 159.9494 },\n            { nominal: 161, mass: 160.95428 },\n        ],\n        symbol: 'Nd',\n        mass: 144.241596031827,\n        name: 'Neodymium',\n        monoisotopicMass: 141.907729,\n    },\n    {\n        number: 61,\n        isotopes: [\n            { nominal: 126, mass: 125.95792 },\n            { nominal: 127, mass: 126.95192 },\n            { nominal: 128, mass: 127.9487 },\n            { nominal: 129, mass: 128.94323 },\n            { nominal: 130, mass: 129.94053 },\n            { nominal: 131, mass: 130.93567 },\n            { nominal: 132, mass: 131.93384 },\n            { nominal: 133, mass: 132.929782 },\n            { nominal: 134, mass: 133.928353 },\n            { nominal: 135, mass: 134.924823 },\n            { nominal: 136, mass: 135.923585 },\n            { nominal: 137, mass: 136.92048 },\n            { nominal: 138, mass: 137.919548 },\n            { nominal: 139, mass: 138.9168 },\n            { nominal: 140, mass: 139.91604 },\n            { nominal: 141, mass: 140.913555 },\n            { nominal: 142, mass: 141.91289 },\n            { nominal: 143, mass: 142.9109383 },\n            { nominal: 144, mass: 143.9125964 },\n            { nominal: 145, mass: 144.9127559 },\n            { nominal: 146, mass: 145.9147024 },\n            { nominal: 147, mass: 146.915145 },\n            { nominal: 148, mass: 147.9174819 },\n            { nominal: 149, mass: 148.9183423 },\n            { nominal: 150, mass: 149.920991 },\n            { nominal: 151, mass: 150.9212175 },\n            { nominal: 152, mass: 151.923506 },\n            { nominal: 153, mass: 152.9241567 },\n            { nominal: 154, mass: 153.926472 },\n            { nominal: 155, mass: 154.928137 },\n            { nominal: 156, mass: 155.9311175 },\n            { nominal: 157, mass: 156.9331214 },\n            { nominal: 158, mass: 157.936565 },\n            { nominal: 159, mass: 158.939287 },\n            { nominal: 160, mass: 159.9431 },\n            { nominal: 161, mass: 160.94607 },\n            { nominal: 162, mass: 161.95022 },\n            { nominal: 163, mass: 162.95357 },\n        ],\n        symbol: 'Pm',\n        mass: null,\n        name: 'Promethium',\n    },\n    {\n        number: 62,\n        isotopes: [\n            { nominal: 128, mass: 127.95842 },\n            { nominal: 129, mass: 128.95476 },\n            { nominal: 130, mass: 129.949 },\n            { nominal: 131, mass: 130.94618 },\n            { nominal: 132, mass: 131.94087 },\n            { nominal: 133, mass: 132.93856 },\n            { nominal: 134, mass: 133.93411 },\n            { nominal: 135, mass: 134.93252 },\n            { nominal: 136, mass: 135.928276 },\n            { nominal: 137, mass: 136.926971 },\n            { nominal: 138, mass: 137.923244 },\n            { nominal: 139, mass: 138.922297 },\n            { nominal: 140, mass: 139.918995 },\n            { nominal: 141, mass: 140.9184816 },\n            { nominal: 142, mass: 141.9152044 },\n            { nominal: 143, mass: 142.9146353 },\n            { nominal: 144, mass: 143.9120065, abundance: 0.0307 },\n            { nominal: 145, mass: 144.9134173 },\n            { nominal: 146, mass: 145.913047 },\n            { nominal: 147, mass: 146.9149044, abundance: 0.1499 },\n            { nominal: 148, mass: 147.9148292, abundance: 0.1124 },\n            { nominal: 149, mass: 148.9171921, abundance: 0.1382 },\n            { nominal: 150, mass: 149.9172829, abundance: 0.0738 },\n            { nominal: 151, mass: 150.9199398 },\n            { nominal: 152, mass: 151.9197397, abundance: 0.2675 },\n            { nominal: 153, mass: 152.9221047 },\n            { nominal: 154, mass: 153.9222169, abundance: 0.2275 },\n            { nominal: 155, mass: 154.9246477 },\n            { nominal: 156, mass: 155.925536 },\n            { nominal: 157, mass: 156.9284187 },\n            { nominal: 158, mass: 157.929951 },\n            { nominal: 159, mass: 158.9332172 },\n            { nominal: 160, mass: 159.9353353 },\n            { nominal: 161, mass: 160.9391602 },\n            { nominal: 162, mass: 161.94146 },\n            { nominal: 163, mass: 162.94555 },\n            { nominal: 164, mass: 163.94836 },\n            { nominal: 165, mass: 164.95297 },\n        ],\n        symbol: 'Sm',\n        mass: 150.36635571193,\n        name: 'Samarium',\n        monoisotopicMass: 151.9197397,\n    },\n    {\n        number: 63,\n        isotopes: [\n            { nominal: 130, mass: 129.96369 },\n            { nominal: 131, mass: 130.95784 },\n            { nominal: 132, mass: 131.95467 },\n            { nominal: 133, mass: 132.94929 },\n            { nominal: 134, mass: 133.9464 },\n            { nominal: 135, mass: 134.94187 },\n            { nominal: 136, mass: 135.93962 },\n            { nominal: 137, mass: 136.93546 },\n            { nominal: 138, mass: 137.933709 },\n            { nominal: 139, mass: 138.929792 },\n            { nominal: 140, mass: 139.928088 },\n            { nominal: 141, mass: 140.924932 },\n            { nominal: 142, mass: 141.923442 },\n            { nominal: 143, mass: 142.920299 },\n            { nominal: 144, mass: 143.91882 },\n            { nominal: 145, mass: 144.9162726 },\n            { nominal: 146, mass: 145.917211 },\n            { nominal: 147, mass: 146.9167527 },\n            { nominal: 148, mass: 147.918089 },\n            { nominal: 149, mass: 148.9179378 },\n            { nominal: 150, mass: 149.9197077 },\n            { nominal: 151, mass: 150.9198578, abundance: 0.4781 },\n            { nominal: 152, mass: 151.9217522 },\n            { nominal: 153, mass: 152.921238, abundance: 0.5219 },\n            { nominal: 154, mass: 153.922987 },\n            { nominal: 155, mass: 154.9229011 },\n            { nominal: 156, mass: 155.9247605 },\n            { nominal: 157, mass: 156.9254334 },\n            { nominal: 158, mass: 157.927799 },\n            { nominal: 159, mass: 158.9291001 },\n            { nominal: 160, mass: 159.931851 },\n            { nominal: 161, mass: 160.933664 },\n            { nominal: 162, mass: 161.936989 },\n            { nominal: 163, mass: 162.939196 },\n            { nominal: 164, mass: 163.94274 },\n            { nominal: 165, mass: 164.94559 },\n            { nominal: 166, mass: 165.94962 },\n            { nominal: 167, mass: 166.95289 },\n        ],\n        symbol: 'Eu',\n        mass: 151.96437812637998,\n        name: 'Europium',\n        monoisotopicMass: 152.921238,\n    },\n    {\n        number: 64,\n        isotopes: [\n            { nominal: 133, mass: 132.96133 },\n            { nominal: 134, mass: 133.95566 },\n            { nominal: 135, mass: 134.95245 },\n            { nominal: 136, mass: 135.9473 },\n            { nominal: 137, mass: 136.94502 },\n            { nominal: 138, mass: 137.94025 },\n            { nominal: 139, mass: 138.93813 },\n            { nominal: 140, mass: 139.933674 },\n            { nominal: 141, mass: 140.932126 },\n            { nominal: 142, mass: 141.928116 },\n            { nominal: 143, mass: 142.92675 },\n            { nominal: 144, mass: 143.922963 },\n            { nominal: 145, mass: 144.921713 },\n            { nominal: 146, mass: 145.9183188 },\n            { nominal: 147, mass: 146.9191014 },\n            { nominal: 148, mass: 147.9181215 },\n            { nominal: 149, mass: 148.9193481 },\n            { nominal: 150, mass: 149.9186644 },\n            { nominal: 151, mass: 150.920356 },\n            { nominal: 152, mass: 151.9197995, abundance: 0.002 },\n            { nominal: 153, mass: 152.921758 },\n            { nominal: 154, mass: 153.9208741, abundance: 0.0218 },\n            { nominal: 155, mass: 154.9226305, abundance: 0.148 },\n            { nominal: 156, mass: 155.9221312, abundance: 0.2047 },\n            { nominal: 157, mass: 156.9239686, abundance: 0.1565 },\n            { nominal: 158, mass: 157.9241123, abundance: 0.2484 },\n            { nominal: 159, mass: 158.926397 },\n            { nominal: 160, mass: 159.9270624, abundance: 0.2186 },\n            { nominal: 161, mass: 160.9296775 },\n            { nominal: 162, mass: 161.930993 },\n            { nominal: 163, mass: 162.9341769 },\n            { nominal: 164, mass: 163.93583 },\n            { nominal: 165, mass: 164.93936 },\n            { nominal: 166, mass: 165.94146 },\n            { nominal: 167, mass: 166.94545 },\n            { nominal: 168, mass: 167.94808 },\n            { nominal: 169, mass: 168.9526 },\n        ],\n        symbol: 'Gd',\n        mass: 157.25213064687998,\n        name: 'Gadolinium',\n        monoisotopicMass: 157.9241123,\n    },\n    {\n        number: 65,\n        isotopes: [\n            { nominal: 135, mass: 134.96476 },\n            { nominal: 136, mass: 135.96129 },\n            { nominal: 137, mass: 136.95602 },\n            { nominal: 138, mass: 137.95312 },\n            { nominal: 139, mass: 138.94833 },\n            { nominal: 140, mass: 139.94581 },\n            { nominal: 141, mass: 140.94145 },\n            { nominal: 142, mass: 141.93928 },\n            { nominal: 143, mass: 142.935137 },\n            { nominal: 144, mass: 143.933045 },\n            { nominal: 145, mass: 144.92882 },\n            { nominal: 146, mass: 145.927253 },\n            { nominal: 147, mass: 146.9240548 },\n            { nominal: 148, mass: 147.924282 },\n            { nominal: 149, mass: 148.9232535 },\n            { nominal: 150, mass: 149.9236649 },\n            { nominal: 151, mass: 150.9231096 },\n            { nominal: 152, mass: 151.924083 },\n            { nominal: 153, mass: 152.9234424 },\n            { nominal: 154, mass: 153.924685 },\n            { nominal: 155, mass: 154.923511 },\n            { nominal: 156, mass: 155.9247552 },\n            { nominal: 157, mass: 156.924033 },\n            { nominal: 158, mass: 157.9254209 },\n            { nominal: 159, mass: 158.9253547, abundance: 1 },\n            { nominal: 160, mass: 159.9271756 },\n            { nominal: 161, mass: 160.9275778 },\n            { nominal: 162, mass: 161.929495 },\n            { nominal: 163, mass: 162.9306547 },\n            { nominal: 164, mass: 163.93336 },\n            { nominal: 165, mass: 164.93498 },\n            { nominal: 166, mass: 165.93786 },\n            { nominal: 167, mass: 166.93996 },\n            { nominal: 168, mass: 167.9434 },\n            { nominal: 169, mass: 168.94597 },\n            { nominal: 170, mass: 169.94984 },\n            { nominal: 171, mass: 170.95273 },\n        ],\n        symbol: 'Tb',\n        mass: 158.9253547,\n        name: 'Terbium',\n        monoisotopicMass: 158.9253547,\n    },\n    {\n        number: 66,\n        isotopes: [\n            { nominal: 138, mass: 137.9625 },\n            { nominal: 139, mass: 138.95959 },\n            { nominal: 140, mass: 139.95402 },\n            { nominal: 141, mass: 140.95128 },\n            { nominal: 142, mass: 141.94619 },\n            { nominal: 143, mass: 142.943994 },\n            { nominal: 144, mass: 143.9392695 },\n            { nominal: 145, mass: 144.937474 },\n            { nominal: 146, mass: 145.9328445 },\n            { nominal: 147, mass: 146.9310827 },\n            { nominal: 148, mass: 147.927157 },\n            { nominal: 149, mass: 148.927322 },\n            { nominal: 150, mass: 149.9255933 },\n            { nominal: 151, mass: 150.9261916 },\n            { nominal: 152, mass: 151.9247253 },\n            { nominal: 153, mass: 152.9257724 },\n            { nominal: 154, mass: 153.9244293 },\n            { nominal: 155, mass: 154.925759 },\n            { nominal: 156, mass: 155.9242847, abundance: 0.00056 },\n            { nominal: 157, mass: 156.9254707 },\n            { nominal: 158, mass: 157.9244159, abundance: 0.00095 },\n            { nominal: 159, mass: 158.925747 },\n            { nominal: 160, mass: 159.9252046, abundance: 0.02329 },\n            { nominal: 161, mass: 160.9269405, abundance: 0.18889 },\n            { nominal: 162, mass: 161.9268056, abundance: 0.25475 },\n            { nominal: 163, mass: 162.9287383, abundance: 0.24896 },\n            { nominal: 164, mass: 163.9291819, abundance: 0.2826 },\n            { nominal: 165, mass: 164.9317105 },\n            { nominal: 166, mass: 165.9328139 },\n            { nominal: 167, mass: 166.935661 },\n            { nominal: 168, mass: 167.93713 },\n            { nominal: 169, mass: 168.94031 },\n            { nominal: 170, mass: 169.94239 },\n            { nominal: 171, mass: 170.94612 },\n            { nominal: 172, mass: 171.94846 },\n            { nominal: 173, mass: 172.95283 },\n        ],\n        symbol: 'Dy',\n        mass: 162.499472819424,\n        name: 'Dysprosium',\n        monoisotopicMass: 163.9291819,\n    },\n    {\n        number: 67,\n        isotopes: [\n            { nominal: 140, mass: 139.96859 },\n            { nominal: 141, mass: 140.96311 },\n            { nominal: 142, mass: 141.96001 },\n            { nominal: 143, mass: 142.95486 },\n            { nominal: 144, mass: 143.9521097 },\n            { nominal: 145, mass: 144.9472674 },\n            { nominal: 146, mass: 145.9449935 },\n            { nominal: 147, mass: 146.9401423 },\n            { nominal: 148, mass: 147.937744 },\n            { nominal: 149, mass: 148.933803 },\n            { nominal: 150, mass: 149.933498 },\n            { nominal: 151, mass: 150.9316983 },\n            { nominal: 152, mass: 151.931724 },\n            { nominal: 153, mass: 152.9302064 },\n            { nominal: 154, mass: 153.9306068 },\n            { nominal: 155, mass: 154.929104 },\n            { nominal: 156, mass: 155.929706 },\n            { nominal: 157, mass: 156.928254 },\n            { nominal: 158, mass: 157.928946 },\n            { nominal: 159, mass: 158.9277197 },\n            { nominal: 160, mass: 159.928737 },\n            { nominal: 161, mass: 160.9278615 },\n            { nominal: 162, mass: 161.9291023 },\n            { nominal: 163, mass: 162.928741 },\n            { nominal: 164, mass: 163.9302403 },\n            { nominal: 165, mass: 164.9303288, abundance: 1 },\n            { nominal: 166, mass: 165.9322909 },\n            { nominal: 167, mass: 166.9331385 },\n            { nominal: 168, mass: 167.935522 },\n            { nominal: 169, mass: 168.936878 },\n            { nominal: 170, mass: 169.939625 },\n            { nominal: 171, mass: 170.94147 },\n            { nominal: 172, mass: 171.94473 },\n            { nominal: 173, mass: 172.94702 },\n            { nominal: 174, mass: 173.95095 },\n            { nominal: 175, mass: 174.95362 },\n        ],\n        symbol: 'Ho',\n        mass: 164.9303288,\n        name: 'Holmium',\n        monoisotopicMass: 164.9303288,\n    },\n    {\n        number: 68,\n        isotopes: [\n            { nominal: 142, mass: 141.9701 },\n            { nominal: 143, mass: 142.96662 },\n            { nominal: 144, mass: 143.9607 },\n            { nominal: 145, mass: 144.95805 },\n            { nominal: 146, mass: 145.9524184 },\n            { nominal: 147, mass: 146.949964 },\n            { nominal: 148, mass: 147.944735 },\n            { nominal: 149, mass: 148.942306 },\n            { nominal: 150, mass: 149.937916 },\n            { nominal: 151, mass: 150.937449 },\n            { nominal: 152, mass: 151.935057 },\n            { nominal: 153, mass: 152.93508 },\n            { nominal: 154, mass: 153.9327908 },\n            { nominal: 155, mass: 154.9332159 },\n            { nominal: 156, mass: 155.931067 },\n            { nominal: 157, mass: 156.931949 },\n            { nominal: 158, mass: 157.929893 },\n            { nominal: 159, mass: 158.9306918 },\n            { nominal: 160, mass: 159.929077 },\n            { nominal: 161, mass: 160.9300046 },\n            { nominal: 162, mass: 161.9287884, abundance: 0.00139 },\n            { nominal: 163, mass: 162.9300408 },\n            { nominal: 164, mass: 163.9292088, abundance: 0.01601 },\n            { nominal: 165, mass: 164.9307345 },\n            { nominal: 166, mass: 165.9302995, abundance: 0.33503 },\n            { nominal: 167, mass: 166.9320546, abundance: 0.22869 },\n            { nominal: 168, mass: 167.9323767, abundance: 0.26978 },\n            { nominal: 169, mass: 168.9345968 },\n            { nominal: 170, mass: 169.9354702, abundance: 0.1491 },\n            { nominal: 171, mass: 170.9380357 },\n            { nominal: 172, mass: 171.9393619 },\n            { nominal: 173, mass: 172.9424 },\n            { nominal: 174, mass: 173.94423 },\n            { nominal: 175, mass: 174.94777 },\n            { nominal: 176, mass: 175.94994 },\n            { nominal: 177, mass: 176.95399 },\n        ],\n        symbol: 'Er',\n        mass: 167.259082649669,\n        name: 'Erbium',\n        monoisotopicMass: 165.9302995,\n    },\n    {\n        number: 69,\n        isotopes: [\n            { nominal: 144, mass: 143.97628 },\n            { nominal: 145, mass: 144.97039 },\n            { nominal: 146, mass: 145.96684 },\n            { nominal: 147, mass: 146.9613799 },\n            { nominal: 148, mass: 147.958384 },\n            { nominal: 149, mass: 148.95289 },\n            { nominal: 150, mass: 149.95009 },\n            { nominal: 151, mass: 150.945488 },\n            { nominal: 152, mass: 151.944422 },\n            { nominal: 153, mass: 152.94204 },\n            { nominal: 154, mass: 153.94157 },\n            { nominal: 155, mass: 154.93921 },\n            { nominal: 156, mass: 155.938992 },\n            { nominal: 157, mass: 156.936944 },\n            { nominal: 158, mass: 157.93698 },\n            { nominal: 159, mass: 158.934975 },\n            { nominal: 160, mass: 159.935263 },\n            { nominal: 161, mass: 160.933549 },\n            { nominal: 162, mass: 161.934002 },\n            { nominal: 163, mass: 162.9326592 },\n            { nominal: 164, mass: 163.933544 },\n            { nominal: 165, mass: 164.9324431 },\n            { nominal: 166, mass: 165.933561 },\n            { nominal: 167, mass: 166.9328562 },\n            { nominal: 168, mass: 167.9341774 },\n            { nominal: 169, mass: 168.9342179, abundance: 1 },\n            { nominal: 170, mass: 169.935806 },\n            { nominal: 171, mass: 170.9364339 },\n            { nominal: 172, mass: 171.9384055 },\n            { nominal: 173, mass: 172.9396084 },\n            { nominal: 174, mass: 173.942173 },\n            { nominal: 175, mass: 174.943841 },\n            { nominal: 176, mass: 175.947 },\n            { nominal: 177, mass: 176.94904 },\n            { nominal: 178, mass: 177.95264 },\n            { nominal: 179, mass: 178.95534 },\n        ],\n        symbol: 'Tm',\n        mass: 168.9342179,\n        name: 'Thulium',\n        monoisotopicMass: 168.9342179,\n    },\n    {\n        number: 70,\n        isotopes: [\n            { nominal: 148, mass: 147.96758 },\n            { nominal: 149, mass: 148.96436 },\n            { nominal: 150, mass: 149.95852 },\n            { nominal: 151, mass: 150.9554 },\n            { nominal: 152, mass: 151.95027 },\n            { nominal: 153, mass: 152.94932 },\n            { nominal: 154, mass: 153.946396 },\n            { nominal: 155, mass: 154.945783 },\n            { nominal: 156, mass: 155.942825 },\n            { nominal: 157, mass: 156.942645 },\n            { nominal: 158, mass: 157.9398705 },\n            { nominal: 159, mass: 158.940055 },\n            { nominal: 160, mass: 159.937557 },\n            { nominal: 161, mass: 160.937907 },\n            { nominal: 162, mass: 161.935774 },\n            { nominal: 163, mass: 162.93634 },\n            { nominal: 164, mass: 163.934495 },\n            { nominal: 165, mass: 164.93527 },\n            { nominal: 166, mass: 165.9338747 },\n            { nominal: 167, mass: 166.934953 },\n            { nominal: 168, mass: 167.9338896, abundance: 0.00123 },\n            { nominal: 169, mass: 168.9351825 },\n            { nominal: 170, mass: 169.9347664, abundance: 0.02982 },\n            { nominal: 171, mass: 170.9363302, abundance: 0.1409 },\n            { nominal: 172, mass: 171.9363859, abundance: 0.2168 },\n            { nominal: 173, mass: 172.9382151, abundance: 0.16103 },\n            { nominal: 174, mass: 173.9388664, abundance: 0.32026 },\n            { nominal: 175, mass: 174.9412808 },\n            { nominal: 176, mass: 175.9425764, abundance: 0.12996 },\n            { nominal: 177, mass: 176.9452656 },\n            { nominal: 178, mass: 177.946651 },\n            { nominal: 179, mass: 178.95004 },\n            { nominal: 180, mass: 179.95212 },\n            { nominal: 181, mass: 180.95589 },\n        ],\n        symbol: 'Yb',\n        mass: 173.05415016631702,\n        name: 'Ytterbium',\n        monoisotopicMass: 173.9388664,\n    },\n    {\n        number: 71,\n        isotopes: [\n            { nominal: 150, mass: 149.97355 },\n            { nominal: 151, mass: 150.96768 },\n            { nominal: 152, mass: 151.96412 },\n            { nominal: 153, mass: 152.95875 },\n            { nominal: 154, mass: 153.95736 },\n            { nominal: 155, mass: 154.954321 },\n            { nominal: 156, mass: 155.953033 },\n            { nominal: 157, mass: 156.950127 },\n            { nominal: 158, mass: 157.949316 },\n            { nominal: 159, mass: 158.946636 },\n            { nominal: 160, mass: 159.946033 },\n            { nominal: 161, mass: 160.943572 },\n            { nominal: 162, mass: 161.943283 },\n            { nominal: 163, mass: 162.941179 },\n            { nominal: 164, mass: 163.941339 },\n            { nominal: 165, mass: 164.939407 },\n            { nominal: 166, mass: 165.939859 },\n            { nominal: 167, mass: 166.93827 },\n            { nominal: 168, mass: 167.938736 },\n            { nominal: 169, mass: 168.9376441 },\n            { nominal: 170, mass: 169.938478 },\n            { nominal: 171, mass: 170.937917 },\n            { nominal: 172, mass: 171.9390891 },\n            { nominal: 173, mass: 172.938934 },\n            { nominal: 174, mass: 173.9403409 },\n            { nominal: 175, mass: 174.9407752, abundance: 0.97401 },\n            { nominal: 176, mass: 175.9426897, abundance: 0.02599 },\n            { nominal: 177, mass: 176.9437615 },\n            { nominal: 178, mass: 177.945958 },\n            { nominal: 179, mass: 178.9473309 },\n            { nominal: 180, mass: 179.949888 },\n            { nominal: 181, mass: 180.95191 },\n            { nominal: 182, mass: 181.95504 },\n            { nominal: 183, mass: 182.957363 },\n            { nominal: 184, mass: 183.96091 },\n            { nominal: 185, mass: 184.96362 },\n        ],\n        symbol: 'Lu',\n        mass: 174.96681495785498,\n        name: 'Lutetium',\n        monoisotopicMass: 174.9407752,\n    },\n    {\n        number: 72,\n        isotopes: [\n            { nominal: 153, mass: 152.97069 },\n            { nominal: 154, mass: 153.96486 },\n            { nominal: 155, mass: 154.96311 },\n            { nominal: 156, mass: 155.95935 },\n            { nominal: 157, mass: 156.95824 },\n            { nominal: 158, mass: 157.954801 },\n            { nominal: 159, mass: 158.953996 },\n            { nominal: 160, mass: 159.950691 },\n            { nominal: 161, mass: 160.950278 },\n            { nominal: 162, mass: 161.9472148 },\n            { nominal: 163, mass: 162.947113 },\n            { nominal: 164, mass: 163.944371 },\n            { nominal: 165, mass: 164.944567 },\n            { nominal: 166, mass: 165.94218 },\n            { nominal: 167, mass: 166.9426 },\n            { nominal: 168, mass: 167.940568 },\n            { nominal: 169, mass: 168.941259 },\n            { nominal: 170, mass: 169.939609 },\n            { nominal: 171, mass: 170.940492 },\n            { nominal: 172, mass: 171.93945 },\n            { nominal: 173, mass: 172.940513 },\n            { nominal: 174, mass: 173.9400461, abundance: 0.0016 },\n            { nominal: 175, mass: 174.9415092 },\n            { nominal: 176, mass: 175.9414076, abundance: 0.0526 },\n            { nominal: 177, mass: 176.9432277, abundance: 0.186 },\n            { nominal: 178, mass: 177.9437058, abundance: 0.2728 },\n            { nominal: 179, mass: 178.9458232, abundance: 0.1362 },\n            { nominal: 180, mass: 179.946557, abundance: 0.3508 },\n            { nominal: 181, mass: 180.9491083 },\n            { nominal: 182, mass: 181.9505612 },\n            { nominal: 183, mass: 182.95353 },\n            { nominal: 184, mass: 183.955446 },\n            { nominal: 185, mass: 184.958862 },\n            { nominal: 186, mass: 185.960897 },\n            { nominal: 187, mass: 186.96477 },\n            { nominal: 188, mass: 187.96685 },\n            { nominal: 189, mass: 188.97084 },\n        ],\n        symbol: 'Hf',\n        mass: 178.4849787234,\n        name: 'Hafnium',\n        monoisotopicMass: 179.946557,\n    },\n    {\n        number: 73,\n        isotopes: [\n            { nominal: 155, mass: 154.97424 },\n            { nominal: 156, mass: 155.97203 },\n            { nominal: 157, mass: 156.96818 },\n            { nominal: 158, mass: 157.96654 },\n            { nominal: 159, mass: 158.963023 },\n            { nominal: 160, mass: 159.961488 },\n            { nominal: 161, mass: 160.958452 },\n            { nominal: 162, mass: 161.957294 },\n            { nominal: 163, mass: 162.954337 },\n            { nominal: 164, mass: 163.953534 },\n            { nominal: 165, mass: 164.950781 },\n            { nominal: 166, mass: 165.950512 },\n            { nominal: 167, mass: 166.948093 },\n            { nominal: 168, mass: 167.948047 },\n            { nominal: 169, mass: 168.946011 },\n            { nominal: 170, mass: 169.946175 },\n            { nominal: 171, mass: 170.944476 },\n            { nominal: 172, mass: 171.944895 },\n            { nominal: 173, mass: 172.94375 },\n            { nominal: 174, mass: 173.944454 },\n            { nominal: 175, mass: 174.943737 },\n            { nominal: 176, mass: 175.944857 },\n            { nominal: 177, mass: 176.9444795 },\n            { nominal: 178, mass: 177.945678 },\n            { nominal: 179, mass: 178.9459366 },\n            { nominal: 180, mass: 179.9474648, abundance: 0.0001201 },\n            { nominal: 181, mass: 180.9479958, abundance: 0.9998799 },\n            { nominal: 182, mass: 181.9501519 },\n            { nominal: 183, mass: 182.9513726 },\n            { nominal: 184, mass: 183.954008 },\n            { nominal: 185, mass: 184.955559 },\n            { nominal: 186, mass: 185.958551 },\n            { nominal: 187, mass: 186.960386 },\n            { nominal: 188, mass: 187.963916 },\n            { nominal: 189, mass: 188.96583 },\n            { nominal: 190, mass: 189.96939 },\n            { nominal: 191, mass: 190.97156 },\n            { nominal: 192, mass: 191.97514 },\n        ],\n        symbol: 'Ta',\n        mass: 180.9478756362269,\n        name: 'Tantalum',\n        monoisotopicMass: 180.9479958,\n    },\n    {\n        number: 74,\n        isotopes: [\n            { nominal: 157, mass: 156.97884 },\n            { nominal: 158, mass: 157.97456 },\n            { nominal: 159, mass: 158.97264 },\n            { nominal: 160, mass: 159.96846 },\n            { nominal: 161, mass: 160.9672 },\n            { nominal: 162, mass: 161.963499 },\n            { nominal: 163, mass: 162.962524 },\n            { nominal: 164, mass: 163.958961 },\n            { nominal: 165, mass: 164.958281 },\n            { nominal: 166, mass: 165.955031 },\n            { nominal: 167, mass: 166.954805 },\n            { nominal: 168, mass: 167.951806 },\n            { nominal: 169, mass: 168.951779 },\n            { nominal: 170, mass: 169.949232 },\n            { nominal: 171, mass: 170.949451 },\n            { nominal: 172, mass: 171.947292 },\n            { nominal: 173, mass: 172.947689 },\n            { nominal: 174, mass: 173.946079 },\n            { nominal: 175, mass: 174.946717 },\n            { nominal: 176, mass: 175.945634 },\n            { nominal: 177, mass: 176.946643 },\n            { nominal: 178, mass: 177.945883 },\n            { nominal: 179, mass: 178.947077 },\n            { nominal: 180, mass: 179.9467108, abundance: 0.0012 },\n            { nominal: 181, mass: 180.9481978 },\n            { nominal: 182, mass: 181.94820394, abundance: 0.265 },\n            { nominal: 183, mass: 182.95022275, abundance: 0.1431 },\n            { nominal: 184, mass: 183.95093092, abundance: 0.3064 },\n            { nominal: 185, mass: 184.95341897 },\n            { nominal: 186, mass: 185.9543628, abundance: 0.2843 },\n            { nominal: 187, mass: 186.9571588 },\n            { nominal: 188, mass: 187.9584862 },\n            { nominal: 189, mass: 188.961763 },\n            { nominal: 190, mass: 189.963091 },\n            { nominal: 191, mass: 190.966531 },\n            { nominal: 192, mass: 191.96817 },\n            { nominal: 193, mass: 192.97178 },\n            { nominal: 194, mass: 193.97367 },\n        ],\n        symbol: 'W',\n        mass: 183.841777550513,\n        name: 'Tungsten',\n        monoisotopicMass: 183.95093092,\n    },\n    {\n        number: 75,\n        isotopes: [\n            { nominal: 159, mass: 158.98418 },\n            { nominal: 160, mass: 159.98182 },\n            { nominal: 161, mass: 160.97757 },\n            { nominal: 162, mass: 161.97584 },\n            { nominal: 163, mass: 162.97208 },\n            { nominal: 164, mass: 163.970453 },\n            { nominal: 165, mass: 164.967103 },\n            { nominal: 166, mass: 165.965761 },\n            { nominal: 167, mass: 166.962595 },\n            { nominal: 168, mass: 167.961573 },\n            { nominal: 169, mass: 168.958766 },\n            { nominal: 170, mass: 169.95822 },\n            { nominal: 171, mass: 170.955716 },\n            { nominal: 172, mass: 171.95542 },\n            { nominal: 173, mass: 172.953243 },\n            { nominal: 174, mass: 173.953115 },\n            { nominal: 175, mass: 174.951381 },\n            { nominal: 176, mass: 175.951623 },\n            { nominal: 177, mass: 176.950328 },\n            { nominal: 178, mass: 177.950989 },\n            { nominal: 179, mass: 178.949989 },\n            { nominal: 180, mass: 179.950792 },\n            { nominal: 181, mass: 180.950058 },\n            { nominal: 182, mass: 181.95121 },\n            { nominal: 183, mass: 182.9508196 },\n            { nominal: 184, mass: 183.9525228 },\n            { nominal: 185, mass: 184.9529545, abundance: 0.374 },\n            { nominal: 186, mass: 185.9549856 },\n            { nominal: 187, mass: 186.9557501, abundance: 0.626 },\n            { nominal: 188, mass: 187.9581115 },\n            { nominal: 189, mass: 188.959226 },\n            { nominal: 190, mass: 189.961744 },\n            { nominal: 191, mass: 190.963122 },\n            { nominal: 192, mass: 191.966088 },\n            { nominal: 193, mass: 192.967541 },\n            { nominal: 194, mass: 193.97076 },\n            { nominal: 195, mass: 194.97254 },\n            { nominal: 196, mass: 195.9758 },\n            { nominal: 197, mass: 196.97799 },\n            { nominal: 198, mass: 197.9816 },\n        ],\n        symbol: 'Re',\n        mass: 186.20670454560002,\n        name: 'Rhenium',\n        monoisotopicMass: 186.9557501,\n    },\n    {\n        number: 76,\n        isotopes: [\n            { nominal: 161, mass: 160.98903 },\n            { nominal: 162, mass: 161.98443 },\n            { nominal: 163, mass: 162.98241 },\n            { nominal: 164, mass: 163.97802 },\n            { nominal: 165, mass: 164.9766 },\n            { nominal: 166, mass: 165.972692 },\n            { nominal: 167, mass: 166.971549 },\n            { nominal: 168, mass: 167.967808 },\n            { nominal: 169, mass: 168.967018 },\n            { nominal: 170, mass: 169.963578 },\n            { nominal: 171, mass: 170.963174 },\n            { nominal: 172, mass: 171.960017 },\n            { nominal: 173, mass: 172.959808 },\n            { nominal: 174, mass: 173.957064 },\n            { nominal: 175, mass: 174.956945 },\n            { nominal: 176, mass: 175.954806 },\n            { nominal: 177, mass: 176.954966 },\n            { nominal: 178, mass: 177.953254 },\n            { nominal: 179, mass: 178.953817 },\n            { nominal: 180, mass: 179.952375 },\n            { nominal: 181, mass: 180.953247 },\n            { nominal: 182, mass: 181.95211 },\n            { nominal: 183, mass: 182.953125 },\n            { nominal: 184, mass: 183.9524885, abundance: 0.0002 },\n            { nominal: 185, mass: 184.9540417 },\n            { nominal: 186, mass: 185.953835, abundance: 0.0159 },\n            { nominal: 187, mass: 186.9557474, abundance: 0.0196 },\n            { nominal: 188, mass: 187.9558352, abundance: 0.1324 },\n            { nominal: 189, mass: 188.9581442, abundance: 0.1615 },\n            { nominal: 190, mass: 189.9584437, abundance: 0.2626 },\n            { nominal: 191, mass: 190.9609264 },\n            { nominal: 192, mass: 191.961477, abundance: 0.4078 },\n            { nominal: 193, mass: 192.9641479 },\n            { nominal: 194, mass: 193.9651772 },\n            { nominal: 195, mass: 194.968318 },\n            { nominal: 196, mass: 195.969641 },\n            { nominal: 197, mass: 196.97283 },\n            { nominal: 198, mass: 197.97441 },\n            { nominal: 199, mass: 198.97801 },\n            { nominal: 200, mass: 199.97984 },\n            { nominal: 201, mass: 200.98364 },\n            { nominal: 202, mass: 201.98595 },\n        ],\n        symbol: 'Os',\n        mass: 190.22485962823998,\n        name: 'Osmium',\n        monoisotopicMass: 191.961477,\n    },\n    {\n        number: 77,\n        isotopes: [\n            { nominal: 164, mass: 163.99191 },\n            { nominal: 165, mass: 164.9875 },\n            { nominal: 166, mass: 165.98566 },\n            { nominal: 167, mass: 166.981666 },\n            { nominal: 168, mass: 167.979907 },\n            { nominal: 169, mass: 168.976298 },\n            { nominal: 170, mass: 169.974922 },\n            { nominal: 171, mass: 170.97164 },\n            { nominal: 172, mass: 171.970607 },\n            { nominal: 173, mass: 172.967506 },\n            { nominal: 174, mass: 173.966861 },\n            { nominal: 175, mass: 174.96415 },\n            { nominal: 176, mass: 175.96365 },\n            { nominal: 177, mass: 176.961301 },\n            { nominal: 178, mass: 177.961082 },\n            { nominal: 179, mass: 178.95912 },\n            { nominal: 180, mass: 179.959229 },\n            { nominal: 181, mass: 180.957625 },\n            { nominal: 182, mass: 181.958076 },\n            { nominal: 183, mass: 182.95684 },\n            { nominal: 184, mass: 183.957476 },\n            { nominal: 185, mass: 184.956698 },\n            { nominal: 186, mass: 185.957944 },\n            { nominal: 187, mass: 186.957542 },\n            { nominal: 188, mass: 187.958828 },\n            { nominal: 189, mass: 188.958715 },\n            { nominal: 190, mass: 189.9605412 },\n            { nominal: 191, mass: 190.9605893, abundance: 0.373 },\n            { nominal: 192, mass: 191.9626002 },\n            { nominal: 193, mass: 192.9629216, abundance: 0.627 },\n            { nominal: 194, mass: 193.9650735 },\n            { nominal: 195, mass: 194.9659747 },\n            { nominal: 196, mass: 195.968397 },\n            { nominal: 197, mass: 196.969655 },\n            { nominal: 198, mass: 197.97228 },\n            { nominal: 199, mass: 198.973805 },\n            { nominal: 200, mass: 199.9768 },\n            { nominal: 201, mass: 200.97864 },\n            { nominal: 202, mass: 201.98199 },\n            { nominal: 203, mass: 202.98423 },\n            { nominal: 204, mass: 203.9896 },\n        ],\n        symbol: 'Ir',\n        mass: 192.2160516521,\n        name: 'Iridium',\n        monoisotopicMass: 192.9629216,\n    },\n    {\n        number: 78,\n        isotopes: [\n            { nominal: 166, mass: 165.99486 },\n            { nominal: 167, mass: 166.99269 },\n            { nominal: 168, mass: 167.98813 },\n            { nominal: 169, mass: 168.98657 },\n            { nominal: 170, mass: 169.982496 },\n            { nominal: 171, mass: 170.981245 },\n            { nominal: 172, mass: 171.977351 },\n            { nominal: 173, mass: 172.976443 },\n            { nominal: 174, mass: 173.97282 },\n            { nominal: 175, mass: 174.97241 },\n            { nominal: 176, mass: 175.968938 },\n            { nominal: 177, mass: 176.96847 },\n            { nominal: 178, mass: 177.96565 },\n            { nominal: 179, mass: 178.965359 },\n            { nominal: 180, mass: 179.963032 },\n            { nominal: 181, mass: 180.963098 },\n            { nominal: 182, mass: 181.961172 },\n            { nominal: 183, mass: 182.961597 },\n            { nominal: 184, mass: 183.959915 },\n            { nominal: 185, mass: 184.960614 },\n            { nominal: 186, mass: 185.959351 },\n            { nominal: 187, mass: 186.960617 },\n            { nominal: 188, mass: 187.9593889 },\n            { nominal: 189, mass: 188.960831 },\n            { nominal: 190, mass: 189.9599297, abundance: 0.00012 },\n            { nominal: 191, mass: 190.9616729 },\n            { nominal: 192, mass: 191.9610387, abundance: 0.00782 },\n            { nominal: 193, mass: 192.9629824 },\n            { nominal: 194, mass: 193.9626809, abundance: 0.3286 },\n            { nominal: 195, mass: 194.9647917, abundance: 0.3378 },\n            { nominal: 196, mass: 195.96495209, abundance: 0.2521 },\n            { nominal: 197, mass: 196.96734069 },\n            { nominal: 198, mass: 197.9678949, abundance: 0.07356 },\n            { nominal: 199, mass: 198.9705952 },\n            { nominal: 200, mass: 199.971443 },\n            { nominal: 201, mass: 200.974513 },\n            { nominal: 202, mass: 201.975639 },\n            { nominal: 203, mass: 202.97893 },\n            { nominal: 204, mass: 203.98076 },\n            { nominal: 205, mass: 204.98608 },\n            { nominal: 206, mass: 205.98966 },\n        ],\n        symbol: 'Pt',\n        mass: 195.084456864931,\n        name: 'Platinum',\n        monoisotopicMass: 194.9647917,\n    },\n    {\n        number: 79,\n        isotopes: [\n            { nominal: 169, mass: 168.99808 },\n            { nominal: 170, mass: 169.99597 },\n            { nominal: 171, mass: 170.991876 },\n            { nominal: 172, mass: 171.989942 },\n            { nominal: 173, mass: 172.986241 },\n            { nominal: 174, mass: 173.984717 },\n            { nominal: 175, mass: 174.981304 },\n            { nominal: 176, mass: 175.98025 },\n            { nominal: 177, mass: 176.97687 },\n            { nominal: 178, mass: 177.976032 },\n            { nominal: 179, mass: 178.973174 },\n            { nominal: 180, mass: 179.972523 },\n            { nominal: 181, mass: 180.970079 },\n            { nominal: 182, mass: 181.969618 },\n            { nominal: 183, mass: 182.967591 },\n            { nominal: 184, mass: 183.967452 },\n            { nominal: 185, mass: 184.96579 },\n            { nominal: 186, mass: 185.965953 },\n            { nominal: 187, mass: 186.964543 },\n            { nominal: 188, mass: 187.965349 },\n            { nominal: 189, mass: 188.963948 },\n            { nominal: 190, mass: 189.964698 },\n            { nominal: 191, mass: 190.963702 },\n            { nominal: 192, mass: 191.964814 },\n            { nominal: 193, mass: 192.9641373 },\n            { nominal: 194, mass: 193.9654178 },\n            { nominal: 195, mass: 194.9650352 },\n            { nominal: 196, mass: 195.9665699 },\n            { nominal: 197, mass: 196.96656879, abundance: 1 },\n            { nominal: 198, mass: 197.96824242 },\n            { nominal: 199, mass: 198.96876528 },\n            { nominal: 200, mass: 199.970756 },\n            { nominal: 201, mass: 200.9716575 },\n            { nominal: 202, mass: 201.973856 },\n            { nominal: 203, mass: 202.9751544 },\n            { nominal: 204, mass: 203.97783 },\n            { nominal: 205, mass: 204.97985 },\n            { nominal: 206, mass: 205.98474 },\n            { nominal: 207, mass: 206.9884 },\n            { nominal: 208, mass: 207.99345 },\n            { nominal: 209, mass: 208.99735 },\n            { nominal: 210, mass: 210.0025 },\n        ],\n        symbol: 'Au',\n        mass: 196.96656879,\n        name: 'Gold',\n        monoisotopicMass: 196.96656879,\n    },\n    {\n        number: 80,\n        isotopes: [\n            { nominal: 171, mass: 171.00353 },\n            { nominal: 172, mass: 171.99881 },\n            { nominal: 173, mass: 172.99709 },\n            { nominal: 174, mass: 173.992865 },\n            { nominal: 175, mass: 174.991441 },\n            { nominal: 176, mass: 175.987361 },\n            { nominal: 177, mass: 176.986277 },\n            { nominal: 178, mass: 177.982484 },\n            { nominal: 179, mass: 178.981831 },\n            { nominal: 180, mass: 179.97826 },\n            { nominal: 181, mass: 180.977819 },\n            { nominal: 182, mass: 181.974689 },\n            { nominal: 183, mass: 182.9744448 },\n            { nominal: 184, mass: 183.971714 },\n            { nominal: 185, mass: 184.971899 },\n            { nominal: 186, mass: 185.969362 },\n            { nominal: 187, mass: 186.969814 },\n            { nominal: 188, mass: 187.967567 },\n            { nominal: 189, mass: 188.968195 },\n            { nominal: 190, mass: 189.966323 },\n            { nominal: 191, mass: 190.967157 },\n            { nominal: 192, mass: 191.965635 },\n            { nominal: 193, mass: 192.966653 },\n            { nominal: 194, mass: 193.9654491 },\n            { nominal: 195, mass: 194.966721 },\n            { nominal: 196, mass: 195.9658326, abundance: 0.0015 },\n            { nominal: 197, mass: 196.9672128 },\n            { nominal: 198, mass: 197.9667686, abundance: 0.0997 },\n            { nominal: 199, mass: 198.96828064, abundance: 0.1687 },\n            { nominal: 200, mass: 199.96832659, abundance: 0.231 },\n            { nominal: 201, mass: 200.97030284, abundance: 0.1318 },\n            { nominal: 202, mass: 201.9706434, abundance: 0.2986 },\n            { nominal: 203, mass: 202.9728728 },\n            { nominal: 204, mass: 203.97349398, abundance: 0.0687 },\n            { nominal: 205, mass: 204.9760734 },\n            { nominal: 206, mass: 205.977514 },\n            { nominal: 207, mass: 206.9823 },\n            { nominal: 208, mass: 207.985759 },\n            { nominal: 209, mass: 208.99072 },\n            { nominal: 210, mass: 209.99424 },\n            { nominal: 211, mass: 210.99933 },\n            { nominal: 212, mass: 212.00296 },\n            { nominal: 213, mass: 213.00823 },\n            { nominal: 214, mass: 214.012 },\n            { nominal: 215, mass: 215.0174 },\n            { nominal: 216, mass: 216.02132 },\n        ],\n        symbol: 'Hg',\n        mass: 200.59916703455602,\n        name: 'Mercury',\n        monoisotopicMass: 201.9706434,\n    },\n    {\n        number: 81,\n        isotopes: [\n            { nominal: 176, mass: 176.000624 },\n            { nominal: 177, mass: 176.996431 },\n            { nominal: 178, mass: 177.99485 },\n            { nominal: 179, mass: 178.991111 },\n            { nominal: 180, mass: 179.990057 },\n            { nominal: 181, mass: 180.98626 },\n            { nominal: 182, mass: 181.985713 },\n            { nominal: 183, mass: 182.982193 },\n            { nominal: 184, mass: 183.981886 },\n            { nominal: 185, mass: 184.978789 },\n            { nominal: 186, mass: 185.978651 },\n            { nominal: 187, mass: 186.9759063 },\n            { nominal: 188, mass: 187.976021 },\n            { nominal: 189, mass: 188.973588 },\n            { nominal: 190, mass: 189.973828 },\n            { nominal: 191, mass: 190.9717842 },\n            { nominal: 192, mass: 191.972225 },\n            { nominal: 193, mass: 192.970502 },\n            { nominal: 194, mass: 193.971081 },\n            { nominal: 195, mass: 194.969774 },\n            { nominal: 196, mass: 195.970481 },\n            { nominal: 197, mass: 196.969576 },\n            { nominal: 198, mass: 197.970483 },\n            { nominal: 199, mass: 198.969877 },\n            { nominal: 200, mass: 199.9709633 },\n            { nominal: 201, mass: 200.970822 },\n            { nominal: 202, mass: 201.972102 },\n            { nominal: 203, mass: 202.9723446, abundance: 0.2952 },\n            { nominal: 204, mass: 203.9738639 },\n            { nominal: 205, mass: 204.9744278, abundance: 0.7048 },\n            { nominal: 206, mass: 205.9761106 },\n            { nominal: 207, mass: 206.9774197 },\n            { nominal: 208, mass: 207.982019 },\n            { nominal: 209, mass: 208.9853594 },\n            { nominal: 210, mass: 209.990074 },\n            { nominal: 211, mass: 210.993475 },\n            { nominal: 212, mass: 211.99834 },\n            { nominal: 213, mass: 213.001915 },\n            { nominal: 214, mass: 214.00694 },\n            { nominal: 215, mass: 215.01064 },\n            { nominal: 216, mass: 216.0158 },\n            { nominal: 217, mass: 217.01966 },\n            { nominal: 218, mass: 218.02479 },\n        ],\n        symbol: 'Tl',\n        mass: 204.38341283936,\n        name: 'Thallium',\n        monoisotopicMass: 204.9744278,\n    },\n    {\n        number: 82,\n        isotopes: [\n            { nominal: 178, mass: 178.003831 },\n            { nominal: 179, mass: 179.002201 },\n            { nominal: 180, mass: 179.997928 },\n            { nominal: 181, mass: 180.996653 },\n            { nominal: 182, mass: 181.992672 },\n            { nominal: 183, mass: 182.991872 },\n            { nominal: 184, mass: 183.988136 },\n            { nominal: 185, mass: 184.98761 },\n            { nominal: 186, mass: 185.984238 },\n            { nominal: 187, mass: 186.9839109 },\n            { nominal: 188, mass: 187.980875 },\n            { nominal: 189, mass: 188.980807 },\n            { nominal: 190, mass: 189.978082 },\n            { nominal: 191, mass: 190.978276 },\n            { nominal: 192, mass: 191.975775 },\n            { nominal: 193, mass: 192.976173 },\n            { nominal: 194, mass: 193.974012 },\n            { nominal: 195, mass: 194.974543 },\n            { nominal: 196, mass: 195.972774 },\n            { nominal: 197, mass: 196.9734312 },\n            { nominal: 198, mass: 197.972034 },\n            { nominal: 199, mass: 198.972913 },\n            { nominal: 200, mass: 199.971819 },\n            { nominal: 201, mass: 200.972883 },\n            { nominal: 202, mass: 201.972152 },\n            { nominal: 203, mass: 202.9733911 },\n            { nominal: 204, mass: 203.973044, abundance: 0.014 },\n            { nominal: 205, mass: 204.9744822 },\n            { nominal: 206, mass: 205.9744657, abundance: 0.241 },\n            { nominal: 207, mass: 206.9758973, abundance: 0.221 },\n            { nominal: 208, mass: 207.9766525, abundance: 0.524 },\n            { nominal: 209, mass: 208.9810905 },\n            { nominal: 210, mass: 209.9841889 },\n            { nominal: 211, mass: 210.9887371 },\n            { nominal: 212, mass: 211.9918977 },\n            { nominal: 213, mass: 212.9965629 },\n            { nominal: 214, mass: 213.9998059 },\n            { nominal: 215, mass: 215.00474 },\n            { nominal: 216, mass: 216.00803 },\n            { nominal: 217, mass: 217.01314 },\n            { nominal: 218, mass: 218.01659 },\n            { nominal: 219, mass: 219.02177 },\n            { nominal: 220, mass: 220.02541 },\n        ],\n        symbol: 'Pb',\n        mass: 207.216908063,\n        name: 'Lead',\n        monoisotopicMass: 207.9766525,\n    },\n    {\n        number: 83,\n        isotopes: [\n            { nominal: 184, mass: 184.001275 },\n            { nominal: 185, mass: 184.9976 },\n            { nominal: 186, mass: 185.996644 },\n            { nominal: 187, mass: 186.993147 },\n            { nominal: 188, mass: 187.992287 },\n            { nominal: 189, mass: 188.989195 },\n            { nominal: 190, mass: 189.988622 },\n            { nominal: 191, mass: 190.9857866 },\n            { nominal: 192, mass: 191.985469 },\n            { nominal: 193, mass: 192.98296 },\n            { nominal: 194, mass: 193.982785 },\n            { nominal: 195, mass: 194.9806488 },\n            { nominal: 196, mass: 195.980667 },\n            { nominal: 197, mass: 196.9788651 },\n            { nominal: 198, mass: 197.979206 },\n            { nominal: 199, mass: 198.977673 },\n            { nominal: 200, mass: 199.978131 },\n            { nominal: 201, mass: 200.97701 },\n            { nominal: 202, mass: 201.977734 },\n            { nominal: 203, mass: 202.976893 },\n            { nominal: 204, mass: 203.9778361 },\n            { nominal: 205, mass: 204.9773867 },\n            { nominal: 206, mass: 205.9784993 },\n            { nominal: 207, mass: 206.978471 },\n            { nominal: 208, mass: 207.9797425 },\n            { nominal: 209, mass: 208.9803991, abundance: 1 },\n            { nominal: 210, mass: 209.9841207 },\n            { nominal: 211, mass: 210.9872697 },\n            { nominal: 212, mass: 211.991286 },\n            { nominal: 213, mass: 212.9943851 },\n            { nominal: 214, mass: 213.998712 },\n            { nominal: 215, mass: 215.00177 },\n            { nominal: 216, mass: 216.006306 },\n            { nominal: 217, mass: 217.009372 },\n            { nominal: 218, mass: 218.014188 },\n            { nominal: 219, mass: 219.01748 },\n            { nominal: 220, mass: 220.02235 },\n            { nominal: 221, mass: 221.02587 },\n            { nominal: 222, mass: 222.03078 },\n            { nominal: 223, mass: 223.0345 },\n            { nominal: 224, mass: 224.03947 },\n        ],\n        symbol: 'Bi',\n        mass: 208.9803991,\n        name: 'Bismuth',\n        monoisotopicMass: 208.9803991,\n    },\n    {\n        number: 84,\n        isotopes: [\n            { nominal: 186, mass: 186.004393 },\n            { nominal: 187, mass: 187.003041 },\n            { nominal: 188, mass: 187.999416 },\n            { nominal: 189, mass: 188.998473 },\n            { nominal: 190, mass: 189.995101 },\n            { nominal: 191, mass: 190.9945585 },\n            { nominal: 192, mass: 191.991336 },\n            { nominal: 193, mass: 192.991026 },\n            { nominal: 194, mass: 193.988186 },\n            { nominal: 195, mass: 194.988126 },\n            { nominal: 196, mass: 195.985526 },\n            { nominal: 197, mass: 196.98566 },\n            { nominal: 198, mass: 197.983389 },\n            { nominal: 199, mass: 198.983667 },\n            { nominal: 200, mass: 199.981799 },\n            { nominal: 201, mass: 200.9822598 },\n            { nominal: 202, mass: 201.980758 },\n            { nominal: 203, mass: 202.9814161 },\n            { nominal: 204, mass: 203.98031 },\n            { nominal: 205, mass: 204.981203 },\n            { nominal: 206, mass: 205.980474 },\n            { nominal: 207, mass: 206.9815938 },\n            { nominal: 208, mass: 207.9812461 },\n            { nominal: 209, mass: 208.9824308 },\n            { nominal: 210, mass: 209.9828741 },\n            { nominal: 211, mass: 210.9866536 },\n            { nominal: 212, mass: 211.9888684 },\n            { nominal: 213, mass: 212.9928576 },\n            { nominal: 214, mass: 213.9952017 },\n            { nominal: 215, mass: 214.9994201 },\n            { nominal: 216, mass: 216.0019152 },\n            { nominal: 217, mass: 217.0063182 },\n            { nominal: 218, mass: 218.0089735 },\n            { nominal: 219, mass: 219.013614 },\n            { nominal: 220, mass: 220.016386 },\n            { nominal: 221, mass: 221.021228 },\n            { nominal: 222, mass: 222.02414 },\n            { nominal: 223, mass: 223.02907 },\n            { nominal: 224, mass: 224.03211 },\n            { nominal: 225, mass: 225.03707 },\n            { nominal: 226, mass: 226.04031 },\n            { nominal: 227, mass: 227.04539 },\n        ],\n        symbol: 'Po',\n        mass: null,\n        name: 'Polonium',\n    },\n    {\n        number: 85,\n        isotopes: [\n            { nominal: 191, mass: 191.004148 },\n            { nominal: 192, mass: 192.003152 },\n            { nominal: 193, mass: 192.999927 },\n            { nominal: 194, mass: 193.999236 },\n            { nominal: 195, mass: 194.9962685 },\n            { nominal: 196, mass: 195.9958 },\n            { nominal: 197, mass: 196.993189 },\n            { nominal: 198, mass: 197.992784 },\n            { nominal: 199, mass: 198.9905277 },\n            { nominal: 200, mass: 199.990351 },\n            { nominal: 201, mass: 200.9884171 },\n            { nominal: 202, mass: 201.98863 },\n            { nominal: 203, mass: 202.986943 },\n            { nominal: 204, mass: 203.987251 },\n            { nominal: 205, mass: 204.986076 },\n            { nominal: 206, mass: 205.986657 },\n            { nominal: 207, mass: 206.9858 },\n            { nominal: 208, mass: 207.9866133 },\n            { nominal: 209, mass: 208.9861702 },\n            { nominal: 210, mass: 209.9871479 },\n            { nominal: 211, mass: 210.9874966 },\n            { nominal: 212, mass: 211.9907377 },\n            { nominal: 213, mass: 212.992937 },\n            { nominal: 214, mass: 213.9963721 },\n            { nominal: 215, mass: 214.9986528 },\n            { nominal: 216, mass: 216.0024236 },\n            { nominal: 217, mass: 217.0047192 },\n            { nominal: 218, mass: 218.008695 },\n            { nominal: 219, mass: 219.0111618 },\n            { nominal: 220, mass: 220.015433 },\n            { nominal: 221, mass: 221.018017 },\n            { nominal: 222, mass: 222.022494 },\n            { nominal: 223, mass: 223.025151 },\n            { nominal: 224, mass: 224.029749 },\n            { nominal: 225, mass: 225.03263 },\n            { nominal: 226, mass: 226.03716 },\n            { nominal: 227, mass: 227.04024 },\n            { nominal: 228, mass: 228.04475 },\n            { nominal: 229, mass: 229.04812 },\n        ],\n        symbol: 'At',\n        mass: null,\n        name: 'Astatine',\n    },\n    {\n        number: 86,\n        isotopes: [\n            { nominal: 193, mass: 193.009708 },\n            { nominal: 194, mass: 194.006144 },\n            { nominal: 195, mass: 195.005422 },\n            { nominal: 196, mass: 196.002116 },\n            { nominal: 197, mass: 197.001585 },\n            { nominal: 198, mass: 197.998679 },\n            { nominal: 199, mass: 198.99839 },\n            { nominal: 200, mass: 199.99569 },\n            { nominal: 201, mass: 200.995628 },\n            { nominal: 202, mass: 201.993264 },\n            { nominal: 203, mass: 202.993388 },\n            { nominal: 204, mass: 203.99143 },\n            { nominal: 205, mass: 204.991719 },\n            { nominal: 206, mass: 205.990214 },\n            { nominal: 207, mass: 206.9907303 },\n            { nominal: 208, mass: 207.989635 },\n            { nominal: 209, mass: 208.990415 },\n            { nominal: 210, mass: 209.9896891 },\n            { nominal: 211, mass: 210.9906011 },\n            { nominal: 212, mass: 211.9907039 },\n            { nominal: 213, mass: 212.9938831 },\n            { nominal: 214, mass: 213.995363 },\n            { nominal: 215, mass: 214.9987459 },\n            { nominal: 216, mass: 216.0002719 },\n            { nominal: 217, mass: 217.003928 },\n            { nominal: 218, mass: 218.0056016 },\n            { nominal: 219, mass: 219.0094804 },\n            { nominal: 220, mass: 220.0113941 },\n            { nominal: 221, mass: 221.0155371 },\n            { nominal: 222, mass: 222.0175782 },\n            { nominal: 223, mass: 223.0218893 },\n            { nominal: 224, mass: 224.024096 },\n            { nominal: 225, mass: 225.028486 },\n            { nominal: 226, mass: 226.030861 },\n            { nominal: 227, mass: 227.035304 },\n            { nominal: 228, mass: 228.037835 },\n            { nominal: 229, mass: 229.042257 },\n            { nominal: 230, mass: 230.04514 },\n            { nominal: 231, mass: 231.04987 },\n        ],\n        symbol: 'Rn',\n        mass: null,\n        name: 'Radon',\n    },\n    {\n        number: 87,\n        isotopes: [\n            { nominal: 199, mass: 199.007259 },\n            { nominal: 200, mass: 200.006586 },\n            { nominal: 201, mass: 201.003867 },\n            { nominal: 202, mass: 202.00332 },\n            { nominal: 203, mass: 203.0009407 },\n            { nominal: 204, mass: 204.000652 },\n            { nominal: 205, mass: 204.9985939 },\n            { nominal: 206, mass: 205.998666 },\n            { nominal: 207, mass: 206.996946 },\n            { nominal: 208, mass: 207.997138 },\n            { nominal: 209, mass: 208.995955 },\n            { nominal: 210, mass: 209.996422 },\n            { nominal: 211, mass: 210.995556 },\n            { nominal: 212, mass: 211.9962257 },\n            { nominal: 213, mass: 212.996186 },\n            { nominal: 214, mass: 213.9989713 },\n            { nominal: 215, mass: 215.0003418 },\n            { nominal: 216, mass: 216.0031899 },\n            { nominal: 217, mass: 217.0046323 },\n            { nominal: 218, mass: 218.0075787 },\n            { nominal: 219, mass: 219.0092524 },\n            { nominal: 220, mass: 220.0123277 },\n            { nominal: 221, mass: 221.0142552 },\n            { nominal: 222, mass: 222.017552 },\n            { nominal: 223, mass: 223.019736 },\n            { nominal: 224, mass: 224.023398 },\n            { nominal: 225, mass: 225.025573 },\n            { nominal: 226, mass: 226.029566 },\n            { nominal: 227, mass: 227.031869 },\n            { nominal: 228, mass: 228.035823 },\n            { nominal: 229, mass: 229.038298 },\n            { nominal: 230, mass: 230.042416 },\n            { nominal: 231, mass: 231.045158 },\n            { nominal: 232, mass: 232.04937 },\n            { nominal: 233, mass: 233.05264 },\n        ],\n        symbol: 'Fr',\n        mass: null,\n        name: 'Francium',\n    },\n    {\n        number: 88,\n        isotopes: [\n            { nominal: 201, mass: 201.01271 },\n            { nominal: 202, mass: 202.00976 },\n            { nominal: 203, mass: 203.009304 },\n            { nominal: 204, mass: 204.006492 },\n            { nominal: 205, mass: 205.006268 },\n            { nominal: 206, mass: 206.003828 },\n            { nominal: 207, mass: 207.003799 },\n            { nominal: 208, mass: 208.001841 },\n            { nominal: 209, mass: 209.00199 },\n            { nominal: 210, mass: 210.000494 },\n            { nominal: 211, mass: 211.0008932 },\n            { nominal: 212, mass: 211.999787 },\n            { nominal: 213, mass: 213.000384 },\n            { nominal: 214, mass: 214.0000997 },\n            { nominal: 215, mass: 215.0027204 },\n            { nominal: 216, mass: 216.0035334 },\n            { nominal: 217, mass: 217.0063207 },\n            { nominal: 218, mass: 218.007141 },\n            { nominal: 219, mass: 219.0100855 },\n            { nominal: 220, mass: 220.0110259 },\n            { nominal: 221, mass: 221.0139177 },\n            { nominal: 222, mass: 222.0153748 },\n            { nominal: 223, mass: 223.0185023 },\n            { nominal: 224, mass: 224.020212 },\n            { nominal: 225, mass: 225.0236119 },\n            { nominal: 226, mass: 226.0254103 },\n            { nominal: 227, mass: 227.0291783 },\n            { nominal: 228, mass: 228.0310707 },\n            { nominal: 229, mass: 229.034942 },\n            { nominal: 230, mass: 230.037055 },\n            { nominal: 231, mass: 231.041027 },\n            { nominal: 232, mass: 232.0434753 },\n            { nominal: 233, mass: 233.047582 },\n            { nominal: 234, mass: 234.050342 },\n            { nominal: 235, mass: 235.05497 },\n        ],\n        symbol: 'Ra',\n        mass: null,\n        name: 'Radium',\n    },\n    {\n        number: 89,\n        isotopes: [\n            { nominal: 206, mass: 206.014452 },\n            { nominal: 207, mass: 207.011966 },\n            { nominal: 208, mass: 208.01155 },\n            { nominal: 209, mass: 209.009495 },\n            { nominal: 210, mass: 210.009436 },\n            { nominal: 211, mass: 211.007732 },\n            { nominal: 212, mass: 212.007813 },\n            { nominal: 213, mass: 213.006609 },\n            { nominal: 214, mass: 214.006918 },\n            { nominal: 215, mass: 215.006475 },\n            { nominal: 216, mass: 216.008743 },\n            { nominal: 217, mass: 217.009344 },\n            { nominal: 218, mass: 218.011642 },\n            { nominal: 219, mass: 219.012421 },\n            { nominal: 220, mass: 220.0147549 },\n            { nominal: 221, mass: 221.015592 },\n            { nominal: 222, mass: 222.0178442 },\n            { nominal: 223, mass: 223.0191377 },\n            { nominal: 224, mass: 224.0217232 },\n            { nominal: 225, mass: 225.02323 },\n            { nominal: 226, mass: 226.0260984 },\n            { nominal: 227, mass: 227.0277523 },\n            { nominal: 228, mass: 228.0310215 },\n            { nominal: 229, mass: 229.032956 },\n            { nominal: 230, mass: 230.036327 },\n            { nominal: 231, mass: 231.038393 },\n            { nominal: 232, mass: 232.042034 },\n            { nominal: 233, mass: 233.044346 },\n            { nominal: 234, mass: 234.048139 },\n            { nominal: 235, mass: 235.05084 },\n            { nominal: 236, mass: 236.054988 },\n            { nominal: 237, mass: 237.05827 },\n        ],\n        symbol: 'Ac',\n        mass: null,\n        name: 'Actinium',\n    },\n    {\n        number: 90,\n        isotopes: [\n            { nominal: 208, mass: 208.0179 },\n            { nominal: 209, mass: 209.017753 },\n            { nominal: 210, mass: 210.015094 },\n            { nominal: 211, mass: 211.014929 },\n            { nominal: 212, mass: 212.012988 },\n            { nominal: 213, mass: 213.013009 },\n            { nominal: 214, mass: 214.0115 },\n            { nominal: 215, mass: 215.0117248 },\n            { nominal: 216, mass: 216.011056 },\n            { nominal: 217, mass: 217.013117 },\n            { nominal: 218, mass: 218.013276 },\n            { nominal: 219, mass: 219.015537 },\n            { nominal: 220, mass: 220.015748 },\n            { nominal: 221, mass: 221.018184 },\n            { nominal: 222, mass: 222.018469 },\n            { nominal: 223, mass: 223.0208119 },\n            { nominal: 224, mass: 224.021464 },\n            { nominal: 225, mass: 225.0239514 },\n            { nominal: 226, mass: 226.0249034 },\n            { nominal: 227, mass: 227.0277042 },\n            { nominal: 228, mass: 228.0287413 },\n            { nominal: 229, mass: 229.0317627 },\n            { nominal: 230, mass: 230.0331341 },\n            { nominal: 231, mass: 231.0363046 },\n            { nominal: 232, mass: 232.0380558, abundance: 1 },\n            { nominal: 233, mass: 233.0415823 },\n            { nominal: 234, mass: 234.0436014 },\n            { nominal: 235, mass: 235.047255 },\n            { nominal: 236, mass: 236.049657 },\n            { nominal: 237, mass: 237.053629 },\n            { nominal: 238, mass: 238.0565 },\n            { nominal: 239, mass: 239.06077 },\n        ],\n        symbol: 'Th',\n        mass: 232.0380558,\n        name: 'Thorium',\n        monoisotopicMass: 232.0380558,\n    },\n    {\n        number: 91,\n        isotopes: [\n            { nominal: 212, mass: 212.023203 },\n            { nominal: 213, mass: 213.021109 },\n            { nominal: 214, mass: 214.020918 },\n            { nominal: 215, mass: 215.019183 },\n            { nominal: 216, mass: 216.019109 },\n            { nominal: 217, mass: 217.018325 },\n            { nominal: 218, mass: 218.020059 },\n            { nominal: 219, mass: 219.019904 },\n            { nominal: 220, mass: 220.021705 },\n            { nominal: 221, mass: 221.021875 },\n            { nominal: 222, mass: 222.023784 },\n            { nominal: 223, mass: 223.023963 },\n            { nominal: 224, mass: 224.0256176 },\n            { nominal: 225, mass: 225.026131 },\n            { nominal: 226, mass: 226.027948 },\n            { nominal: 227, mass: 227.0288054 },\n            { nominal: 228, mass: 228.0310517 },\n            { nominal: 229, mass: 229.0320972 },\n            { nominal: 230, mass: 230.034541 },\n            { nominal: 231, mass: 231.0358842, abundance: 1 },\n            { nominal: 232, mass: 232.0385917 },\n            { nominal: 233, mass: 233.0402472 },\n            { nominal: 234, mass: 234.0433072 },\n            { nominal: 235, mass: 235.045399 },\n            { nominal: 236, mass: 236.048668 },\n            { nominal: 237, mass: 237.051023 },\n            { nominal: 238, mass: 238.054637 },\n            { nominal: 239, mass: 239.05726 },\n            { nominal: 240, mass: 240.06098 },\n            { nominal: 241, mass: 241.06408 },\n        ],\n        symbol: 'Pa',\n        mass: 231.0358842,\n        name: 'Protactinium',\n        monoisotopicMass: 231.0358842,\n    },\n    {\n        number: 92,\n        isotopes: [\n            { nominal: 217, mass: 217.02466 },\n            { nominal: 218, mass: 218.023523 },\n            { nominal: 219, mass: 219.024999 },\n            { nominal: 220, mass: 220.02462 },\n            { nominal: 221, mass: 221.02628 },\n            { nominal: 222, mass: 222.026 },\n            { nominal: 223, mass: 223.027739 },\n            { nominal: 224, mass: 224.027605 },\n            { nominal: 225, mass: 225.029391 },\n            { nominal: 226, mass: 226.029339 },\n            { nominal: 227, mass: 227.031157 },\n            { nominal: 228, mass: 228.031371 },\n            { nominal: 229, mass: 229.0335063 },\n            { nominal: 230, mass: 230.0339401 },\n            { nominal: 231, mass: 231.0362939 },\n            { nominal: 232, mass: 232.0371563 },\n            { nominal: 233, mass: 233.0396355 },\n            { nominal: 234, mass: 234.0409523, abundance: 0.000054 },\n            { nominal: 235, mass: 235.0439301, abundance: 0.007204 },\n            { nominal: 236, mass: 236.0455682 },\n            { nominal: 237, mass: 237.0487304 },\n            { nominal: 238, mass: 238.0507884, abundance: 0.992742 },\n            { nominal: 239, mass: 239.0542935 },\n            { nominal: 240, mass: 240.0565934 },\n            { nominal: 241, mass: 241.06033 },\n            { nominal: 242, mass: 242.06293 },\n            { nominal: 243, mass: 243.06699 },\n        ],\n        symbol: 'U',\n        mass: 238.0289104616574,\n        name: 'Uranium',\n        monoisotopicMass: 238.0507884,\n    },\n    {\n        number: 93,\n        isotopes: [\n            { nominal: 219, mass: 219.03143 },\n            { nominal: 220, mass: 220.03254 },\n            { nominal: 221, mass: 221.03204 },\n            { nominal: 222, mass: 222.0333 },\n            { nominal: 223, mass: 223.03285 },\n            { nominal: 224, mass: 224.03422 },\n            { nominal: 225, mass: 225.033911 },\n            { nominal: 226, mass: 226.035188 },\n            { nominal: 227, mass: 227.034957 },\n            { nominal: 228, mass: 228.036067 },\n            { nominal: 229, mass: 229.036264 },\n            { nominal: 230, mass: 230.037828 },\n            { nominal: 231, mass: 231.038245 },\n            { nominal: 232, mass: 232.04011 },\n            { nominal: 233, mass: 233.040741 },\n            { nominal: 234, mass: 234.0428953 },\n            { nominal: 235, mass: 235.0440635 },\n            { nominal: 236, mass: 236.04657 },\n            { nominal: 237, mass: 237.0481736 },\n            { nominal: 238, mass: 238.0509466 },\n            { nominal: 239, mass: 239.0529392 },\n            { nominal: 240, mass: 240.056165 },\n            { nominal: 241, mass: 241.058253 },\n            { nominal: 242, mass: 242.06164 },\n            { nominal: 243, mass: 243.06428 },\n            { nominal: 244, mass: 244.06785 },\n            { nominal: 245, mass: 245.0708 },\n        ],\n        symbol: 'Np',\n        mass: null,\n        name: 'Neptunium',\n    },\n    {\n        number: 94,\n        isotopes: [\n            { nominal: 228, mass: 228.038732 },\n            { nominal: 229, mass: 229.040144 },\n            { nominal: 230, mass: 230.03965 },\n            { nominal: 231, mass: 231.041102 },\n            { nominal: 232, mass: 232.041185 },\n            { nominal: 233, mass: 233.042998 },\n            { nominal: 234, mass: 234.0433174 },\n            { nominal: 235, mass: 235.045286 },\n            { nominal: 236, mass: 236.0460581 },\n            { nominal: 237, mass: 237.0484098 },\n            { nominal: 238, mass: 238.0495601 },\n            { nominal: 239, mass: 239.0521636 },\n            { nominal: 240, mass: 240.0538138 },\n            { nominal: 241, mass: 241.0568517 },\n            { nominal: 242, mass: 242.0587428 },\n            { nominal: 243, mass: 243.0620036 },\n            { nominal: 244, mass: 244.0642053 },\n            { nominal: 245, mass: 245.067826 },\n            { nominal: 246, mass: 246.070205 },\n            { nominal: 247, mass: 247.07419 },\n        ],\n        symbol: 'Pu',\n        mass: null,\n        name: 'Plutonium',\n    },\n    {\n        number: 95,\n        isotopes: [\n            { nominal: 230, mass: 230.04609 },\n            { nominal: 231, mass: 231.04556 },\n            { nominal: 232, mass: 232.04645 },\n            { nominal: 233, mass: 233.04644 },\n            { nominal: 234, mass: 234.04773 },\n            { nominal: 235, mass: 235.047908 },\n            { nominal: 236, mass: 236.04943 },\n            { nominal: 237, mass: 237.049996 },\n            { nominal: 238, mass: 238.051985 },\n            { nominal: 239, mass: 239.0530247 },\n            { nominal: 240, mass: 240.0553 },\n            { nominal: 241, mass: 241.0568293 },\n            { nominal: 242, mass: 242.0595494 },\n            { nominal: 243, mass: 243.0613813 },\n            { nominal: 244, mass: 244.0642851 },\n            { nominal: 245, mass: 245.0664548 },\n            { nominal: 246, mass: 246.069775 },\n            { nominal: 247, mass: 247.07209 },\n            { nominal: 248, mass: 248.07575 },\n            { nominal: 249, mass: 249.07848 },\n        ],\n        symbol: 'Am',\n        name: 'Americium',\n        mass: null,\n    },\n    {\n        number: 96,\n        isotopes: [\n            { nominal: 232, mass: 232.04982 },\n            { nominal: 233, mass: 233.05077 },\n            { nominal: 234, mass: 234.05016 },\n            { nominal: 235, mass: 235.05154 },\n            { nominal: 236, mass: 236.051374 },\n            { nominal: 237, mass: 237.052869 },\n            { nominal: 238, mass: 238.053081 },\n            { nominal: 239, mass: 239.05491 },\n            { nominal: 240, mass: 240.0555297 },\n            { nominal: 241, mass: 241.0576532 },\n            { nominal: 242, mass: 242.058836 },\n            { nominal: 243, mass: 243.0613893 },\n            { nominal: 244, mass: 244.0627528 },\n            { nominal: 245, mass: 245.0654915 },\n            { nominal: 246, mass: 246.0672238 },\n            { nominal: 247, mass: 247.0703541 },\n            { nominal: 248, mass: 248.0723499 },\n            { nominal: 249, mass: 249.0759548 },\n            { nominal: 250, mass: 250.078358 },\n            { nominal: 251, mass: 251.082286 },\n            { nominal: 252, mass: 252.08487 },\n        ],\n        symbol: 'Cm',\n        name: 'Curium',\n        mass: null,\n    },\n    {\n        number: 97,\n        isotopes: [\n            { nominal: 234, mass: 234.05727 },\n            { nominal: 235, mass: 235.05658 },\n            { nominal: 236, mass: 236.05748 },\n            { nominal: 237, mass: 237.0571 },\n            { nominal: 238, mass: 238.0582 },\n            { nominal: 239, mass: 239.05824 },\n            { nominal: 240, mass: 240.05976 },\n            { nominal: 241, mass: 241.06016 },\n            { nominal: 242, mass: 242.06198 },\n            { nominal: 243, mass: 243.0630078 },\n            { nominal: 244, mass: 244.065181 },\n            { nominal: 245, mass: 245.0663618 },\n            { nominal: 246, mass: 246.068673 },\n            { nominal: 247, mass: 247.0703073 },\n            { nominal: 248, mass: 248.073088 },\n            { nominal: 249, mass: 249.0749877 },\n            { nominal: 250, mass: 250.0783167 },\n            { nominal: 251, mass: 251.080762 },\n            { nominal: 252, mass: 252.08431 },\n            { nominal: 253, mass: 253.08688 },\n            { nominal: 254, mass: 254.0906 },\n        ],\n        symbol: 'Bk',\n        name: 'Berkelium',\n        mass: null,\n    },\n    {\n        number: 98,\n        isotopes: [\n            { nominal: 237, mass: 237.062198 },\n            { nominal: 238, mass: 238.06149 },\n            { nominal: 239, mass: 239.06253 },\n            { nominal: 240, mass: 240.062256 },\n            { nominal: 241, mass: 241.06369 },\n            { nominal: 242, mass: 242.063754 },\n            { nominal: 243, mass: 243.06548 },\n            { nominal: 244, mass: 244.0660008 },\n            { nominal: 245, mass: 245.0680487 },\n            { nominal: 246, mass: 246.0688055 },\n            { nominal: 247, mass: 247.070965 },\n            { nominal: 248, mass: 248.0721851 },\n            { nominal: 249, mass: 249.0748539 },\n            { nominal: 250, mass: 250.0764062 },\n            { nominal: 251, mass: 251.0795886 },\n            { nominal: 252, mass: 252.0816272 },\n            { nominal: 253, mass: 253.0851345 },\n            { nominal: 254, mass: 254.087324 },\n            { nominal: 255, mass: 255.09105 },\n            { nominal: 256, mass: 256.09344 },\n        ],\n        symbol: 'Cf',\n        name: 'Californium',\n        mass: null,\n    },\n    {\n        number: 99,\n        isotopes: [\n            { nominal: 239, mass: 239.06823 },\n            { nominal: 240, mass: 240.06892 },\n            { nominal: 241, mass: 241.06856 },\n            { nominal: 242, mass: 242.06957 },\n            { nominal: 243, mass: 243.06951 },\n            { nominal: 244, mass: 244.07088 },\n            { nominal: 245, mass: 245.07125 },\n            { nominal: 246, mass: 246.0729 },\n            { nominal: 247, mass: 247.073622 },\n            { nominal: 248, mass: 248.075471 },\n            { nominal: 249, mass: 249.076411 },\n            { nominal: 250, mass: 250.07861 },\n            { nominal: 251, mass: 251.0799936 },\n            { nominal: 252, mass: 252.08298 },\n            { nominal: 253, mass: 253.0848257 },\n            { nominal: 254, mass: 254.0880222 },\n            { nominal: 255, mass: 255.090275 },\n            { nominal: 256, mass: 256.0936 },\n            { nominal: 257, mass: 257.09598 },\n            { nominal: 258, mass: 258.09952 },\n        ],\n        symbol: 'Es',\n        name: 'Einsteinium',\n        mass: null,\n    },\n    {\n        number: 100,\n        isotopes: [\n            { nominal: 241, mass: 241.07421 },\n            { nominal: 242, mass: 242.07343 },\n            { nominal: 243, mass: 243.07446 },\n            { nominal: 244, mass: 244.07404 },\n            { nominal: 245, mass: 245.07535 },\n            { nominal: 246, mass: 246.07535 },\n            { nominal: 247, mass: 247.07694 },\n            { nominal: 248, mass: 248.0771865 },\n            { nominal: 249, mass: 249.0789275 },\n            { nominal: 250, mass: 250.079521 },\n            { nominal: 251, mass: 251.08154 },\n            { nominal: 252, mass: 252.0824671 },\n            { nominal: 253, mass: 253.0851846 },\n            { nominal: 254, mass: 254.0868544 },\n            { nominal: 255, mass: 255.089964 },\n            { nominal: 256, mass: 256.0917745 },\n            { nominal: 257, mass: 257.0951061 },\n            { nominal: 258, mass: 258.09708 },\n            { nominal: 259, mass: 259.1006 },\n            { nominal: 260, mass: 260.10281 },\n        ],\n        symbol: 'Fm',\n        name: 'Fermium',\n        mass: null,\n    },\n    {\n        number: 101,\n        isotopes: [\n            { nominal: 245, mass: 245.08081 },\n            { nominal: 246, mass: 246.08171 },\n            { nominal: 247, mass: 247.08152 },\n            { nominal: 248, mass: 248.08282 },\n            { nominal: 249, mass: 249.08291 },\n            { nominal: 250, mass: 250.08441 },\n            { nominal: 251, mass: 251.084774 },\n            { nominal: 252, mass: 252.08643 },\n            { nominal: 253, mass: 253.087144 },\n            { nominal: 254, mass: 254.08959 },\n            { nominal: 255, mass: 255.0910841 },\n            { nominal: 256, mass: 256.09389 },\n            { nominal: 257, mass: 257.0955424 },\n            { nominal: 258, mass: 258.0984315 },\n            { nominal: 259, mass: 259.10051 },\n            { nominal: 260, mass: 260.10365 },\n            { nominal: 261, mass: 261.10583 },\n            { nominal: 262, mass: 262.1091 },\n        ],\n        symbol: 'Md',\n        name: 'Mendelevium',\n        mass: null,\n    },\n    {\n        number: 102,\n        isotopes: [\n            { nominal: 248, mass: 248.08655 },\n            { nominal: 249, mass: 249.0878 },\n            { nominal: 250, mass: 250.08756 },\n            { nominal: 251, mass: 251.08894 },\n            { nominal: 252, mass: 252.088967 },\n            { nominal: 253, mass: 253.0905641 },\n            { nominal: 254, mass: 254.090956 },\n            { nominal: 255, mass: 255.093191 },\n            { nominal: 256, mass: 256.0942829 },\n            { nominal: 257, mass: 257.0968878 },\n            { nominal: 258, mass: 258.09821 },\n            { nominal: 259, mass: 259.10103 },\n            { nominal: 260, mass: 260.10264 },\n            { nominal: 261, mass: 261.1057 },\n            { nominal: 262, mass: 262.10746 },\n            { nominal: 263, mass: 263.11071 },\n            { nominal: 264, mass: 264.11273 },\n        ],\n        symbol: 'No',\n        name: 'Nobelium',\n        mass: null,\n    },\n    {\n        number: 103,\n        isotopes: [\n            { nominal: 251, mass: 251.09418 },\n            { nominal: 252, mass: 252.09526 },\n            { nominal: 253, mass: 253.09509 },\n            { nominal: 254, mass: 254.09648 },\n            { nominal: 255, mass: 255.096562 },\n            { nominal: 256, mass: 256.098494 },\n            { nominal: 257, mass: 257.099418 },\n            { nominal: 258, mass: 258.10176 },\n            { nominal: 259, mass: 259.102902 },\n            { nominal: 260, mass: 260.1055 },\n            { nominal: 261, mass: 261.10688 },\n            { nominal: 262, mass: 262.10961 },\n            { nominal: 263, mass: 263.11136 },\n            { nominal: 264, mass: 264.1142 },\n            { nominal: 265, mass: 265.11619 },\n            { nominal: 266, mass: 266.11983 },\n        ],\n        symbol: 'Lr',\n        name: 'Lawrencium',\n        mass: null,\n    },\n    {\n        number: 104,\n        isotopes: [\n            { nominal: 253, mass: 253.10044 },\n            { nominal: 254, mass: 254.10005 },\n            { nominal: 255, mass: 255.10127 },\n            { nominal: 256, mass: 256.101152 },\n            { nominal: 257, mass: 257.102918 },\n            { nominal: 258, mass: 258.103428 },\n            { nominal: 259, mass: 259.105596 },\n            { nominal: 260, mass: 260.10644 },\n            { nominal: 261, mass: 261.108773 },\n            { nominal: 262, mass: 262.10992 },\n            { nominal: 263, mass: 263.11249 },\n            { nominal: 264, mass: 264.11388 },\n            { nominal: 265, mass: 265.11668 },\n            { nominal: 266, mass: 266.11817 },\n            { nominal: 267, mass: 267.12179 },\n            { nominal: 268, mass: 268.12397 },\n        ],\n        symbol: 'Rf',\n        name: 'Rutherfordium',\n        mass: null,\n    },\n    {\n        number: 105,\n        isotopes: [\n            { nominal: 255, mass: 255.10707 },\n            { nominal: 256, mass: 256.10789 },\n            { nominal: 257, mass: 257.10758 },\n            { nominal: 258, mass: 258.10928 },\n            { nominal: 259, mass: 259.109492 },\n            { nominal: 260, mass: 260.1113 },\n            { nominal: 261, mass: 261.11192 },\n            { nominal: 262, mass: 262.11407 },\n            { nominal: 263, mass: 263.11499 },\n            { nominal: 264, mass: 264.11741 },\n            { nominal: 265, mass: 265.11861 },\n            { nominal: 266, mass: 266.12103 },\n            { nominal: 267, mass: 267.12247 },\n            { nominal: 268, mass: 268.12567 },\n            { nominal: 269, mass: 269.12791 },\n            { nominal: 270, mass: 270.13136 },\n        ],\n        symbol: 'Db',\n        name: 'Dubnium',\n        mass: null,\n    },\n    {\n        number: 106,\n        isotopes: [\n            { nominal: 258, mass: 258.11298 },\n            { nominal: 259, mass: 259.1144 },\n            { nominal: 260, mass: 260.114384 },\n            { nominal: 261, mass: 261.115949 },\n            { nominal: 262, mass: 262.116337 },\n            { nominal: 263, mass: 263.11829 },\n            { nominal: 264, mass: 264.11893 },\n            { nominal: 265, mass: 265.12109 },\n            { nominal: 266, mass: 266.12198 },\n            { nominal: 267, mass: 267.12436 },\n            { nominal: 268, mass: 268.12539 },\n            { nominal: 269, mass: 269.12863 },\n            { nominal: 270, mass: 270.13043 },\n            { nominal: 271, mass: 271.13393 },\n            { nominal: 272, mass: 272.13589 },\n            { nominal: 273, mass: 273.13958 },\n        ],\n        symbol: 'Sg',\n        name: 'Seaborgium',\n        mass: null,\n    },\n    {\n        number: 107,\n        isotopes: [\n            { nominal: 260, mass: 260.12166 },\n            { nominal: 261, mass: 261.12145 },\n            { nominal: 262, mass: 262.12297 },\n            { nominal: 263, mass: 263.12292 },\n            { nominal: 264, mass: 264.12459 },\n            { nominal: 265, mass: 265.12491 },\n            { nominal: 266, mass: 266.12679 },\n            { nominal: 267, mass: 267.1275 },\n            { nominal: 268, mass: 268.12969 },\n            { nominal: 269, mass: 269.13042 },\n            { nominal: 270, mass: 270.13336 },\n            { nominal: 271, mass: 271.13526 },\n            { nominal: 272, mass: 272.13826 },\n            { nominal: 273, mass: 273.14024 },\n            { nominal: 274, mass: 274.14355 },\n            { nominal: 275, mass: 275.14567 },\n        ],\n        symbol: 'Bh',\n        name: 'Bohrium',\n        mass: null,\n    },\n    {\n        number: 108,\n        isotopes: [\n            { nominal: 263, mass: 263.12852 },\n            { nominal: 264, mass: 264.128357 },\n            { nominal: 265, mass: 265.129793 },\n            { nominal: 266, mass: 266.130046 },\n            { nominal: 267, mass: 267.13167 },\n            { nominal: 268, mass: 268.13186 },\n            { nominal: 269, mass: 269.13375 },\n            { nominal: 270, mass: 270.13429 },\n            { nominal: 271, mass: 271.13717 },\n            { nominal: 272, mass: 272.1385 },\n            { nominal: 273, mass: 273.14168 },\n            { nominal: 274, mass: 274.1433 },\n            { nominal: 275, mass: 275.14667 },\n            { nominal: 276, mass: 276.14846 },\n            { nominal: 277, mass: 277.1519 },\n        ],\n        symbol: 'Hs',\n        name: 'Hassium',\n        mass: null,\n    },\n    {\n        number: 109,\n        isotopes: [\n            { nominal: 265, mass: 265.136 },\n            { nominal: 266, mass: 266.13737 },\n            { nominal: 267, mass: 267.13719 },\n            { nominal: 268, mass: 268.13865 },\n            { nominal: 269, mass: 269.13882 },\n            { nominal: 270, mass: 270.14033 },\n            { nominal: 271, mass: 271.14074 },\n            { nominal: 272, mass: 272.14341 },\n            { nominal: 273, mass: 273.1444 },\n            { nominal: 274, mass: 274.14724 },\n            { nominal: 275, mass: 275.14882 },\n            { nominal: 276, mass: 276.15159 },\n            { nominal: 277, mass: 277.15327 },\n            { nominal: 278, mass: 278.15631 },\n            { nominal: 279, mass: 279.15808 },\n        ],\n        symbol: 'Mt',\n        name: 'Meitnerium',\n        mass: null,\n    },\n    {\n        number: 110,\n        isotopes: [\n            { nominal: 267, mass: 267.14377 },\n            { nominal: 268, mass: 268.14348 },\n            { nominal: 269, mass: 269.144752 },\n            { nominal: 270, mass: 270.144584 },\n            { nominal: 271, mass: 271.14595 },\n            { nominal: 272, mass: 272.14602 },\n            { nominal: 273, mass: 273.14856 },\n            { nominal: 274, mass: 274.14941 },\n            { nominal: 275, mass: 275.15203 },\n            { nominal: 276, mass: 276.15303 },\n            { nominal: 277, mass: 277.15591 },\n            { nominal: 278, mass: 278.15704 },\n            { nominal: 279, mass: 279.1601 },\n            { nominal: 280, mass: 280.16131 },\n            { nominal: 281, mass: 281.16451 },\n        ],\n        symbol: 'Ds',\n        name: 'Darmstadtium',\n        mass: null,\n    },\n    {\n        number: 111,\n        isotopes: [\n            { nominal: 272, mass: 272.15327 },\n            { nominal: 273, mass: 273.15313 },\n            { nominal: 274, mass: 274.15525 },\n            { nominal: 275, mass: 275.15594 },\n            { nominal: 276, mass: 276.15833 },\n            { nominal: 277, mass: 277.15907 },\n            { nominal: 278, mass: 278.16149 },\n            { nominal: 279, mass: 279.16272 },\n            { nominal: 280, mass: 280.16514 },\n            { nominal: 281, mass: 281.16636 },\n            { nominal: 282, mass: 282.16912 },\n            { nominal: 283, mass: 283.17054 },\n        ],\n        symbol: 'Rg',\n        name: 'Roentgenium',\n        mass: null,\n    },\n    {\n        number: 112,\n        isotopes: [\n            { nominal: 276, mass: 276.16141 },\n            { nominal: 277, mass: 277.16364 },\n            { nominal: 278, mass: 278.16416 },\n            { nominal: 279, mass: 279.16654 },\n            { nominal: 280, mass: 280.16715 },\n            { nominal: 281, mass: 281.16975 },\n            { nominal: 282, mass: 282.1705 },\n            { nominal: 283, mass: 283.17327 },\n            { nominal: 284, mass: 284.17416 },\n            { nominal: 285, mass: 285.17712 },\n        ],\n        symbol: 'Cn',\n        name: 'Copernicium',\n        mass: null,\n    },\n    {\n        number: 113,\n        isotopes: [\n            { nominal: 278, mass: 278.17058 },\n            { nominal: 279, mass: 279.17095 },\n            { nominal: 280, mass: 280.17293 },\n            { nominal: 281, mass: 281.17348 },\n            { nominal: 282, mass: 282.17567 },\n            { nominal: 283, mass: 283.17657 },\n            { nominal: 284, mass: 284.17873 },\n            { nominal: 285, mass: 285.17973 },\n            { nominal: 286, mass: 286.18221 },\n            { nominal: 287, mass: 287.18339 },\n        ],\n        symbol: 'Nh',\n        name: 'Nihonium',\n        mass: null,\n    },\n    {\n        number: 114,\n        isotopes: [\n            { nominal: 285, mass: 285.18364 },\n            { nominal: 286, mass: 286.18423 },\n            { nominal: 287, mass: 287.18678 },\n            { nominal: 288, mass: 288.18757 },\n            { nominal: 289, mass: 289.19042 },\n        ],\n        symbol: 'Fl',\n        name: 'Flerovium',\n        mass: null,\n    },\n    {\n        number: 115,\n        isotopes: [\n            { nominal: 287, mass: 287.1907 },\n            { nominal: 288, mass: 288.19274 },\n            { nominal: 289, mass: 289.19363 },\n            { nominal: 290, mass: 290.19598 },\n            { nominal: 291, mass: 291.19707 },\n        ],\n        symbol: 'Mc',\n        name: 'Moscovium',\n        mass: null,\n    },\n    {\n        number: 116,\n        isotopes: [\n            { nominal: 289, mass: 289.19816 },\n            { nominal: 290, mass: 290.19864 },\n            { nominal: 291, mass: 291.20108 },\n            { nominal: 292, mass: 292.20174 },\n            { nominal: 293, mass: 293.20449 },\n        ],\n        symbol: 'Lv',\n        name: 'Livermorium',\n        mass: null,\n    },\n    {\n        number: 117,\n        isotopes: [\n            { nominal: 291, mass: 291.20553 },\n            { nominal: 292, mass: 292.20746 },\n            { nominal: 293, mass: 293.20824 },\n            { nominal: 294, mass: 294.21046 },\n        ],\n        symbol: 'Ts',\n        name: 'Teennessine',\n        mass: null,\n    },\n    {\n        number: 118,\n        isotopes: [\n            { nominal: 293, mass: 293.21356 },\n            { nominal: 294, mass: 294.21392 },\n            { nominal: 295, mass: 295.21624 },\n        ],\n        symbol: 'Og',\n        name: 'Oganesson',\n        mass: null,\n    },\n];\n//# sourceMappingURL=elementsAndIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elements = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elements = elementsAndIsotopes_js_1.elementsAndIsotopes.map((element) => ({\n    number: element.number,\n    symbol: element.symbol,\n    mass: element.mass,\n    name: element.name,\n    monoisotopicMass: element.monoisotopicMass,\n}));\n//# sourceMappingURL=elements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    exports.elementsAndIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopes = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndStableIsotopes = structuredClone(elementsAndIsotopes_js_1.elementsAndIsotopes);\nfor (const element of exports.elementsAndStableIsotopes) {\n    element.isotopes = element.isotopes.filter((i) => {\n        return typeof i.abundance === 'number' && i.abundance > 0;\n    });\n}\n//# sourceMappingURL=elementsAndStableIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopesObject = void 0;\nconst elementsAndStableIsotopes_js_1 = require(\"./elementsAndStableIsotopes.js\");\nexports.elementsAndStableIsotopesObject = {};\nfor (const element of elementsAndStableIsotopes_js_1.elementsAndStableIsotopes) {\n    exports.elementsAndStableIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndStableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsObject = void 0;\nconst elements_js_1 = require(\"./elements.js\");\nexports.elementsObject = {};\nfor (const element of elements_js_1.elements) {\n    exports.elementsObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isotopesObject = void 0;\nconst elementsAndIsotopesObject_js_1 = require(\"./elementsAndIsotopesObject.js\");\nexports.isotopesObject = {};\nfor (const [symbol, element] of Object.entries(elementsAndIsotopesObject_js_1.elementsAndIsotopesObject)) {\n    if (!element)\n        continue;\n    for (const isotope of element.isotopes) {\n        exports.isotopesObject[`${isotope.nominal}${symbol}`] = {\n            abundance: isotope.abundance,\n            mass: isotope.mass,\n        };\n    }\n}\n//# sourceMappingURL=isotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stableIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.stableIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    let abundance = 0;\n    let mostAbundant = 0;\n    for (const isotope of element.isotopes) {\n        if (typeof isotope.abundance === 'number' &&\n            isotope.abundance > abundance) {\n            abundance = isotope.abundance;\n            mostAbundant = isotope.nominal;\n        }\n    }\n    for (const isotope of element.isotopes) {\n        if (isotope.abundance === 0)\n            continue;\n        const entry = {\n            name: element.name,\n            mass: isotope.mass,\n            symbol: element.symbol,\n            mostAbundant: false,\n            deltaNeutrons: isotope.nominal - mostAbundant,\n        };\n        if (isotope.nominal === mostAbundant) {\n            entry.mostAbundant = true;\n        }\n        exports.stableIsotopesObject[`${isotope.nominal}${element.symbol}`] = entry;\n    }\n}\n//# sourceMappingURL=stableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationsObject = void 0;\nexports.unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    Na: -1,\n    K: -1,\n    Li: -1,\n    Ca: -2,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n    S: 0,\n    P: 1,\n};\n//# sourceMappingURL=unsaturationsObject.js.map","\"use strict\";\n/**\n * Ensure that the sequence is in uppercase taking into account possible modifications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureUppercaseSequence = ensureUppercaseSequence;\nfunction ensureUppercaseSequence(sequence) {\n    let parenthesisCounter = 0;\n    let parts = [];\n    let part = '';\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        if (currentSymbol === '(' && parenthesisCounter === 0 && part) {\n            parts.push(part);\n            part = currentSymbol;\n        }\n        else if (currentSymbol === ')' && parenthesisCounter === 0) {\n            part += currentSymbol;\n            parts.push(part);\n            part = '';\n        }\n        else {\n            part += currentSymbol;\n        }\n    }\n    if (part)\n        parts.push(part);\n    for (let i = 0; i < parts.length; i++) {\n        if (!parts[i].startsWith('(') && parts[i].match(/^[a-z]+$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureUppercaseSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.atomSorter = atomSorter;\n/**\n * Implementation of the Hill system for sorting atoms\n * https://en.wikipedia.org/wiki/Chemical_formula#Hill_system\n * @param a - first atom to compare\n * @param b - second atom to compare\n * @returns A value suitable for use in Array.prototype.sort.\n */\nfunction atomSorter(a, b) {\n    if (a === b)\n        return 0;\n    if (a === 'C')\n        return -1;\n    if (b === 'C')\n        return 1;\n    if (a === 'H')\n        return -1;\n    if (b === 'H')\n        return 1;\n    if (a < b)\n        return -1;\n    return 1;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsObject = void 0;\nconst groups_1 = require(\"./groups\");\nexports.groupsObject = {};\ngroups_1.groups.forEach((e) => {\n    if (exports.groupsObject[e.symbol]) {\n        // eslint-disable-next-line no-console\n        console.log(`The symbol ${e.symbol} is used more than once`);\n    }\n    exports.groupsObject[e.symbol] = e;\n});\n//# sourceMappingURL=groupsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsToSequence = groupsToSequence;\nconst groupsObject_js_1 = require(\"./groupsObject.js\");\n/**\n * Recreate a one letter sequence\n * @param {object} mf\n */\nfunction groupsToSequence(mf) {\n    mf = mf.replaceAll(/\\([^(]*\\)/g, '');\n    let parts = mf.split(/(?=[ A-Z])/);\n    let usefulParts = [];\n    for (let part of parts) {\n        if (part === ' ') {\n            usefulParts.push(' ');\n            continue;\n        }\n        if (!part.match(/^[A-Z][a-z]{2,6}/))\n            continue;\n        if (groupsObject_js_1.groupsObject[part] && groupsObject_js_1.groupsObject[part].oneLetter) {\n            usefulParts.push(groupsObject_js_1.groupsObject[part].oneLetter);\n        }\n        else {\n            usefulParts.push('?');\n        }\n    }\n    return usefulParts.join('').replaceAll(/ +/g, ' ').trim();\n}\n//# sourceMappingURL=groupsToSequence.js.map","\"use strict\";\n/**\n * Define static variable corresponding to the various Kinds of a molecular formula part.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Kind = void 0;\nexports.Kind = {\n    BEGIN: 'begin',\n    ATOM: 'atom',\n    MULTIPLIER_RANGE: 'multiplierRange',\n    ISOTOPE: 'isotope',\n    ISOTOPE_RATIO: 'isotopeRatio',\n    CHARGE: 'charge',\n    SALT: 'salt',\n    OPENING_PARENTHESIS: 'openingParenthesis',\n    CLOSING_PARENTHESIS: 'closingParenthesis',\n    PRE_MULTIPLIER: 'preMultiplier',\n    MULTIPLIER: 'multiplier',\n    TEXT: 'text',\n    ANCHOR: 'anchor',\n    COMMENT: 'comment',\n};\n//# sourceMappingURL=Kind.js.map","\"use strict\";\n/**\n * Parse a string to extract the charge.\n * The charge may be in the form --, +++, +3, -2, 4+, 2-\n * @param {*} charge\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCharge = parseCharge;\nfunction parseCharge(charge) {\n    charge = charge.replaceAll(/[()]/g, '');\n    let chargeNumber = 0;\n    if (charge.match(/^[+-]+$/)) {\n        for (let i = 0; i < charge.length; i++) {\n            if (charge.charAt(i) === '+')\n                chargeNumber++;\n            else\n                chargeNumber--;\n        }\n    }\n    else if (charge.match(/^\\d+[+-]$/)) {\n        chargeNumber = Number(\n        // eslint-disable-next-line unicorn/prefer-at\n        charge.charAt(charge.length - 1) + charge.slice(0, -1));\n    }\n    else {\n        chargeNumber = Number(charge);\n    }\n    return chargeNumber;\n}\n//# sourceMappingURL=parseCharge.js.map","\"use strict\";\n/* eslint-disable unicorn/prefer-code-point */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"./Kind\");\nconst parseCharge_1 = require(\"./util/parseCharge\");\n// module level: the parsing loop would otherwise allocate it for each token\nconst PREMULTIPLIER_KINDS = new Set([\n    Kind_1.Kind.SALT,\n    Kind_1.Kind.BEGIN,\n    Kind_1.Kind.OPENING_PARENTHESIS,\n]);\n/**\n * Parse a mf to an array of kind / value\n * @param {String} mf\n * @param {Object} [options={}]\n * @param {Boolean} [options.expandGroups=false] - if true, expand groups\n * @param {Boolean} [options.simplify=false] - if true, remove all the parenthesis and join identical atoms / groups\n */\nfunction parse(mf, options = {}) {\n    return new MFParser().parse(mf, options);\n}\nclass MFParser {\n    parse(mf = '', options = {}) {\n        this.expandGroups = options?.expandGroups ?? false;\n        this.simplify = options?.simplify ?? false;\n        this.mf = mf;\n        this.i = 0;\n        this.result = [];\n        let lastKind = Kind_1.Kind.BEGIN;\n        while (this.i < mf.length) {\n            if (this.result.length > 0 && this.result.at(-1).kind !== Kind_1.Kind.TEXT) {\n                lastKind = this.result.at(-1).kind;\n            }\n            let char = mf.charAt(this.i);\n            let ascii = mf.charCodeAt(this.i);\n            let nextAscii = 0;\n            if (this.i + 1 < mf.length)\n                nextAscii = mf.charCodeAt(this.i + 1);\n            if ((ascii > 47 && ascii < 58) ||\n                (char === '-' && nextAscii > 47 && nextAscii < 58)) {\n                // a number\n                let value = this.getNumber(ascii);\n                if (PREMULTIPLIER_KINDS.has(lastKind)) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Premultiplier may not contain a -');\n                    }\n                    this.result.push({ kind: Kind_1.Kind.PRE_MULTIPLIER, value: value.from });\n                }\n                else if (lastKind === Kind_1.Kind.ANCHOR) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Anchor ID may not contain -');\n                    }\n                    this.result.at(-1).value = value.from;\n                }\n                else if (value.to) {\n                    this.result.push({\n                        kind: Kind_1.Kind.MULTIPLIER_RANGE,\n                        value: {\n                            from: Math.min(value.from, value.to),\n                            to: Math.max(value.from, value.to),\n                        },\n                    });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.MULTIPLIER, value: value.from });\n                }\n                continue;\n            }\n            else if (char === '.') {\n                // a point\n                this.result.push({ kind: Kind_1.Kind.SALT, value: char });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (char === '#') {\n                // an anchor\n                this.result.push({ kind: Kind_1.Kind.ANCHOR, value: 0 });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (ascii > 64 && ascii < 91) {\n                // an uppercase = new atom\n                this.result.push(...this.getAtom(ascii));\n                continue;\n            }\n            else if (ascii > 96 && ascii < 123) {\n                // a lowercase\n                throw new MFError(this.mf, this.i, 'found a lowercase not following an uppercase');\n            }\n            else if (char === '(') {\n                let charge = this.getParenthesisCharge(ascii);\n                if (charge) {\n                    this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' });\n                }\n            }\n            else if (char === ')') {\n                this.result.push({ kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' });\n            }\n            else if (char === '[') {\n                // defines an isotope\n                let isotope = this.getIsotope(ascii);\n                this.result.push({ kind: Kind_1.Kind.ISOTOPE, value: isotope });\n            }\n            else if (char === ']') {\n                throw new MFError(this.mf, this.i, 'should never meet an closing bracket not in isotopes');\n            }\n            else if (char === '{') {\n                // can define an exotic isotopic ratio or mixtures of groups\n                let isotopeRatio = this.getCurlyBracketIsotopeRatio(ascii);\n                if (lastKind === Kind_1.Kind.ATOM) {\n                    let lastResult = this.result.at(-1);\n                    lastResult.kind = Kind_1.Kind.ISOTOPE_RATIO;\n                    lastResult.value = {\n                        atom: lastResult.value,\n                        ratio: isotopeRatio,\n                    };\n                }\n                else {\n                    throw new MFError(this.mf, this.i, 'isotopic composition has to follow an atom');\n                }\n            }\n            else if (char === '}') {\n                throw new MFError(this.mf, this.i, 'found a unexpected closing curly bracket');\n            }\n            else if (char === '+') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '-') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '$') {\n                // it is a comment after\n                this.result.push({\n                    kind: Kind_1.Kind.COMMENT,\n                    value: this.mf.slice(this.i + 1),\n                });\n                break;\n            }\n            else {\n                this.result.push({ kind: Kind_1.Kind.TEXT, value: char });\n            }\n            this.i++;\n        }\n        this.checkParenthesis();\n        if (this.simplify) {\n            this.result = simplify(this.result);\n        }\n        return this.result;\n    }\n    checkParenthesis() {\n        let counter = 0;\n        for (let line of this.result) {\n            if (line.kind === Kind_1.Kind.OPENING_PARENTHESIS)\n                counter++;\n            if (line.kind === Kind_1.Kind.CLOSING_PARENTHESIS)\n                counter--;\n        }\n        if (counter !== 0) {\n            throw new MFError(this.mf, this.i, 'number of opening and closing parenthesis not equal');\n        }\n    }\n    getNumber(ascii) {\n        let number = '';\n        let previous;\n        do {\n            previous = ascii;\n            number += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while ((ascii > 47 && ascii < 58) ||\n            ascii === 46 ||\n            ascii === 45 ||\n            ascii === 47); // number . - /\n        // we need to deal with the case there is a from / to\n        if (previous === 46)\n            this.i--;\n        let indexOfDash = number.indexOf('-', 1);\n        if (indexOfDash > -1) {\n            return {\n                from: parseNumberWithDivision(number.slice(0, indexOfDash)),\n                to: parseNumberWithDivision(number.slice(indexOfDash + 1)),\n            };\n        }\n        return { from: parseNumberWithDivision(number) };\n    }\n    getAtom(ascii) {\n        let atom = '';\n        do {\n            atom += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii > 96 && ascii < 123);\n        if (chemical_elements_1.elementsObject[atom] || !this.expandGroups) {\n            return [\n                {\n                    kind: Kind_1.Kind.ATOM,\n                    value: atom,\n                },\n            ];\n        }\n        if (chemical_groups_1.groupsObject[atom]) {\n            const group = chemical_groups_1.groupsObject[atom].mf;\n            const expandedGroups = parse(group, {\n                expandGroups: this.expandGroups,\n            });\n            // need to surround with parenthesis\n            return [\n                { kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' },\n                ...expandedGroups,\n                { kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' },\n            ];\n        }\n        throw new MFError(`Not able to expand group: ${this.mf}`);\n    }\n    getIsotope(ascii) {\n        // [13C]\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 93 && this.i <= this.mf.length);\n        let atom = substring.replaceAll(/[^A-Za-z]/g, '');\n        let isotope = Number(substring.replaceAll(/\\D/g, ''));\n        return { atom, isotope };\n    }\n    getCurlyBracketIsotopeRatio(ascii) {\n        let substring = '';\n        let first = true;\n        do {\n            if (!first) {\n                substring += String.fromCharCode(ascii);\n            }\n            else {\n                first = false;\n            }\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 125 && this.i <= this.mf.length); // closing curly bracket\n        if (substring.match(/^[0-9.,]+$/)) {\n            return substring.split(',').map(Number);\n        }\n        throw new MFError(this.mf, this.i, 'Curly brackets should contain only number, dot and comma');\n    }\n    getParenthesisCharge(ascii) {\n        let substring = '';\n        let begin = this.i;\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 41 && this.i <= this.mf.length); // closing parenthesis\n        if (substring.match(/^\\([\\d+-]+$/)) {\n            return (0, parseCharge_1.parseCharge)(substring.slice(1));\n        }\n        else {\n            this.i = begin;\n            return undefined;\n        }\n    }\n    getNonParenthesisCharge(ascii) {\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii === 43 || ascii === 45 || (ascii > 47 && ascii < 58));\n        this.i--;\n        return (0, parseCharge_1.parseCharge)(substring);\n    }\n}\nclass MFError extends SyntaxError {\n    constructor(mf, i, message) {\n        let text = `${message}\\n\\n${mf}\\n${' '.repeat(i)}^`;\n        super(text);\n    }\n}\nfunction parseNumberWithDivision(string) {\n    if (string.includes('/')) {\n        let parts = string.split('/');\n        if (parts.length !== 2) {\n            throw new TypeError('Can not parse MF with number like: ', string);\n        }\n        return Number(parts[0]) / Number(parts[1]);\n    }\n    else {\n        return Number(string);\n    }\n}\n/**\n * Remove all the parenthesis and multipliers\n * Merge atoms and groups if present many times\n * We will also sort the atoms and groups\n * @param {*} parsed\n * @returns\n */\nfunction simplify(parsed) {\n    if (!parsed || parsed.length === 0)\n        return [];\n    const multipliers = [];\n    let currentMultiplier = { from: 1, to: 1 };\n    let newParsed = [];\n    for (let i = parsed.length - 1; i >= 0; i--) {\n        const item = parsed[i];\n        switch (item.kind) {\n            case 'atom':\n            case 'isotope': {\n                let realMultiplier = currentMultiplier;\n                for (const multiplier of multipliers) {\n                    realMultiplier = {\n                        from: multiplier.from * realMultiplier.from,\n                        to: multiplier.to * realMultiplier.to,\n                    };\n                }\n                newParsed.push({\n                    kind: item.kind,\n                    value: item.value,\n                }, {\n                    kind: 'multiplierRange',\n                    value: realMultiplier,\n                });\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            }\n            case 'multiplier':\n                currentMultiplier = { from: item.value, to: item.value };\n                break;\n            case 'multiplierRange':\n                currentMultiplier = item.value;\n                break;\n            case 'openingParenthesis':\n                multipliers.pop();\n                break;\n            case 'closingParenthesis':\n                multipliers.push(currentMultiplier);\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Unexpected kind --${item.kind}-- in removeParenthesis`);\n        }\n    }\n    // if we have many times the same atom / group, we can merge them\n    const distinctParsedObject = {};\n    for (let i = 0; i < newParsed.length; i = i + 2) {\n        const item = newParsed[i];\n        const multiplier = newParsed[i + 1];\n        const key = JSON.stringify(item.value);\n        if (!distinctParsedObject[key]) {\n            distinctParsedObject[key] = {\n                ...item,\n                multiplier: multiplier.value,\n            };\n        }\n        else {\n            distinctParsedObject[key].multiplier.from += multiplier.value.from;\n            distinctParsedObject[key].multiplier.to += multiplier.value.to;\n        }\n    }\n    const sorted = Object.values(distinctParsedObject).toSorted((a, b) => {\n        const atomA = a.kind === 'atom' ? a.value : a.value.atom;\n        const atomB = b.kind === 'atom' ? b.value : b.value.atom;\n        if (atomA === atomB) {\n            if (a.kind === 'isotope' && b.kind === 'isotope') {\n                return a.value.isotope - b.value.isotope;\n            }\n            if (a.kind === 'isotope' && b.kind !== 'isotope') {\n                return -1; // isotope comes before non-isotope\n            }\n            if (a.kind !== 'isotope' && b.kind === 'isotope') {\n                return 1; // non-isotope comes after isotope\n            }\n            return 0;\n        }\n        return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n    });\n    const distinctParsed = [];\n    for (const item of sorted) {\n        if (item.multiplier.from === 0 && item.multiplier.to === 0) {\n            continue;\n        }\n        distinctParsed.push({\n            kind: item.kind,\n            value: item.value,\n        });\n        if (item.multiplier.from === 1 && item.multiplier.to === 1) {\n            continue; // no need to add a multiplier\n        }\n        if (item.multiplier.from === item.multiplier.to) {\n            distinctParsed.push({\n                kind: 'multiplier',\n                value: item.multiplier.from,\n            });\n        }\n        else {\n            distinctParsed.push({\n                kind: 'multiplierRange',\n                value: {\n                    from: item.multiplier.from,\n                    to: item.multiplier.to,\n                },\n            });\n        }\n    }\n    return distinctParsed;\n}\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscript = exports.superscript = void 0;\nexports.superscript = {\n    0: '⁰',\n    1: '¹',\n    2: '²',\n    3: '³',\n    4: '⁴',\n    5: '⁵',\n    6: '⁶',\n    7: '⁷',\n    8: '⁸',\n    9: '⁹',\n    '+': '⁺',\n    '-': '⁻',\n    '(': '⁽',\n    ')': '⁾',\n    '{': '⁽',\n    '}': '⁾',\n    '.': '˙',\n    ',': '˒',\n};\nexports.subscript = {\n    0: '₀',\n    1: '₁',\n    2: '₂',\n    3: '₃',\n    4: '₄',\n    5: '₅',\n    6: '₆',\n    7: '₇',\n    8: '₈',\n    9: '₉',\n    '(': '₍',\n    ')': '₎',\n    '{': '₍',\n    '}': '₎',\n    '.': ' ',\n    ',': ' ',\n};\n//# sourceMappingURL=subSuperscript.js.map","\"use strict\";\n/**\n * Defines static variables corresponding to the various formatting possibilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Format = void 0;\nexports.Format = {\n    SUBSCRIPT: 'subscript',\n    SUPERSCRIPT: 'superscript',\n    SUPERIMPOSE: 'superimpose',\n    TEXT: 'text',\n};\n//# sourceMappingURL=Format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCharge = formatCharge;\nfunction formatCharge(charge) {\n    if (charge === 1)\n        return '+';\n    if (charge > 1)\n        return `+${charge}`;\n    if (charge < 0)\n        return String(charge);\n    return '';\n}\n//# sourceMappingURL=formatCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.improveLinesForDisplay = improveLinesForDisplay;\nconst Kind_js_1 = require(\"../Kind.js\");\n/**\n * We try to remove useless lines that are not needed for the display and could be confusing\n * for the user\n * @param {object[]} lines\n */\nfunction improveLinesForDisplay(lines) {\n    lines = lines.slice(0);\n    // multipliers by one seems completely useless\n    lines = lines.filter((line) => !(line.kind === Kind_js_1.Kind.MULTIPLIER && line.value === 1));\n    // global surrouding useless parenthesis\n    // (C) -> C, (CH2) -> CH2, ((CH2)) -> CH2, ((CH2)2) -> (CH2)2, (C(CH2)2) -> C(CH2)2\n    // need to count the number of opening parenthesis\n    // and check the minimum number of parenthesis we find\n    let beginCounter = 0;\n    let endCounter = 0;\n    let minCounter = Number.MAX_SAFE_INTEGER;\n    let counter = 0;\n    let begin = true;\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.OPENING_PARENTHESIS:\n                if (begin) {\n                    beginCounter++;\n                }\n                counter++;\n                break;\n            case Kind_js_1.Kind.CLOSING_PARENTHESIS:\n                endCounter++;\n                counter--;\n                break;\n            case Kind_js_1.Kind.CHARGE: // seems to me we can still remove parenthesis even if we have some charges\n                break;\n            default:\n                if (counter < minCounter)\n                    minCounter = counter;\n                endCounter = 0;\n                begin = false;\n        }\n    }\n    let nbParenthesisToSuppress = Math.min(minCounter, beginCounter, endCounter);\n    if (nbParenthesisToSuppress > 0) {\n        // need to remove from the beginning and from the end the number of parenthesis\n        // knowing some of the lines could be charges\n        let toSuppress = nbParenthesisToSuppress;\n        let i = 0;\n        while (toSuppress > 0) {\n            if (lines[0].kind === Kind_js_1.Kind.OPENING_PARENTHESIS) {\n                lines.splice(i, 1);\n                toSuppress--;\n            }\n            else {\n                i++;\n            }\n        }\n        toSuppress = nbParenthesisToSuppress;\n        i = lines.length - 1;\n        while (toSuppress > 0) {\n            if (lines[i].kind === Kind_js_1.Kind.CLOSING_PARENTHESIS) {\n                toSuppress--;\n                lines.splice(i, 1);\n            }\n            i--;\n        }\n    }\n    return lines;\n}\n//# sourceMappingURL=improveLinesForDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toDisplay = toDisplay;\nconst Format_1 = require(\"../Format\");\nconst Kind_1 = require(\"../Kind\");\nconst formatCharge_js_1 = require(\"./formatCharge.js\");\nconst improveLinesForDisplay_js_1 = require(\"./improveLinesForDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {object[]} lines of the parse method\n * @returns {{kind: string, value: string}[]}\n */\nfunction toDisplay(lines) {\n    lines = (0, improveLinesForDisplay_js_1.improveLinesForDisplay)(lines);\n    const special = specialCases(lines);\n    if (special)\n        return special;\n    let results = [];\n    let result = {};\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.MULTIPLIER:\n                if (line.value !== 1) {\n                    result = {\n                        kind: Format_1.Format.SUBSCRIPT,\n                        value: String(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.MULTIPLIER_RANGE:\n                result = {\n                    kind: Format_1.Format.SUBSCRIPT,\n                    value: `${String(line.value.from)}-${line.value.to}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (result.kind === Format_1.Format.SUBSCRIPT) {\n                    result.kind = Format_1.Format.SUPERIMPOSE;\n                    result.over = (0, formatCharge_js_1.formatCharge)(line.value);\n                    result.under = result.value;\n                    result.value = undefined;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.SUPERSCRIPT,\n                        value: (0, formatCharge_js_1.formatCharge)(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE:\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: line.value.isotope,\n                };\n                results.push(result);\n                result = {\n                    kind: Format_1.Format.TEXT,\n                    value: line.value.atom,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value.atom;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value.atom,\n                    };\n                    results.push(result);\n                }\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: `{${line.value.ratio.join(',')}}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.SALT:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += ' • ';\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: ' • ',\n                    };\n                    results.push(result);\n                }\n                break;\n            default:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value,\n                    };\n                    results.push(result);\n                }\n        }\n    }\n    return results;\n}\n/**\n * Some special changes for specific cases\n * @param {} lines\n */\nfunction specialCases(lines) {\n    // (-)\n    if (lines.length === 1 && lines[0].kind === Kind_1.Kind.CHARGE) {\n        const charge = lines[0].value;\n        if (charge === 0)\n            return [];\n        if (charge === 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '-e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge === -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '+e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge > 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `-${charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge < -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `+${-charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n    }\n    // (-)2, (-)-1, (+)2, (+)-1, (2+)2, (2+)-1, (2-)+1, (2-)-1\n    if (lines.length === 2 &&\n        lines[0].kind === Kind_1.Kind.CHARGE &&\n        lines[1].kind === Kind_1.Kind.MULTIPLIER) {\n        const charge = lines[0].value;\n        const nbElectrons = -lines[1].value * charge;\n        const results = [];\n        if (nbElectrons === 0)\n            return [];\n        if (nbElectrons === 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '+e' });\n        }\n        if (nbElectrons === -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '-e' });\n        }\n        if (nbElectrons > 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `+${nbElectrons}e` });\n        }\n        if (nbElectrons < -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `${nbElectrons}e` });\n        }\n        results.push({ kind: Format_1.Format.SUPERSCRIPT, value: '-' });\n        return results;\n    }\n    return undefined;\n}\n//# sourceMappingURL=toDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMF = isMF;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nfunction isMF(mf) {\n    let tmpMF = mf.replaceAll(/[^A-Za-z]/g, '');\n    let parts = tmpMF.replaceAll(/([A-Za-z])(?=[A-Z])/g, '$1 ').split(' ');\n    for (let i = 0; i < parts.length; i++) {\n        if (!chemical_elements_1.elementsObject[parts[i]] && !chemical_groups_1.groupsObject[parts[i]]) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=isMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Style = void 0;\nexports.Style = {\n    SUPERIMPOSE: 'flex-direction: column;display: inline-flex;justify-content: center;text-align: left;vertical-align: middle;',\n    SUPERIMPOSE_SUP_SUB: 'line-height: 1; font-size: 70%',\n};\n//# sourceMappingURL=Style.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHtml = toHtml;\nconst Format_1 = require(\"../Format\");\nconst Style_1 = require(\"../Style\");\nfunction toHtml(lines) {\n    let html = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                html.push(`<sub>${line.value}</sub>`);\n                break;\n            case Format_1.Format.SUPERSCRIPT:\n                html.push(`<sup>${line.value}</sup>`);\n                break;\n            case Format_1.Format.SUPERIMPOSE:\n                html.push(`<span style=\"${Style_1.Style.SUPERIMPOSE}\">`, `<sup style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.over}</sup>`, `<sub style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.under}</sub>`, '</span>');\n                break;\n            default:\n                html.push(line.value);\n        }\n    }\n    return html.join('');\n}\n//# sourceMappingURL=toHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureCase = ensureCase;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst elements = new Set(Object.keys(chemical_elements_1.elementsObject).toSorted((a, b) => b.length - a.length));\n/**\n * Ensure that the mf has been entered with capital letters and not only lowercase\n * If there is only lowercase we try to capitalize the mf\n * @param {string} mf\n */\nfunction ensureCase(mf) {\n    for (let i = 0; i < mf.length; i++) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        if (mf.charCodeAt(i) > 64 && mf.charCodeAt(i) < 91) {\n            return mf;\n        }\n    }\n    let parts = mf.replaceAll(/([a-z]*)([^a-z]*)/g, '$1 $2 ').split(/ +/);\n    for (let i = 0; i < parts.length; i++) {\n        if (parts[i].match(/^[a-z]$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n        else if (parts[i].match(/^[a-z]+$/)) {\n            let newPart = '';\n            for (let j = 0; j < parts[i].length; j++) {\n                let two = parts[i].slice(j, j + 2);\n                let one = parts[i].charAt(j).toUpperCase();\n                if (['c', 'h', 'o', 'n'].includes(two.charAt(0)) &&\n                    ['h', 'o', 'n'].includes(two.charAt(1))) {\n                    newPart += two.toUpperCase();\n                    j++;\n                }\n                else {\n                    two = two.charAt(0).toUpperCase() + two.charAt(1);\n                    if (elements.has(two)) {\n                        newPart += two;\n                        j++;\n                    }\n                    else if (elements.has(one)) {\n                        newPart += one;\n                    }\n                    else {\n                        return mf;\n                    }\n                }\n            }\n            parts[i] = newPart;\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureCase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatten = flatten;\n/**\n * This method will generate all possible molecular formulas\n * from ranges.\n * It should rather be called expand because it expands all the ranges\n * @param parsed\n * @param options\n * @return {string[]}\n */\nfunction flatten(parsed, options = {}) {\n    const { groupIdentical = false, limit = 100000 } = options;\n    if (parsed.length === 0)\n        return [''];\n    let parts = [];\n    let parenthesisLevel = 0;\n    let currentPart;\n    let comments = [];\n    for (const entry of parsed) {\n        if ((entry.kind === 'atom' ||\n            entry.kind === 'charge' ||\n            entry.kind === 'isotope' ||\n            entry.kind === 'openingParenthesis' ||\n            !currentPart) &&\n            parenthesisLevel === 0) {\n            currentPart = {\n                mf: '',\n                min: 1,\n                max: 1,\n            };\n            parts.push(currentPart);\n        }\n        switch (entry.kind) {\n            case 'atom':\n                currentPart.mf += entry.value;\n                break;\n            case 'isotope':\n                currentPart.mf += `[${entry.value.isotope}${entry.value.atom}]`;\n                break;\n            case 'multiplier':\n                currentPart.mf += entry.value;\n                break;\n            case 'multiplierRange':\n                if (parenthesisLevel !== 0) {\n                    throw new Error('Range definition inside parenthesis is not allowed.');\n                }\n                currentPart.min = entry.value.from;\n                currentPart.max = entry.value.to;\n                break;\n            case 'openingParenthesis':\n                parenthesisLevel++;\n                currentPart.mf += entry.value;\n                break;\n            case 'charge':\n                if (entry.value === 1) {\n                    currentPart.mf += '+';\n                }\n                else if (entry.value > 1) {\n                    currentPart.mf += `(+${entry.value})`;\n                }\n                else if (entry.value < 0) {\n                    currentPart.mf += `(${entry.value})`;\n                }\n                break;\n            case 'closingParenthesis':\n                parenthesisLevel--;\n                currentPart.mf += entry.value;\n                break;\n            case 'comment':\n                comments.push(entry.value);\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Could not flatten the parsed MF. Unknown kind: ${entry.kind}`);\n        }\n    }\n    if (groupIdentical) {\n        parts = optimizeRanges(parts);\n    }\n    const mfs = createMFs(parts, comments.join(' '), limit);\n    return mfs;\n}\n/**\n * If we have many times the same mf we can combine them\n * This should only be applied if there are acutaly some ranges\n */\nfunction optimizeRanges(parts) {\n    let newParts = [];\n    let mfsObject = {};\n    let hasRange = false;\n    for (const mf of parts) {\n        if (mf.min !== mf.max) {\n            hasRange = true;\n            break;\n        }\n    }\n    if (!hasRange)\n        return parts;\n    for (const mf of parts) {\n        if (!mfsObject[mf.mf]) {\n            mfsObject[mf.mf] = {\n                mf: mf.mf,\n                min: mf.min,\n                max: mf.max,\n            };\n            newParts.push(mfsObject[mf.mf]);\n        }\n        else {\n            mfsObject[mf.mf].min = mfsObject[mf.mf].min + mf.min;\n            mfsObject[mf.mf].max = mfsObject[mf.mf].max + mf.max;\n        }\n    }\n    return newParts;\n}\nfunction createMFs(parts, comment, limit) {\n    const currents = new Array(parts.length);\n    for (let i = 0; i < currents.length; i++) {\n        currents[i] = parts[i].min;\n    }\n    /** @type {string[]} */\n    const mfs = [];\n    let position = 0;\n    while (position < currents.length) {\n        if (currents[position] < parts[position].max) {\n            mfs.push(getMF(parts, currents, comment));\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = parts[i].min;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (mfs.length >= limit) {\n            throw new Error(`MF.flatten generates too many fragments (over ${limit})`);\n        }\n    }\n    mfs.push(getMF(parts, currents, comment));\n    return mfs;\n}\nfunction getMF(parts, currents, comment) {\n    let mf = '';\n    for (let i = 0; i < parts.length; i++) {\n        if (currents[i] === 0) {\n            continue;\n        }\n        mf += parts[i].mf;\n        if (currents[i] !== 1) {\n            mf += currents[i];\n        }\n    }\n    if (comment)\n        mf += `$${comment}`;\n    return mf;\n}\n//# sourceMappingURL=flatten.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopeRatioInfo = getIsotopeRatioInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getIsotopeRatioInfo(value) {\n    let result = { mass: 0, monoisotopicMass: 0 };\n    let element = chemical_elements_1.elementsAndStableIsotopesObject[value.atom];\n    if (!element)\n        throw new Error(`Element not found: ${value.atom}`);\n    let isotopesArray = element.isotopes;\n    let ratios = normalize(value.ratio);\n    let max = Math.max(...ratios);\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${value.atom}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.mass += ratios[i] * isotopesArray[i].mass;\n        if (max === ratios[i] && result.monoisotopicMass === 0) {\n            result.monoisotopicMass = isotopesArray[i].mass;\n        }\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopeRatioInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEA = getEA;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\n/**\n * @param {*} parts\n */\nfunction getEA(parts) {\n    let results = {};\n    for (let part of parts) {\n        for (let line of part) {\n            switch (line.kind) {\n                case Kind_1.Kind.ISOTOPE: {\n                    let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                    if (!isotope) {\n                        throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                    }\n                    addMass(results, line.value.atom, isotope.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE_RATIO: {\n                    let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                    addMass(results, line.value.atom, isotopeRatioInfo.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ATOM: {\n                    let element = chemical_elements_1.elementsObject[line.value];\n                    if (!element) {\n                        element = chemical_groups_1.groupsObject[line.value];\n                        if (!element)\n                            throw new Error(`Unknown element: ${line.value}`);\n                        // need to explode group ????\n                    }\n                    addMass(results, line.value, element.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.CHARGE:\n                    break;\n                default:\n                    throw new Error('partToMF unhandled Kind: ', line.kind);\n            }\n        }\n    }\n    let eas = [];\n    let sum = 0;\n    for (let key in results) {\n        sum += results[key];\n        eas.push({\n            element: key,\n            mass: results[key],\n        });\n    }\n    for (const ea of eas) {\n        ea.ratio = ea.mass / sum;\n    }\n    return eas;\n}\nfunction addMass(results, atom, mass) {\n    if (!results[atom])\n        results[atom] = 0;\n    results[atom] += mass;\n}\n//# sourceMappingURL=getEA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElements = getElements;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/**\n * @param {*} parts\n */\nfunction getElements(parts) {\n    const elements = [];\n    for (const part of parts) {\n        for (const line of part) {\n            let number = line.multiplier;\n            switch (line.kind) {\n                case Kind_1.Kind.ATOM: {\n                    let symbol = line.value;\n                    let element = chemical_elements_1.elementsObject[symbol];\n                    if (!element) {\n                        throw new Error(`element unknown: ${symbol} - ${line}`);\n                    }\n                    addElement(elements, { symbol, number });\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE: {\n                    let element = chemical_elements_1.elementsAndIsotopesObject[line.value.atom];\n                    if (!element) {\n                        throw new Error(`element unknown: ${part.value.atom} - ${line}`);\n                    }\n                    let isotope = element.isotopes.find((a) => a.nominal === line.value.isotope);\n                    if (!isotope) {\n                        throw new Error(`isotope unknown: ${line.value.isotope} - ${line}`);\n                    }\n                    addElement(elements, {\n                        symbol: line.value.atom,\n                        number,\n                        isotope: line.value.isotope,\n                    });\n                    break;\n                }\n                default:\n                    throw new Error(`unknown type: ${line.kind}`);\n            }\n        }\n    }\n    return elements;\n}\nfunction addElement(elements, newElement) {\n    for (let element of elements) {\n        if (element.symbol === newElement.symbol &&\n            element.isotope === newElement.isotope) {\n            element.number += newElement.number;\n            return;\n        }\n    }\n    elements.push(newElement);\n}\n//# sourceMappingURL=getElements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNumberOfIsotopologues = getNumberOfIsotopologues;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * Returns the theoretical number of isotopologues for a given MF based on stable isotopes for each element.\n * This method will not take into account possible non natural isotopic composition (e.g. 13C enrichment)\n * If one element does not have any stable isotope, the result will be 0.\n * @param atoms\n * @returns\n */\nfunction getNumberOfIsotopologues(atoms) {\n    if (Object.keys(atoms).length === 0) {\n        return 0;\n    }\n    let result = 1;\n    for (const atom in atoms) {\n        const nbIsotopes = chemical_elements_1.elementsAndStableIsotopesObject[atom]?.isotopes.length;\n        if (!nbIsotopes) {\n            return 0;\n        }\n        const nbAtoms = atoms[atom];\n        result *= getNbCombinationsPerAtom(nbAtoms, nbIsotopes);\n    }\n    return result;\n}\n/**\n * Returns the number of isotopologues for one specific atom\n *\n * @param nbAtoms\n * @param nbIsotopes\n * @returns\n */\nfunction getNbCombinationsPerAtom(nbAtoms, nbIsotopes) {\n    let result = 1;\n    for (let i = nbAtoms + 1; i < nbAtoms + nbIsotopes; i++) {\n        result *= i;\n    }\n    for (let i = 2; i < nbIsotopes; i++) {\n        result /= i;\n    }\n    return result;\n}\n//# sourceMappingURL=getNumberOfIsotopologues.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToAtoms = partToAtoms;\nconst Kind_js_1 = require(\"../Kind.js\");\n/** @typedef {import('./partToAtoms.types').AtomsMap} AtomsMap */\n/**\n * Convert a MF part to a map of atoms\n * This procedure will suppress the isotopes !\n * This is mainly used to make queries\n * @returns {AtomsMap}\n */\nfunction partToAtoms(part) {\n    /** @type {AtomsMap} */\n    const atoms = {};\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.ISOTOPE:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ISOTOPE_RATIO:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ATOM:\n                if (!atoms[line.value])\n                    atoms[line.value] = 0;\n                atoms[line.value] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.CHARGE:\n                break;\n            case Kind_js_1.Kind.ANCHOR:\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=partToAtoms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToMF = partToMF;\nconst Kind_1 = require(\"../Kind\");\nfunction partToMF(part, options = {}) {\n    let mf = [];\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE:\n                if (line.multiplier !== 0) {\n                    mf.push(`[${line.value.isotope}${line.value.atom}]${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (line.multiplier !== 0) {\n                    mf.push(`${line.value.atom}{${line.value.ratio.join(',')}}${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ATOM:\n                if (line.multiplier !== 0) {\n                    mf.push(line.value + (line.multiplier !== 1 ? line.multiplier : ''));\n                }\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (line.value === 0 || options.neutral)\n                    break;\n                mf.push(`(${line.value > 0 ? `+${line.value}` : line.value})`);\n                break;\n            default:\n        }\n    }\n    return mf.join('');\n}\n//# sourceMappingURL=partToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfoInternal = getInfoInternal;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\nconst getNumberOfIsotopologues_1 = require(\"./getNumberOfIsotopologues\");\nconst partToAtoms_1 = require(\"./partToAtoms\");\nconst partToMF_1 = require(\"./partToMF\");\n/** @typedef {import('./getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n *\n * @param {*} parts\n * @param {*} [options={}]\n * @returns {object|MFInfo|MFInfoWithParts}\n */\nfunction getInfoInternal(parts, options = {}) {\n    let { customUnsaturations = {}, emFieldName = 'monoisotopicMass', msemFieldName = 'observedMonoisotopicMass', } = options;\n    if (parts.length === 0)\n        return {};\n    if (parts.length === 1) {\n        let oneResult = getProcessedPart(parts[0], {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        });\n        oneResult.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(oneResult.atoms);\n        return oneResult;\n    }\n    let result = { parts: [] };\n    for (let part of parts) {\n        result.parts.push(getProcessedPart(part, {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        }));\n    }\n    result[emFieldName] = 0;\n    result.mass = 0;\n    result.charge = 0;\n    result.unsaturation = 0;\n    result.atoms = {};\n    result.mf = result.parts.map((a) => a.mf).join('.');\n    for (const part of result.parts) {\n        result.mass += part.mass;\n        result[emFieldName] += part[emFieldName];\n        result.charge += part.charge;\n        result.unsaturation += part.unsaturation;\n        for (const atom in part.atoms) {\n            if (!result.atoms[atom]) {\n                result.atoms[atom] = 0;\n            }\n            result.atoms[atom] += part.atoms[atom];\n        }\n    }\n    result.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(result.atoms);\n    return result;\n}\nfunction getProcessedPart(part, options) {\n    let { customUnsaturations, emFieldName, msemFieldName } = options;\n    /** @type {MFInfo} */\n    let currentPart = {\n        mass: 0,\n        charge: 0,\n        mf: '',\n        atoms: (0, partToAtoms_1.partToAtoms)(part),\n        [emFieldName]: 0,\n    };\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    currentPart.mf = (0, partToMF_1.partToMF)(part);\n    for (let line of part) {\n        let currentElement = '';\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM: {\n                currentElement = line.value;\n                let element = chemical_elements_1.elementsAndIsotopesObject[line.value];\n                // todo should we have a kind GROUP ?\n                if (!element) {\n                    element = chemical_groups_1.groupsObject[line.value];\n                    if (!element)\n                        throw new Error(`Unknown element: ${line.value}`);\n                    if (!customUnsaturations[line.value]) {\n                        customUnsaturations[line.value] = element.unsaturation;\n                    }\n                }\n                if (!element)\n                    throw new Error(`Unknown element: ${line.value}`);\n                currentPart[emFieldName] += element.monoisotopicMass * line.multiplier;\n                currentPart.mass += element.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE: {\n                currentElement = line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                }\n                currentPart[emFieldName] += isotope.mass * line.multiplier;\n                currentPart.mass += isotope.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                currentElement = line.value.atom;\n                let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                currentPart[emFieldName] +=\n                    isotopeRatioInfo[emFieldName] * line.multiplier;\n                currentPart.mass += isotopeRatioInfo.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                currentPart.charge = line.value;\n                if (validUnsaturation) {\n                    unsaturation -= line.value;\n                }\n                break;\n            default:\n                throw new Error('Unimplemented Kind in getInfo', line.kind);\n        }\n        if (currentElement) {\n            if (customUnsaturations[currentElement] !== undefined) {\n                unsaturation += customUnsaturations[currentElement] * line.multiplier;\n            }\n            else if (chemical_elements_1.unsaturationsObject[currentElement] !== undefined) {\n                unsaturation += chemical_elements_1.unsaturationsObject[currentElement] * line.multiplier;\n            }\n            else {\n                validUnsaturation = false;\n            }\n        }\n    }\n    // need to calculate the observedMonoisotopicMass\n    if (currentPart.charge) {\n        currentPart[msemFieldName] =\n            (currentPart[emFieldName] - currentPart.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(currentPart.charge);\n    }\n    if (validUnsaturation) {\n        currentPart.unsaturation = unsaturation / 2 + 1;\n    }\n    return currentPart;\n}\n//# sourceMappingURL=getInfoInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopesInfo = getIsotopesInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/** @typedef {import('./getIsotopesInfo.types').IsotopesInfo} IsotopesInfo\n\n/**\n *\n * @param {*} parts\n * @returns {[]|IsotopesInfo}\n */\nfunction getIsotopesInfo(parts) {\n    if (parts.length === 0)\n        return [];\n    if (parts.length > 1) {\n        throw new Error('getIsotopesInfo can not be applied on multipart MF');\n    }\n    return getProcessedPart(parts[0]);\n}\n/**\n * @returns {IsotopesInfo}\n */\nfunction getProcessedPart(part) {\n    /** @type {IsotopesInfo} */\n    let result = {\n        charge: 0,\n        isotopes: [],\n    };\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE: {\n                let isotopeKey = line.value.isotope + line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[isotopeKey];\n                if (!isotope) {\n                    throw new Error('unknown isotope:', line.value.atom, line.value.isotope);\n                }\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution: [{ x: isotope.mass, y: 1 }],\n                    naturalDeltaNeutrons: chemical_elements_1.stableIsotopesObject[isotopeKey]?.deltaNeutrons ?? 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value.atom];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                let distribution = getDistribution(element.isotopes, line.value.ratio);\n                let maxIndex = 0;\n                for (let i = 1; i < distribution.length; i++) {\n                    if (distribution[i].y > distribution[maxIndex].y) {\n                        maxIndex = i;\n                    }\n                }\n                let mostAbundantKey = Math.round(distribution[maxIndex].x) + line.value.atom;\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution,\n                    naturalDeltaNeutrons: chemical_elements_1.stableIsotopesObject[mostAbundantKey]?.deltaNeutrons ?? 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.ATOM: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                result.isotopes.push({\n                    atom: line.value,\n                    number: line.multiplier,\n                    distribution: element.isotopes.map((e) => ({\n                        x: e.mass,\n                        y: e.abundance,\n                    })),\n                    naturalDeltaNeutrons: 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                result.charge += line.value;\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return result;\n}\nfunction getDistribution(isotopesArray, ratio) {\n    let ratios = normalize(ratio);\n    let result = [];\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${chemical_elements_1.isotopesObject}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.push({\n            x: isotopesArray[i].mass,\n            y: ratios[i],\n        });\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopesInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToDisplay = partsToDisplay;\nconst Kind_1 = require(\"../Kind\");\nconst toDisplay_js_1 = require(\"./toDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {Array<Object>} result of the parse method\n */\nfunction partsToDisplay(parts) {\n    let lines = [];\n    for (let part of parts) {\n        if (lines.length > 0)\n            lines.push({ kind: Kind_1.Kind.SALT, value: '•' });\n        for (let partLine of part) {\n            lines.push(partLine);\n            if (partLine.multiplier) {\n                lines.push({\n                    kind: Kind_1.Kind.MULTIPLIER,\n                    value: partLine.multiplier,\n                });\n            }\n        }\n    }\n    return (0, toDisplay_js_1.toDisplay)(lines);\n}\n//# sourceMappingURL=partsToDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToMF = partsToMF;\nconst partToMF_1 = require(\"./partToMF\");\nfunction partsToMF(parts, options) {\n    let mf = [];\n    for (let part of parts) {\n        mf.push((0, partToMF_1.partToMF)(part, options));\n    }\n    return mf.join(' . ');\n}\n//# sourceMappingURL=partsToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toParts = toParts;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\n/**\n *\n * @param {*} lines\n * @param {object} [options={}]\n * @param {boolean} [options.expand=true] - Should we expand the groupsObject\n */\nfunction toParts(lines, options = {}) {\n    const { expand: shouldExpandGroupsObject = true } = options;\n    let parts = [];\n    let currentPart = createNewPart();\n    let previousKind = Kind_1.Kind.BEGIN;\n    parts.push(currentPart);\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM:\n            case Kind_1.Kind.ISOTOPE_RATIO:\n            case Kind_1.Kind.ISOTOPE:\n            case Kind_1.Kind.CHARGE:\n                currentPart.lines.push({ ...line, multiplier: 1 });\n                break;\n            case Kind_1.Kind.OPENING_PARENTHESIS:\n                openingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.CLOSING_PARENTHESIS:\n                closingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.PRE_MULTIPLIER:\n                preMultiplier(currentPart, line);\n                break;\n            case Kind_1.Kind.MULTIPLIER:\n                postMultiplier(currentPart, line.value, previousKind);\n                break;\n            case Kind_1.Kind.SALT:\n                globalPartMultiplier(currentPart);\n                currentPart = createNewPart();\n                parts.push(currentPart);\n                break;\n            case Kind_1.Kind.ANCHOR: // we ignore anchors to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.COMMENT: // we ignore comments to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.TEXT:\n                break;\n            default:\n                throw new Error(`Can not process mf having: ${line.kind}`);\n        }\n        previousKind = line.kind;\n    }\n    globalPartMultiplier(currentPart);\n    if (shouldExpandGroupsObject)\n        expandGroupsObject(parts);\n    return combineAtomsIsotopesCharges(parts);\n}\nfunction createNewPart() {\n    let currentMultiplier = { value: 1, fromIndex: 0 };\n    return { lines: [], multipliers: [currentMultiplier], currentMultiplier };\n}\nfunction openingParenthesis(currentPart) {\n    currentPart.currentMultiplier = {\n        value: 1,\n        fromIndex: currentPart.lines.length,\n    };\n    currentPart.multipliers.push(currentPart.currentMultiplier);\n}\nfunction closingParenthesis(currentPart) {\n    currentPart.currentMultiplier = currentPart.multipliers.pop();\n    if (currentPart.currentMultiplier !== 1) {\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= currentPart.currentMultiplier.value;\n        }\n    }\n}\nfunction preMultiplier(currentPart, line) {\n    currentPart.currentMultiplier.value *= line.value;\n}\nfunction globalPartMultiplier(currentPart) {\n    for (let i = currentPart.multipliers[0].fromIndex; i < currentPart.lines.length; i++) {\n        currentPart.lines[i].multiplier *= currentPart.multipliers[0].value;\n    }\n}\nfunction postMultiplier(currentPart, value, previousKind) {\n    if (previousKind === Kind_1.Kind.CLOSING_PARENTHESIS) {\n        // need to apply to everything till the previous parenthesis\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= value;\n        }\n    }\n    else {\n        // just applies to the previous element\n        currentPart.lines.at(-1).multiplier *= value;\n    }\n}\nfunction expandGroupsObject(parts) {\n    for (let part of parts) {\n        let expanded = false;\n        for (let i = 0; i < part.lines.length; i++) {\n            let line = part.lines[i];\n            if (line.kind === Kind_1.Kind.ATOM) {\n                let group = chemical_groups_1.groupsObject[line.value];\n                if (group) {\n                    expanded = true;\n                    for (let element of group.elements) {\n                        if (element.isotope) {\n                            part.lines.push({\n                                kind: 'isotope',\n                                value: { atom: element.symbol, isotope: element.isotope },\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                        else {\n                            part.lines.push({\n                                kind: 'atom',\n                                value: element.symbol,\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                    }\n                    part.lines[i] = undefined;\n                }\n            }\n        }\n        if (expanded)\n            part.lines = part.lines.filter(Boolean);\n    }\n}\nfunction combineAtomsIsotopesCharges(parts) {\n    let results = [];\n    for (let part of parts) {\n        let result = [];\n        results.push(result);\n        calculateAndSortKeys(part);\n        let currentKey = '';\n        for (let key of part.keys) {\n            if (key.key === Kind_1.Kind.CHARGE) {\n                if (currentKey !== key.key) {\n                    result.push({\n                        kind: Kind_1.Kind.CHARGE,\n                        value: key.value.value * key.value.multiplier,\n                    });\n                }\n                else {\n                    result.at(-1).value += key.value.value * key.value.multiplier;\n                }\n            }\n            else if (currentKey !== key.key) {\n                result.push(key.value);\n            }\n            else {\n                result.at(-1).multiplier += key.value.multiplier;\n            }\n            currentKey = key.key;\n        }\n        result.sort((a, b) => {\n            if (a.kind === Kind_1.Kind.CHARGE)\n                return 1;\n            if (b.kind === Kind_1.Kind.CHARGE)\n                return -1;\n            let atomA = a.kind === Kind_1.Kind.ATOM ? a.value : a.value.atom;\n            let atomB = b.kind === Kind_1.Kind.ATOM ? b.value : b.value.atom;\n            if (atomA !== atomB)\n                return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n            // same atome but some isotopes ...\n            if (a.kind === Kind_1.Kind.ATOM)\n                return -1;\n            if (b.kind === Kind_1.Kind.ATOM)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return 1;\n            return 0;\n        });\n    }\n    return results;\n}\nfunction calculateAndSortKeys(part) {\n    part.keys = [];\n    for (let line of part.lines) {\n        part.keys.push({ key: getKey(line), value: line });\n    }\n    part.keys.sort((a, b) => stringComparator(a.key, b.key));\n}\nfunction getKey(line) {\n    let key = [line.kind];\n    switch (line.kind) {\n        case Kind_1.Kind.CHARGE:\n            break;\n        default:\n            if (typeof line.value === 'string') {\n                key.push(line.value);\n            }\n            else {\n                for (let prop of Object.keys(line.value).toSorted()) {\n                    key.push(line.value[prop]);\n                }\n            }\n    }\n    return key.join('-');\n}\nfunction stringComparator(a, b) {\n    if (a < b)\n        return -1;\n    if (a > b)\n        return 1;\n    return 0;\n}\n//# sourceMappingURL=toParts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toText = toText;\nconst Format_1 = require(\"../Format\");\nconst subSuperscript_1 = require(\"./subSuperscript\");\nfunction toText(lines) {\n    let text = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERIMPOSE: {\n                const under = String(line.under);\n                for (let i = 0; i < under.length; i++) {\n                    const char = under[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                const over = String(line.over);\n                for (let i = 0; i < over.length; i++) {\n                    const char = over[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            default:\n                text.push(line.value);\n        }\n    }\n    return text.join('');\n}\n//# sourceMappingURL=toText.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFInternal = void 0;\nconst Kind_1 = require(\"./Kind\");\nconst ensureCase_1 = require(\"./ensureCase\");\nconst parse_1 = require(\"./parse\");\nconst flatten_1 = require(\"./util/flatten\");\nconst getEA_1 = require(\"./util/getEA\");\nconst getElements_1 = require(\"./util/getElements\");\nconst getInfo_1 = require(\"./util/getInfo\");\nconst getIsotopesInfo_1 = require(\"./util/getIsotopesInfo\");\nconst partsToDisplay_1 = require(\"./util/partsToDisplay\");\nconst partsToMF_1 = require(\"./util/partsToMF\");\nconst toDisplay_1 = require(\"./util/toDisplay\");\nconst toHtml_1 = require(\"./util/toHtml\");\nconst toParts_1 = require(\"./util/toParts\");\nconst toText_1 = require(\"./util/toText\");\n/** @typedef {import('./util/getIsotopesInfo.types').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('./util/getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./util/getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n * Class allowing to deal with molecular formula and derived information\n */\nclass MFInternal {\n    constructor(mf, options = {}) {\n        const { flattenLimit = 0 } = options;\n        if (options.ensureCase) {\n            mf = (0, ensureCase_1.ensureCase)(mf);\n        }\n        this.parsed = (0, parse_1.parse)(mf);\n        // This is definitely not the fastest way to do it but it allows to flatten the formula if needed and then parse it again to have a clean structure without multiplier ranges. We can consider doing it in one pass in the future if performance is an issue.\n        if (flattenLimit > 0 &&\n            this.parsed.some((entry) => entry.kind === Kind_1.Kind.MULTIPLIER_RANGE)) {\n            try {\n                const flattened = (0, flatten_1.flatten)(this.parsed, { limit: flattenLimit });\n                this.parsed = (0, parse_1.parse)(flattened.join('.'));\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.error(error.toString());\n            }\n        }\n        this.cache = {};\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     * @returns {{kind: string, value: string}[]}\n     */\n    toDisplay() {\n        if (!this.cache.displayed)\n            this.cache.displayed = (0, toDisplay_1.toDisplay)(this.parsed);\n        return this.cache.displayed;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     * @returns {string}\n     */\n    toHtml() {\n        if (!this.cache.html) {\n            this.toDisplay();\n            this.cache.html = (0, toHtml_1.toHtml)(this.cache.displayed);\n        }\n        return this.cache.html;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     * @returns {string}\n     */\n    toText() {\n        if (!this.cache.text) {\n            this.toDisplay();\n            this.cache.text = (0, toText_1.toText)(this.cache.displayed);\n        }\n        return this.cache.text;\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     * @returns {string}\n     */\n    toCanonicText() {\n        if (!this.cache.canonicText) {\n            this.cache.canonicText = new MFInternal(this.toMF()).toText();\n        }\n        return this.cache.canonicText;\n    }\n    toParts(options) {\n        if (options) {\n            return (0, toParts_1.toParts)(this.parsed, options);\n        }\n        // we don't want to cache the parts if we are using options\n        if (!this.cache.parts) {\n            this.cache.parts = (0, toParts_1.toParts)(this.parsed, options);\n        }\n        return this.cache.parts;\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     * @param {object} [options={}] options\n     * @param {object} [options.customUnsaturations={}] custom unsaturations\n     * @param {string} [options.emFieldName='monoisotopicMass'] name of the monoisotopic mass field\n     * @param {string} [options.msemFieldName='observedMonoisotopicMass'] name of the observed monoisotopic mass field\n     * @returns {MFInfo|MFInfoWithParts}\n     */\n    getInfo(options = {}) {\n        if (!this.cache.info) {\n            this.toParts();\n            this.cache.info = (0, getInfo_1.getInfo)(this.cache.parts, options);\n        }\n        return this.cache.info;\n    }\n    /**\n     * Returns an object with the elemental analysis\n     * @returns {*[]}\n     */\n    getEA() {\n        if (!this.cache.ea) {\n            this.toParts();\n            this.cache.ea = (0, getEA_1.getEA)(this.cache.parts);\n        }\n        return this.cache.ea;\n    }\n    /**\n     * Get the different elements for each part\n     * @returns {*[]}\n     */\n    getElements() {\n        if (!this.cache.elements) {\n            this.toParts();\n            this.cache.elements = (0, getElements_1.getElements)(this.cache.parts);\n        }\n        return this.cache.elements;\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     * @returns {IsotopesInfo}\n     */\n    getIsotopesInfo(options = {}) {\n        if (!this.cache.isotopesInfo) {\n            this.toParts();\n            this.cache.isotopesInfo = (0, getIsotopesInfo_1.getIsotopesInfo)(this.cache.parts, options);\n        }\n        return this.cache.isotopesInfo;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toMF() {\n        if (!this.cache.mf) {\n            this.toParts();\n            this.cache.mf = (0, partsToMF_1.partsToMF)(this.cache.parts);\n        }\n        return this.cache.mf;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toNeutralMF() {\n        if (!this.cache.neutralMF) {\n            this.toParts();\n            this.cache.neutralMF = (0, partsToMF_1.partsToMF)(this.cache.parts, { neutral: true });\n        }\n        return this.cache.neutralMF;\n    }\n    canonize() {\n        this.toParts();\n        this.cache.displayed = (0, partsToDisplay_1.partsToDisplay)(this.cache.parts);\n        this.cache.html = undefined;\n    }\n    flatten(options) {\n        return (0, flatten_1.flatten)(this.parsed, options);\n    }\n}\nexports.MFInternal = MFInternal;\n//# sourceMappingURL=MFInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MF = void 0;\nconst MFInternal_1 = require(\"./MFInternal\");\nclass MF {\n    internal;\n    constructor(mf, options = {}) {\n        this.internal = new MFInternal_1.MFInternal(mf, options);\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     */\n    toDisplay() {\n        return this.internal.toDisplay();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     */\n    toHtml() {\n        return this.internal.toHtml();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     */\n    toText() {\n        return this.internal.toText();\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     */\n    toCanonicText() {\n        return this.internal.toCanonicText();\n    }\n    toParts(options) {\n        return this.internal.toParts(options);\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     */\n    getInfo(options) {\n        return this.internal.getInfo(options);\n    }\n    /**\n     * Returns an object with the elemental analysis\n     */\n    getEA() {\n        return this.internal.getEA();\n    }\n    /**\n     * Get the different elements for each part\n     */\n    getElements() {\n        return this.internal.getElements();\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     */\n    getIsotopesInfo(options = {}) {\n        return this.internal.getIsotopesInfo(options);\n    }\n    /**\n     * Get a canonized parsable Molecule Formula\n     */\n    toMF() {\n        return this.internal.toMF();\n    }\n    /**\n     * Get a canonized MF\n     */\n    toNeutralMF() {\n        return this.internal.toNeutralMF();\n    }\n    canonize() {\n        return this.internal.canonize();\n    }\n    flatten(options) {\n        return this.internal.flatten(options);\n    }\n}\nexports.MF = MF;\n//# sourceMappingURL=MF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseToHtml = parseToHtml;\nconst parse_js_1 = require(\"./parse.js\");\nconst toDisplay_js_1 = require(\"./util/toDisplay.js\");\nconst toHtml_js_1 = require(\"./util/toHtml.js\");\n/**\n * Parse a molecular formula and converts it to an HTML code\n * @param {String} mf String containing the molecular formula\n */\nfunction parseToHtml(mf) {\n    let parsed = (0, parse_js_1.parse)(mf);\n    let display = (0, toDisplay_js_1.toDisplay)(parsed);\n    return (0, toHtml_js_1.toHtml)(display);\n}\n//# sourceMappingURL=parseToHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEutrophicationPotential = getEutrophicationPotential;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getEutrophicationPotential(mfString) {\n    let parsed = new mf_parser_1.MF(mfString);\n    let info = parsed.getInfo();\n    let mf = info.mf;\n    let mw = info.mass;\n    let nC = info.atoms.C || 0;\n    let nO = info.atoms.O || 0;\n    let nN = info.atoms.N || 0;\n    let nP = info.atoms.P || 0;\n    let nH = info.atoms.H || 0;\n    let atoms = Object.keys(info.atoms);\n    for (let atom of atoms) {\n        if (!['C', 'H', 'N', 'O', 'P'].includes(atom)) {\n            return {\n                log: `EP can not be calculated because the MF contains the element: ${atom}`,\n            };\n        }\n    }\n    let vRef = 1;\n    let mwRef = 94.97;\n    let thOD = nC + (nH - 3 * nN) / 4 - nO / 2;\n    let v = nP + nN / 16 + thOD / 138;\n    let ep = v / mw / (vRef / mwRef);\n    return {\n        v,\n        thOD,\n        ep,\n        mf,\n        mw,\n        log: 'Successful calculation',\n    };\n}\n//# sourceMappingURL=getEutrophicationPotential.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsem = getMsem;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getMsem(em, charge) {\n    if (charge > 0) {\n        return em / charge - chemical_elements_1.ELECTRON_MASS;\n    }\n    else if (charge < 0) {\n        return em / (charge * -1) + chemical_elements_1.ELECTRON_MASS;\n    }\n    else {\n        return 0;\n    }\n}\n//# sourceMappingURL=getMsem.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsInfo = getMsInfo;\nconst getMsem_1 = require(\"./getMsem\");\n/**\n * Returns an object containing:\n * {ms: {em, charge, ionization}, ionization: {}}\n * We return the ionization in order to know which one has been selected\n */\nfunction getMsInfo(entry, options = {}) {\n    const { allowNeutralMolecules, ionization = { mf: '', em: 0, charge: 0 }, forceIonization = false, targetMass, } = options;\n    let realIonization = ionization;\n    if (!forceIonization && entry.ionization && entry.ionization.mf !== '') {\n        realIonization = entry.ionization;\n    }\n    let ms = {\n        ionization: realIonization.mf,\n        em: 0,\n        charge: entry.charge + realIonization.charge,\n    };\n    if (ms.charge !== 0) {\n        ms.em = (0, getMsem_1.getMsem)(entry.em + realIonization.em, ms.charge);\n    }\n    else if (allowNeutralMolecules) {\n        ms.em = entry.em + realIonization.em;\n    }\n    if (targetMass) {\n        ms.delta = targetMass - ms.em;\n        ms.ppm = ((targetMass - ms.em) / ms.em) * 1e6;\n    }\n    return {\n        ms,\n        ionization: realIonization,\n    };\n}\n//# sourceMappingURL=getMsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRangesForFragment = getRangesForFragment;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getRangesForFragment(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        // example ClBr2(CH2)0-2NO\n        // the idea is that as long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                            max: item.value,\n                        });\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            newRanges.push({ mf: currentMF });\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (const range of ranges) {\n        if (range.max === 0)\n            continue;\n        let max = range.max === undefined ? 1 : range.max;\n        possibilities.push(`${range.mf}0-${max}`);\n    }\n    return possibilities.join(' ');\n}\n//# sourceMappingURL=getRangesForFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFRange = void 0;\nconst mf_parser_1 = require(\"mf-parser\");\nclass MFRange {\n    constructor(mf) {\n        this.range = getRange(mf);\n    }\n    isInRange(mf) {\n        const target = getRange(mf);\n        let rangeIndex = 0;\n        let targetIndex = 0;\n        while (rangeIndex < this.range.length && targetIndex < target.length) {\n            const rangeElement = this.range[rangeIndex];\n            const targetElement = target[targetIndex];\n            if (rangeElement.element === targetElement.element) {\n                // Check if the target's range is within the range's range\n                if (targetElement.range.from >= rangeElement.range.from &&\n                    targetElement.range.to <= rangeElement.range.to) {\n                    targetIndex++;\n                    rangeIndex++;\n                }\n                else {\n                    return false; // Target element is out of range\n                }\n            }\n            else if (rangeElement.element < targetElement.element) {\n                if (rangeElement.range.from > 0) {\n                    return false; // Remaining range elements must have a minimum of 1\n                }\n                rangeIndex++;\n            }\n            else {\n                return false; // Target element is not in the range\n            }\n        }\n        if (rangeIndex < this.range.length) {\n            if (this.range[rangeIndex].range.from > 0) {\n                return false; // Remaining range elements must have a minimum of 1\n            }\n            rangeIndex++;\n        }\n        if (targetIndex < target.length) {\n            return false; // Not all target elements were matched\n        }\n        return true; // All target elements are within the range\n    }\n}\nexports.MFRange = MFRange;\nfunction getRange(mf) {\n    const parsed = (0, mf_parser_1.parse)(mf, { expandGroups: true, simplify: true });\n    const ranges = [];\n    let currentRange;\n    for (const item of parsed) {\n        switch (item.kind) {\n            case 'atom':\n                currentRange = { element: item.value, range: { from: 1, to: 1 } };\n                ranges.push(currentRange);\n                break;\n            case 'isotope':\n                currentRange = {\n                    element: item.value.isotope + item.value.atom,\n                    range: { from: 1, to: 1 },\n                };\n                break;\n            case 'multiplier':\n                if (currentRange) {\n                    currentRange.range.from = item.value;\n                    currentRange.range.to = item.value;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier without preceding element in MF: ${mf}`);\n                }\n                break;\n            case 'multiplierRange':\n                if (currentRange) {\n                    currentRange.range.from = item.value.from;\n                    currentRange.range.to = item.value.to;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier range without preceding element in MF: ${mf}`);\n                }\n                break;\n            default:\n                throw new Error(`MFRange: Unknown kind: ${item.kind} in MF: ${mf}`);\n        }\n    }\n    return ranges.toSorted((a, b) => {\n        if (a.element < b.element)\n            return -1;\n        if (a.element > b.element)\n            return 1;\n        return 0;\n    });\n}\n//# sourceMappingURL=MFRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfDiff = mfDiff;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction mfDiff(mfString1, mfString2) {\n    let mf1 = new mf_parser_1.MF(mfString1).getInfo().atoms;\n    let mf2 = new mf_parser_1.MF(mfString2).getInfo().atoms;\n    let atoms = Object.keys(mf1);\n    for (const atom of Object.keys(mf2)) {\n        if (!atoms.includes(atom))\n            atoms.push(atom);\n    }\n    let mf = '';\n    for (let atom of atoms) {\n        let diff = (mf1[atom] || 0) - (mf2[atom] || 0);\n        if (diff)\n            mf += atom + diff;\n    }\n    return new mf_parser_1.MF(mf).toMF();\n}\n//# sourceMappingURL=mfDiff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessIonizations = preprocessIonizations;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessIonizations(ionizationsString = '') {\n    if (Array.isArray(ionizationsString))\n        return ionizationsString;\n    const ionizations = ionizationsString.split(/ *[\\t\\n\\r,.;]+ */);\n    // it is allowed to have ranges in Ionizations. We need to explode them.\n    const results = [];\n    for (const ionization of ionizations) {\n        const parts = new mf_parser_1.MF(ionization).flatten();\n        for (const part of parts) {\n            const info = new mf_parser_1.MF(part).getInfo();\n            results.push({\n                mf: part,\n                em: info.monoisotopicMass,\n                charge: info.charge,\n                atoms: info.atoms,\n            });\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=preprocessIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessRanges = preprocessRanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessRanges(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // but the range should only applied on the previous atom, group or parenthesis\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            originalMinCount: min, // value defined by the user\n            originalMaxCount: max, // value defined by the user\n            currentMinCount: min,\n            currentMaxCount: max,\n            currentCount: min,\n            currentMonoisotopicMass: 0,\n            currentCharge: 0,\n            currentUnsaturation: 0,\n            initialOrder: i,\n            minInnerMass: 0,\n            maxInnerMass: 0,\n            minInnerCharge: 0,\n            maxInnerCharge: 0,\n            minCharge: 0,\n            maxCharge: 0,\n            minMass: 0,\n            maxMass: 0,\n            innerCharge: false,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.em = range.em || info.monoisotopicMass;\n        possibility.charge = range.charge || info.charge;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        possibility.atoms = info.atoms;\n        if (possibility.mf !== info.mf) {\n            possibility.isGroup = true;\n        }\n    }\n    possibilities = possibilities.filter((r) => r.originalMinCount !== 0 || r.originalMaxCount !== 0);\n    // we will sort the way we analyse the data\n    // 1. The one possibility parameter\n    // 2. The charged part\n    // 3. Decreasing em\n    possibilities.sort((a, b) => {\n        if (a.originalMinCount === a.originalMaxCount)\n            return -1; // should be in front, they are 'static'\n        if (b.originalMinCount === b.originalMaxCount)\n            return 1;\n        if (a.charge && b.charge) {\n            if (Math.abs(a.charge) > Math.abs(b.charge))\n                return -1;\n            if (Math.abs(a.charge) < Math.abs(b.charge))\n                return 1;\n            return b.em - a.em;\n        }\n        if (a.charge)\n            return -1;\n        if (b.charge)\n            return 1;\n        return b.em - a.em;\n    });\n    // we calculate couple of fixed values\n    for (let i = 0; i < possibilities.length; i++) {\n        for (let j = i; j < possibilities.length; j++) {\n            let possibility = possibilities[j];\n            if (possibility.em > 0) {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMinCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMaxCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMinCount;\n            }\n            if (possibility.charge > 0) {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMinCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMinCount;\n            }\n        }\n    }\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i < possibilities.length - 1) {\n            let possibility = possibilities[i];\n            let innerPossibility = possibilities[i + 1];\n            possibility.minInnerMass = innerPossibility.minMass;\n            possibility.maxInnerMass = innerPossibility.maxMass;\n            possibility.minInnerCharge = innerPossibility.minCharge;\n            possibility.maxInnerCharge = innerPossibility.maxCharge;\n            if (possibility.minInnerCharge || possibility.maxInnerCharge) {\n                possibility.innerCharge = true;\n            }\n        }\n    }\n    return possibilities;\n}\n//# sourceMappingURL=preprocessRanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getChargeLadders = getChargeLadders;\nexports.assignLadderCharge = assignLadderCharge;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Group the peaks of a multiply charged species into charge-state ladders.\n *\n * An electrospray of a protein does not show its isotopologues but a ladder of\n * charge states: the same molecule of neutral mass `M` ionized a growing number\n * of times by a charge carrier (a proton, a sodium, ...). A peak of charge `z`\n * sits at `m/z = M / z + delta`, where `delta` is the m/z shift of one charge\n * carrier, so a whole series shares one `M` while each of its peaks has its own\n * charge. The charge of a single peak can therefore not be read on its own:\n * what shows it is the ladder it belongs to.\n *\n * A ladder is grown from its most intense peak by predicting, one charge state\n * at a time, where the next one must lie, and it is kept only when it spans at\n * least `minLength` consecutive charge states. Ladders are assigned from the one\n * holding the most intensity to the one holding the least, and a peak only takes\n * the charge of the first ladder that claims it, so a harmonic (every other\n * state of a real ladder) can not steal the peaks of the series it mimics.\n * @param {Array<{x: number, y: number}>} peaks - the peaks of the spectrum\n * @param {object} [options={}]\n * @param {string|Array} [options.ionizations='H+'] - the charge carriers to try,\n * as a comma separated list (`'H+,Na+,K+'`) or an array of preprocessed\n * ionizations. Each envelope is assigned the carrier that explains it best.\n * @param {number} [options.maxCharge=100] - highest charge state to consider;\n * the ladder is grown over the states `1` to `maxCharge` (its magnitude is used,\n * so a negative-mode range such as `-100` behaves like `100`)\n * @param {number} [options.tolerance=500] - tolerance on the position of the\n * next charge state, in ppm. Larger than for isotopologues because the charge\n * states of a protein are broad and rarely mass resolved.\n * @param {number} [options.minLength=5] - shortest ladder that shows a charge\n * @param {number} [options.minRelativeIntensity=0.05] - peaks under this\n * fraction of the most intense one are satellites, adducts or noise and take no\n * part in the ladders\n * @returns {Array<{mass: number, ionization: string, peaks: Array}>} the\n * ladders, from the one holding the most intensity to the one holding the\n * least. `mass` is the neutral mass they reconstruct, `ionization` the carrier\n * that explains them and each peak carries its `charge`.\n */\nfunction getChargeLadders(peaks, options = {}) {\n    const ladders = buildLadders(peaks, options);\n    const results = [];\n    for (const ladder of ladders) {\n        const ladderPeaks = [];\n        for (const { claim, ...peak } of ladder.peaks) {\n            ladderPeaks.push(peak);\n        }\n        ladderPeaks.sort((a, b) => a.x - b.x);\n        results.push({\n            mass: ladder.mass,\n            ionization: ladder.ionization,\n            peaks: ladderPeaks,\n        });\n    }\n    return results;\n}\n/**\n * Give to each of `selectedPeaks` the charge of the ladder peak at its mass.\n *\n * A peak that matches no ladder peak gets no `charge`. Used by\n * `getPeaksWithCharge` to complete the charge the isotopologue clusters can not\n * give to a multiply charged species.\n * @param {Array} selectedPeaks - peaks to evaluate\n * @param {Array<{peaks: Array}>} ladders - as returned by `getChargeLadders`\n * @param {number} [tolerance=20] - tolerance, in ppm, to match a selected peak\n * to a ladder peak\n * @returns {Array} copy of `selectedPeaks`, carrying a `charge` when matched\n */\nfunction assignLadderCharge(selectedPeaks, ladders, tolerance = 20) {\n    const members = [];\n    for (const ladder of ladders) {\n        for (const peak of ladder.peaks)\n            members.push(peak);\n    }\n    members.sort((a, b) => a.x - b.x);\n    if (members.length === 0) {\n        return selectedPeaks.map((peak) => ({ ...peak }));\n    }\n    const masses = new Float64Array(members.length);\n    for (let i = 0; i < members.length; i++)\n        masses[i] = members[i].x;\n    const relativeTolerance = tolerance * 1e-6;\n    const results = [];\n    for (const peak of selectedPeaks) {\n        const index = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, peak.x);\n        const absoluteTolerance = relativeTolerance * peak.x;\n        if (Math.abs(members[index].x - peak.x) <= absoluteTolerance) {\n            results.push({ ...peak, charge: members[index].charge });\n        }\n        else {\n            results.push({ ...peak });\n        }\n    }\n    return results;\n}\n/**\n * The ladders the exported functions need, each with its reconstructed neutral\n * mass, its carrier and its peaks (carrying their charge), sorted from the one\n * holding the most intensity to the one holding the least.\n * @param {Array<{x: number, y: number}>} peaks\n * @param {object} [options={}]\n * @returns {Array<{mass: number, ionization: string, intensity: number, peaks: Array}>}\n */\nfunction buildLadders(peaks, options = {}) {\n    const { ionizations = 'H+', maxCharge = 100, tolerance = 500, minLength = 5, minRelativeIntensity = 0.05, } = options;\n    // delta: the m/z shift of one charge carrier, the `delta` of `m/z = M / z + delta`\n    const preprocessedIonizations = (0, mf_utilities_1.preprocessIonizations)(ionizations).map((ionization) => ({\n        mf: ionization.mf,\n        delta: (ionization.em - ionization.charge * chemical_elements_1.ELECTRON_MASS) /\n            Math.abs(ionization.charge),\n    }));\n    const sorted = peaks.toSorted((a, b) => a.x - b.x);\n    const floor = minRelativeIntensity * (0, ml_spectra_processing_1.xyObjectMaxYPoint)(sorted).y;\n    // a copy carrying `claim`, the flag a ladder sets on the peaks it takes so a\n    // later, weaker ladder can not reuse them\n    const significantPeaks = sorted\n        .filter((peak) => peak.y >= floor)\n        .map((peak) => ({ ...peak, claim: false }));\n    if (significantPeaks.length < minLength)\n        return [];\n    const masses = new Float64Array(significantPeaks.length);\n    for (let i = 0; i < significantPeaks.length; i++) {\n        masses[i] = significantPeaks[i].x;\n    }\n    // the ladder spans charge 1 to maxCharge; its magnitude is used so a\n    // negative-mode range (maxCharge = -100) behaves like the positive one\n    const from = 1;\n    const to = Math.max(1, Math.abs(Math.round(maxCharge)));\n    // ppm turned into a plain factor once, so growth only scales it by the mass\n    const relativeTolerance = tolerance * 1e-6;\n    const ladders = [];\n    for (const anchor of significantPeaks.toSorted((a, b) => b.y - a.y)) {\n        if (anchor.claim)\n            continue;\n        // neither the carrier nor the charge of the anchor is known, so every\n        // hypothesis is grown and the one spanning the most consecutive states is\n        // kept; a tie goes to the lowest charge, the fundamental rather than one of\n        // its harmonics\n        let best = null;\n        for (const ionization of preprocessedIonizations) {\n            if (anchor.x - ionization.delta <= 0)\n                continue;\n            for (let charge = from; charge <= to; charge++) {\n                const members = growLadder(significantPeaks, masses, anchor, charge, {\n                    from,\n                    to,\n                    relativeTolerance,\n                    delta: ionization.delta,\n                });\n                if (best === null ||\n                    members.length > best.members.length ||\n                    (members.length === best.members.length && charge < best.charge)) {\n                    best = { members, charge, ionization };\n                }\n            }\n        }\n        if (best === null || best.members.length < minLength)\n            continue;\n        const { delta, mf } = best.ionization;\n        const ladderPeaks = [];\n        let massSum = 0;\n        let weightSum = 0;\n        let intensity = 0;\n        for (const { peak, charge } of best.members) {\n            peak.claim = true;\n            peak.charge = charge;\n            massSum += peak.y * charge * (peak.x - delta);\n            weightSum += peak.y;\n            intensity += peak.y;\n            ladderPeaks.push(peak);\n        }\n        ladders.push({\n            mass: massSum / weightSum,\n            ionization: mf,\n            intensity,\n            peaks: ladderPeaks,\n        });\n    }\n    ladders.sort((a, b) => b.intensity - a.intensity);\n    return ladders;\n}\n/**\n * Grow a ladder around an anchor peak assumed to carry `charge`.\n *\n * The next charge state is predicted from the last matched peak rather than from\n * the anchor, so the error of a broad, unresolved peak never accumulates over\n * the whole ladder. Growth stops at the first state that is missing or already\n * claimed by a more intense ladder.\n * @param {Array<{x: number, claim: boolean}>} significant - the significant peaks, sorted by mass\n * @param {Float64Array} masses - their masses, for the closest-peak search\n * @param {{x: number}} anchor - the peak to grow from\n * @param {number} charge - hypothesised charge of the anchor\n * @param {object} bounds\n * @param {number} bounds.from - lowest charge state\n * @param {number} bounds.to - highest charge state\n * @param {number} bounds.relativeTolerance - tolerance as a plain factor (ppm * 1e-6)\n * @param {number} bounds.delta - m/z shift of one charge carrier\n * @returns {Array<{peak: object, charge: number}>}\n */\nfunction growLadder(significant, masses, anchor, charge, bounds) {\n    const { from, to, relativeTolerance, delta } = bounds;\n    const members = [{ peak: anchor, charge }];\n    const used = new Set([anchor]);\n    let localMass = anchor.x;\n    for (let state = charge - 1; state >= from; state--) {\n        const predicted = ((state + 1) * (localMass - delta)) / state + delta;\n        const peak = significant[(0, ml_spectra_processing_1.xFindClosestIndex)(masses, predicted)];\n        if (peak.claim || used.has(peak))\n            break;\n        if (Math.abs(peak.x - predicted) > relativeTolerance * predicted)\n            break;\n        members.push({ peak, charge: state });\n        used.add(peak);\n        localMass = peak.x;\n    }\n    localMass = anchor.x;\n    for (let state = charge + 1; state <= to; state++) {\n        const predicted = ((state - 1) * (localMass - delta)) / state + delta;\n        const peak = significant[(0, ml_spectra_processing_1.xFindClosestIndex)(masses, predicted)];\n        if (peak.claim || used.has(peak))\n            break;\n        if (Math.abs(peak.x - predicted) > relativeTolerance * predicted)\n            break;\n        members.push({ peak, charge: state });\n        used.add(peak);\n        localMass = peak.x;\n    }\n    return members;\n}\n//# sourceMappingURL=getChargeLadders.js.map","\"use strict\";\n/**\n * @param {object}   [entry={}]\n * @param {object}   [options={}]\n * @param {number}   [options.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.onlyNonInteger=false] - Non integer unsaturation\n * @return {boolean}\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationMatcher = unsaturationMatcher;\nfunction unsaturationMatcher(entry, options = {}) {\n    const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, onlyInteger, onlyNonInteger, } = options;\n    if (entry.unsaturation !== undefined) {\n        if (entry.unsaturation < min || entry.unsaturation > max)\n            return false;\n        if (onlyInteger && !Number.isInteger(entry.unsaturation))\n            return false;\n        if (onlyNonInteger && Number.isInteger(entry.unsaturation))\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=unsaturationMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalMatcher = generalMatcher;\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * Returns true if the entry containing MF information match\n * @param {object}   [entry={}] - object containing mw, ...\n * @param {object}   [options={}]\n * @param {number}   [options.minMW=0] - Minimal molecular weight\n * @param {number}   [options.maxMW=+Infinity] - Maximal molecular weight\n * @param {number}   [options.minEM=0] - Minimal monoisotopic mass\n * @param {number}   [options.maxEM=+Infinity] - Maximal monoisotopic mass\n * @param {number}   [options.minCharge=-Infinity] - Minimal charge\n * @param {number}   [options.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}   [options.unsaturation={}]\n * @param {number}   [options.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}   [options.atoms] - object of atom:{min, max}\n * @return {boolean}\n */\nfunction generalMatcher(entry, options = {}) {\n    const { minMW = 0, maxMW = +Infinity, minEM = 0, maxEM = +Infinity, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, atoms, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (entry.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(entry.charge) : entry.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=generalMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.msemMatcher = msemMatcher;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * @typedef {object} MSEMFilterOptions\n * @property {object}         [ionization={ mf: '', em: 0, charge: 0 }] - ionization method\n * @property {boolean}        [forceIonization=false] - If true ignore existing ionizations\n * @property {number}         [precision=1000] - The precision on the experimental mass\n * @property {number}         [targetMass] - Target mass, allows to calculate error and filter results\n * @property {number[]}       [targetMasses] - Target masses: SORTED array of numbers\n * @property {number[]}       [targetIntensities] - Target intensities: SORTED array of numbers\n * @property {number}         [minMW=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxMW=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minEM=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxEM=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minMSEM=-Infinity] - Minimal monoisotopic mass observed by mass\n * @property {number}         [maxMSEM=+Infinity] - Maximal monoisotopic mass observed by mass\n * @property {number}         [minCharge=-Infinity] - Minimal charge\n * @property {number}         [maxCharge=+Infinity] - Maximal charge\n * @property {boolean}        [absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @property {boolean}        [allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @property {object}         [unsaturation={}]\n * @property {number}         [unsaturation.min=-Infinity] - Minimal unsaturation\n * @property {number}         [unsaturation.max=+Infinity] - Maximal unsaturation\n * @property {boolean}        [unsaturation.onlyInteger=false] - Integer unsaturation\n * @property {boolean}        [unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @property {boolean}        [atoms] - object of atom:{min, max}\n * @property {Function}       [callback] - a function that contains information about the current MF\n */\n/**\n * @param {object}             [entry={}]\n * @param {MSEMFilterOptions}  [options={}]\n * @return {boolean}\n */\n/**\n * We always recalculate msem\n */\nfunction msemMatcher(entry, options = {}) {\n    const { ionization = { mf: '', em: 0, charge: 0, atoms: {} }, forceIonization = false, precision = 1000, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, targetMass, // if present we will calculate the errors\n    targetMasses, // if present we will calculate the smallest error\n    targetIntensities, // if present it will be added in the report\n    minEM = -Infinity, maxEM = +Infinity, minMSEM = -Infinity, maxMSEM = +Infinity, minMW = -Infinity, maxMW = +Infinity, allowNegativeAtoms = false, atoms, callback, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    let msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n        ionization,\n        forceIonization,\n        targetMass,\n    });\n    let ms = msInfo.ms;\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (ms.em !== undefined && (ms.em < minMSEM || ms.em > maxMSEM)) {\n        return false;\n    }\n    if (targetMass && Math.abs(ms.ppm) > precision) {\n        return false;\n    }\n    if (ms.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(ms.charge) : ms.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    if (entry.atoms !== undefined && !allowNegativeAtoms) {\n        const ionizationAtoms = (msInfo.ionization && msInfo.ionization.atoms) || {};\n        const atomKeys = new Set(Object.keys(ionizationAtoms).concat(Object.keys(entry.atoms)));\n        for (let atom of atomKeys) {\n            if ((entry.atoms[atom] || 0) + (ionizationAtoms[atom] || 0) < 0) {\n                return false;\n            }\n        }\n    }\n    if (targetMasses && targetMasses.length > 0) {\n        let index = (0, ml_spectra_processing_1.xFindClosestIndex)(targetMasses, ms.em);\n        let closestMass = targetMasses[index];\n        msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n            ionization,\n            forceIonization,\n            targetMass: closestMass,\n        });\n        msInfo.ms.target = { mass: closestMass };\n        if (targetIntensities) {\n            msInfo.ms.target.intensity = targetIntensities[index];\n        }\n        // need to find the closest targetMasses\n        if (Math.abs(msInfo.ms.ppm) > precision)\n            return false;\n    }\n    if (callback && !callback(entry))\n        return false;\n    return msInfo;\n}\n//# sourceMappingURL=msemMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TargetMassCache = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * returns all the possible neutral mass for a defined experimental (targetMass) mass\n */\nclass TargetMassCache {\n    /**\n     * @param {number} targetMass\n     * @param {Array} possibilities\n     * @param {object} [options={}]\n     * @param {boolean} [options.allowNeutral=false]\n     * @param {number} [options.charge=0]\n     * @param {number} [options.precision=100]\n     * @param {object} [options.filter={}]\n     * @param {number} [options.filter.minCharge=Number.MIN_SAFE_INTEGER]\n     * @param {number} [options.filter.maxCharge=Number.MAX_SAFE_INTEGER]\n     * @returns\n     */\n    constructor(targetMass, possibilities, options = {}) {\n        const { allowNeutral = false, // msem because em in this case !\n        filter = {}, charge = 0, precision = 100, } = options;\n        const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, } = filter;\n        if (!possibilities || possibilities.length === 0)\n            return;\n        let firstPossibility = possibilities[0];\n        let currentMinCharge = Math.max(minCharge, firstPossibility.minCharge + charge);\n        let currentMaxCharge = Math.min(maxCharge, firstPossibility.maxCharge + charge);\n        this.minCharge = currentMinCharge;\n        this.maxCharge = currentMaxCharge;\n        let size = this.maxCharge - this.minCharge + 1;\n        this.data = [];\n        let minMass = 0;\n        let maxMass = 0;\n        let range = (targetMass * precision) / 1e6;\n        for (let i = 0; i < size; i++) {\n            let currentCharge = i + this.minCharge;\n            if (currentCharge === 0) {\n                if (allowNeutral) {\n                    minMass = targetMass - range;\n                    maxMass = targetMass + range;\n                }\n                else {\n                    minMass = Number.MAX_SAFE_INTEGER;\n                    maxMass = Number.MIN_SAFE_INTEGER;\n                }\n            }\n            else {\n                minMass =\n                    (targetMass - range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n                maxMass =\n                    (targetMass + range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n            }\n            this.data.push({\n                charge: currentCharge,\n                minMass,\n                maxMass,\n            });\n        }\n    }\n    getMinMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].minMass\n            : Number.MAX_SAFE_INTEGER;\n    }\n    getMaxMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].maxMass\n            : Number.MIN_SAFE_INTEGER;\n    }\n}\nexports.TargetMassCache = TargetMassCache;\n//# sourceMappingURL=TargetMassCache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFsSync = findMFsSync;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst TargetMassCache_1 = require(\"./TargetMassCache\");\n/**\n * @param {number}        targetMass - Monoisotopic mass\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {boolean}       [options.uniqueMFs=true]\n * @param {number}        [options.limit=1000] - Maximum number of results\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string|{mf:string,min:number,max:number}[]}        [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}        [options.precision=100] - Allowed mass range based on precision\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {object}\n */\nfunction findMFsSync(targetMass, options = {}) {\n    const { filter = {}, maxIterations = 1e8, limit = 1000, allowNeutral = true, // if there is no msem we use em !\n    uniqueMFs = false, // if there is no msem we use em !\n    ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], } = options;\n    let targetMassCache;\n    const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, unsaturation = {}, atoms, callback, } = filter;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let filterCharge = minCharge !== Number.MIN_SAFE_INTEGER ||\n        maxCharge !== Number.MAX_SAFE_INTEGER;\n    let advancedFilter;\n    if (atoms || callback) {\n        advancedFilter = {\n            atoms,\n            callback,\n        };\n    }\n    let result = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    // we need to make the processing for all the ionizations\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    for (let ionization of ionizations) {\n        let currentIonization = {\n            currentMonoisotopicMass: ionization.em || 0,\n            currentCharge: ionization.charge,\n            currentUnsaturation: 0, // we don't take into account the unsaturation of the ionization agent\n        };\n        // if (DEBUG) console.log('new ionization', ionization.mf, ionization.em, ionization.charge);\n        // ionization em and charge will be used to set the first atom value\n        let possibilities = (0, mf_utilities_1.preprocessRanges)(ranges);\n        orderMapping = getOrderMapping(possibilities);\n        if (possibilities.length === 0)\n            return { mfs: [] };\n        targetMassCache = new TargetMassCache_1.TargetMassCache(targetMass, possibilities, {\n            ...options,\n            charge: ionization.charge,\n        });\n        let theEnd = false;\n        let maxPosition = possibilities.length;\n        let lastPosition = possibilities.length - 1;\n        let currentPosition = 0;\n        let currentAtom;\n        let previousAtom;\n        let lastPossibility = possibilities[lastPosition];\n        initializePossibilities(possibilities, currentIonization, targetMassCache);\n        //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n        let isValid = false; // designed so that the first time it is not a valid solution\n        while (!theEnd) {\n            if (result.info.numberMFEvaluated++ > maxIterations) {\n                throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n            }\n            if (filterUnsaturation) {\n                let unsaturationValue = lastPossibility.currentUnsaturation;\n                let isOdd = Math.abs(unsaturationValue % 2);\n                if ((unsaturation.onlyInteger && isOdd === 1) ||\n                    (unsaturation.onlyNonInteger && isOdd === 0) ||\n                    fakeMinUnsaturation > unsaturationValue ||\n                    fakeMaxUnsaturation < unsaturationValue) {\n                    isValid = false;\n                }\n            }\n            if (filterCharge &&\n                (lastPossibility.currentCharge < minCharge ||\n                    lastPossibility.currentCharge > maxCharge)) {\n                isValid = false;\n            }\n            if (isValid) {\n                let minMass = targetMassCache.getMinMass(lastPossibility.currentCharge);\n                let maxMass = targetMassCache.getMaxMass(lastPossibility.currentCharge);\n                if (lastPossibility.currentMonoisotopicMass < minMass ||\n                    lastPossibility.currentMonoisotopicMass > maxMass) {\n                    isValid = false;\n                }\n            }\n            if (isValid) {\n                result.info.numberResults++;\n                let newResult = getResult(possibilities, targetMass, allowNeutral, ionization, orderMapping);\n                if (advancedFilter) {\n                    isValid = (0, mf_matcher_1.msemMatcher)(newResult, advancedFilter) !== false;\n                }\n                if (isValid) {\n                    result.mfs.push(newResult);\n                    if (result.mfs.length > 2 * limit) {\n                        if (uniqueMFs)\n                            ensureUniqueMF(result);\n                        result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n                        result.mfs.length = limit;\n                    }\n                }\n            }\n            isValid = true;\n            // we need to set up all the arrays if possible\n            while (currentPosition < maxPosition && currentPosition >= 0) {\n                currentAtom = possibilities[currentPosition];\n                previousAtom =\n                    currentPosition === 0\n                        ? currentIonization\n                        : possibilities[currentPosition - 1];\n                if (currentAtom.currentCount < currentAtom.currentMaxCount) {\n                    currentAtom.currentCount++;\n                    updateCurrentAtom(currentAtom, previousAtom);\n                    if (currentPosition < lastPosition) {\n                        currentPosition++;\n                        setCurrentMinMax(possibilities[currentPosition], possibilities[currentPosition - 1], targetMassCache);\n                    }\n                    else {\n                        break;\n                    }\n                }\n                else {\n                    currentPosition--;\n                }\n            }\n            if (currentPosition < 0) {\n                theEnd = true;\n            }\n        }\n    }\n    if (uniqueMFs)\n        ensureUniqueMF(result);\n    result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    if (result.mfs.length > limit) {\n        result.mfs.length = limit;\n    }\n    for (const mf of result.mfs) {\n        delete mf.currentCounts;\n    }\n    return result;\n}\n/**\n * Ensure that we have only once the same MF\n * In order to improve the speed we just consider the em\n * @param {object} result\n */\nfunction ensureUniqueMF(result) {\n    result.mfs.sort((a, b) => a.em - b.em);\n    let previousEM = 0;\n    let bestCounts = [];\n    const mfs = [];\n    next: for (let current of result.mfs) {\n        if (current.em - previousEM > 1e-8) {\n            previousEM = current.em;\n            bestCounts = current.currentCounts;\n            mfs.push(current);\n        }\n        else {\n            for (let i = 0; i < current.currentCounts.length; i++) {\n                // better priority ???\n                if (current.currentCounts[i] > bestCounts[i]) {\n                    mfs.pop();\n                    mfs.push(current);\n                    bestCounts = current.currentCounts;\n                }\n                else if (current.currentCounts[i] < bestCounts[i]) {\n                    continue next;\n                }\n            }\n        }\n    }\n    result.mfs = mfs;\n}\nfunction updateCurrentAtom(currentAtom, previousAtom) {\n    currentAtom.currentMonoisotopicMass =\n        previousAtom.currentMonoisotopicMass +\n            currentAtom.em * currentAtom.currentCount;\n    currentAtom.currentCharge =\n        previousAtom.currentCharge + currentAtom.charge * currentAtom.currentCount;\n    currentAtom.currentUnsaturation =\n        previousAtom.currentUnsaturation +\n            currentAtom.unsaturation * currentAtom.currentCount;\n}\nfunction getResult(possibilities, targetMass, allowNeutralMolecules, ionization, orderMapping) {\n    let lastPossibility = possibilities.at(-1);\n    let result = {\n        em: lastPossibility.currentMonoisotopicMass - ionization.em,\n        unsaturation: lastPossibility.currentUnsaturation,\n        mf: '',\n        charge: lastPossibility.currentCharge - ionization.charge,\n        ionization,\n        atoms: {},\n        groups: {},\n        currentCounts: possibilities.map((possibility) => possibility.currentCount),\n    };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                if (possibility.currentCount === 1) {\n                    result.mf += `${possibility.mf}`;\n                }\n                else if (possibility.mf.match(/^\\([^()]*\\)$/)) {\n                    result.mf += `${possibility.mf}${possibility.currentCount}`;\n                }\n                else {\n                    result.mf += `(${possibility.mf})${possibility.currentCount}`;\n                }\n                if (result.groups[possibility.mf]) {\n                    result.groups[possibility.mf] += possibility.currentCount;\n                }\n                else {\n                    result.groups[possibility.mf] = possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            for (let atom in possibility.atoms) {\n                if (result.atoms[atom]) {\n                    result.atoms[atom] +=\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n                else {\n                    result.atoms[atom] =\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n            }\n        }\n    }\n    result.unsaturation = (result.unsaturation + Math.abs(result.charge)) / 2 + 1;\n    result.ms = (0, mf_utilities_1.getMsInfo)(result, { targetMass, allowNeutralMolecules }).ms;\n    return result;\n}\nfunction setCurrentMinMax(currentAtom, previousAtom, targetMassCache) {\n    // the current min max can only be optimize if the charge will not change anymore\n    // and the currentAtom.em >= 0\n    if (currentAtom.innerCharge === true ||\n        currentAtom.charge !== 0 ||\n        currentAtom.em < 0) {\n        currentAtom.currentMinCount = currentAtom.originalMinCount;\n        currentAtom.currentMaxCount = currentAtom.originalMaxCount;\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n    else {\n        // no more change of charge, we can optimize\n        let currentMass = previousAtom !== undefined ? previousAtom.currentMonoisotopicMass : 0;\n        let currentCharge = previousAtom !== undefined ? previousAtom.currentCharge : 0;\n        currentAtom.currentMinCount = Math.max(Math.floor((targetMassCache.getMinMass(currentCharge) -\n            currentMass -\n            currentAtom.maxInnerMass) /\n            currentAtom.em), currentAtom.originalMinCount);\n        currentAtom.currentMaxCount = Math.min(Math.floor((targetMassCache.getMaxMass(currentCharge) -\n            currentMass -\n            currentAtom.minInnerMass) /\n            currentAtom.em), currentAtom.originalMaxCount);\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n}\nfunction initializePossibilities(possibilities, currentIonization, targetMassCache) {\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i === 0) {\n            updateCurrentAtom(possibilities[i], currentIonization);\n            setCurrentMinMax(possibilities[i], currentIonization, targetMassCache);\n        }\n        else {\n            updateCurrentAtom(possibilities[i], possibilities[i - 1]);\n        }\n    }\n}\n// eslint-disable-next-line no-unused-vars\nfunction possibilitiesToString(possibilities) {\n    return possibilities.map((a) => [\n        `mf:${a.mf}`,\n        `current:${a.currentCount}`,\n        `min:${a.currentMinCount}`,\n        `max:${a.currentMaxCount}`,\n        `charge:${a.currentCharge}`,\n    ]);\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=findMFsSync.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFs = findMFs;\nconst findMFsSync_1 = require(\"./findMFsSync\");\n/** @typedef {import('./types').MFResult} MFResult */\n/** @typedef {import('./types').MFFinderOptions} MFFinderOptions */\n/**\n * @param {number} targetMass - Monoisotopic mass\n * @param {MFFinderOptions} [options={}]\n * @returns {Promise<MFResult[]>}\n */\nasync function findMFs(targetMass, options = {}) {\n    return (0, findMFsSync_1.findMFsSync)(targetMass, options);\n}\n//# sourceMappingURL=findMFs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfIncluded = mfIncluded;\nconst mf_parser_1 = require(\"mf-parser\");\nconst findMFsSync_js_1 = require(\"./findMFsSync.js\");\n/**\n * @param {string}        mf - the molecular formula to check\n * @param {string}        range - the range of MF to explore\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @returns {boolean}\n */\nfunction mfIncluded(mf, range, options = {}) {\n    let targetEM = new mf_parser_1.MF(mf).getInfo().monoisotopicMass;\n    let results = (0, findMFsSync_js_1.findMFsSync)(targetEM, {\n        allowNeutral: true,\n        ...options,\n        ranges: range,\n        precision: 0.0000001,\n        limit: 1,\n    });\n    return results.mfs.length > 0;\n}\n//# sourceMappingURL=mfIncluded.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMonoisotopicMass = fromMonoisotopicMass;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {number|string|array}    masses - Monoisotopic mass\n * @param {object}    [options={}]\n * @param {number}    [options.maxIterations=10000000] - Maximum number of iterations\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {boolean}   [options.uniqueMFs=true]\n * @param {number}    [options.limit=1000] - Maximum number of results\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string}    [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {object}    [options.filter={}]\n * @param {number}    [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}    [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}    [options.filter.unsaturation={}]\n * @param {number}    [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}    [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}    [options.filter.atoms] - object of atom:{min, max}\n * @param {function}  [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromMonoisotopicMass(masses, options = {}) {\n    if (typeof masses === 'string') {\n        masses = masses.split(/[\\t\\n\\r ,;]/).map(Number);\n    }\n    if (typeof masses === 'number') {\n        masses = [masses];\n    }\n    let results = [];\n    for (let mass of masses) {\n        results.push(await (0, mf_finder_1.findMFs)(mass, options));\n    }\n    return {\n        mfs: results.flatMap((entry) => entry.mfs),\n        info: {\n            numberMFEvaluated: results.reduce((sum, current) => sum + current.info.numberMFEvaluated, 0),\n            numberResults: results.reduce((sum, current) => sum + current.info.numberResults, 0),\n        },\n    };\n}\n//# sourceMappingURL=fromMonoisotopicMass.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaks = getPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getPeaks(peaks, options = {}) {\n    const { from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, threshold = 0.01, limit, sumValue, } = options;\n    let maxY = Number.MIN_SAFE_INTEGER;\n    for (let peak of peaks) {\n        if (peak.y > maxY)\n            maxY = peak.y;\n    }\n    let minY = maxY * threshold;\n    peaks = peaks.filter((peak) => peak.x >= from && peak.x <= to && peak.y >= minY);\n    if (limit && peaks.length > limit) {\n        peaks.sort((a, b) => b.y - a.y);\n        peaks = peaks.slice(0, limit);\n    }\n    if (sumValue) {\n        peaks = structuredClone(peaks);\n        const currentSum = (0, ml_spectra_processing_1.xyObjectSumY)(peaks);\n        const ratio = sumValue / currentSum;\n        for (const peak of peaks) {\n            peak.y *= ratio;\n        }\n    }\n    return peaks.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentPeaks = getFragmentPeaks;\nconst mf_parser_1 = require(\"mf-parser\");\nconst fromMonoisotopicMass_1 = require(\"./from/fromMonoisotopicMass\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {string} mf - Molecular formula of the parent molecule\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {string} [options.ionizations]\n * @param {number} [options.precision]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nasync function getFragmentPeaks(peaks, mf, options = {}) {\n    const { ionizations = '', precision } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    const ranges = Object.keys(mfInfo.atoms)\n        .map((key) => `${key}0-${mfInfo.atoms[key]}`)\n        .join(' ');\n    peaks = (0, getPeaks_js_1.getPeaks)(peaks, options);\n    for (let peak of peaks) {\n        const { mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(peak.x, {\n            precision,\n            ranges,\n            ionizations,\n        });\n        peak.mfs = mfs;\n    }\n    peaks = peaks.filter((peak) => peak.mfs.length > 0);\n    return peaks;\n}\n//# sourceMappingURL=getFragmentPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMassRemainder = getMassRemainder;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Remove an integer number of time the specifiedd monoisotopic mass.\n * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n * @param {object} spectrum\n * @param {number} mass\n * @param {object} [options={}]\n * @param {number} [options.delta=0.001]\n */\nfunction getMassRemainder(spectrum, mass, options = {}) {\n    const { delta = 0.001 } = options;\n    const x = spectrum.x.slice();\n    const y = spectrum.y;\n    for (let i = 0; i < x.length; i++) {\n        const factor = Math.floor(x[i] / mass);\n        x[i] = x[i] - factor * mass;\n    }\n    // we sort and join\n    return (0, ml_spectra_processing_1.xyJoinX)((0, ml_spectra_processing_1.xySortX)({ x, y }), { delta });\n}\n//# sourceMappingURL=getMassRemainder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksWithCharge = getPeaksWithCharge;\nexports.getChargeAtMass = getChargeAtMass;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst getChargeClusters_js_1 = require(\"./getChargeClusters.js\");\nconst getChargeLadders_js_1 = require(\"./getChargeLadders.js\");\n/**\n * Evaluate the charge of every peak.\n *\n * The charge comes from the isotopologue clusters: a peak takes the charge of\n * the series it belongs to. Evaluating a peak on its own can not work, because\n * an isotopologue in the middle of an envelope looks the same whatever the\n * charge and the last one of an envelope has nothing after it.\n *\n * A multiply charged species (a protein electrospray, ...) shows no resolved\n * isotopologues but a ladder of charge states. When such ladders are present\n * (an unresolved spectrum, see `maxClusteredFraction`) they take precedence: an\n * unresolved envelope peak often forms a spurious charge-1 cluster from its\n * neighbours, and the ladder gives the real, much higher charge. A peak that\n * belongs to neither gets no `charge` at all.\n * @param {Array} peaks - all the peaks of the spectrum, sorted by mass\n * @param {object} [options={}]\n * @param {number} [options.min=1] - lowest charge the isotopologue clusters\n * consider\n * @param {number} [options.max=100] - highest charge to consider; shared by the\n * isotopologue clusters and the charge-state ladder (which spans `1` to `max`)\n * @param {number} [options.precision=20] - tolerance on the position of an\n * isotopologue, in ppm (isotopologue clusters)\n * @param {number} [options.minLength=3] - shortest isotopologue series that\n * shows a charge. This is the cluster length, not the ladder's: a ladder has its\n * own `minLength` (default 5) inside `options.ladder`\n * @param {number} [options.minIntensity=0] - peaks under it are noise and take\n * no part in the series\n * @param {string|Array} [options.ionizations='H+'] - the charge carriers a\n * charge-state ladder may show, see `getChargeLadders`\n * @param {number} [options.maxClusteredFraction=0.2] - the charge-state ladders\n * are ignored when the isotopologue clusters already explain more than this\n * fraction of the significant peaks: a resolved spectrum (where the ladders\n * would only be coincidences) is read from its isotopologues alone\n * @param {object} [options.ladder={}] - options forwarded to `getChargeLadders`,\n * kept apart because a ladder is broader than an isotopologue and needs its own\n * tolerances. The `min`/`precision`/`minLength` above are the isotopologue\n * cluster parameters and do not reach the ladder; `max` is shared and caps both,\n * so the ladder has no `maxCharge` of its own\n * @param {number} [options.ladder.tolerance=500] - tolerance on the position of\n * the next charge state, in ppm. Larger than for isotopologues because the charge\n * states of a protein are broad and rarely mass resolved\n * @param {number} [options.ladder.minLength=5] - shortest ladder that shows a\n * charge\n * @param {number} [options.ladder.minRelativeIntensity=0.05] - peaks under this\n * fraction of the most intense one are satellites, adducts or noise and take no\n * part in the ladders\n\n * @returns {Array} copy of `peaks`, with a `charge` when one was found\n */\nfunction getPeaksWithCharge(peaks, options = {}) {\n    const { precision = 20, min: minCharge = 1, max: maxCharge = 100, minLength = 3, minIntensity = 0, ionizations = 'H+', ladder = {}, maxClusteredFraction = 0.2, } = options;\n    const significant = [];\n    for (const peak of peaks) {\n        if (peak.y >= minIntensity)\n            significant.push(peak);\n    }\n    const clustered = (0, getChargeClusters_js_1.getPeaksWithClusterCharge)(significant, {\n        minCharge,\n        maxCharge,\n        precision,\n        minLength,\n    });\n    const masses = new Float64Array(clustered.length);\n    for (let i = 0; i < clustered.length; i++)\n        masses[i] = clustered[i].x;\n    // calculate the percentage of peaks that were clustered with a charge:\n    // when it is too high, the spectrum is resolved and the ladders are only coincidences\n    let clusteredWithCharge = 0;\n    for (const peak of clustered) {\n        if (peak.charge !== undefined)\n            clusteredWithCharge++;\n    }\n    const clusteredFraction = clustered.length > 0 ? clusteredWithCharge / clustered.length : 0;\n    let withLadderCharge = null;\n    if (clusteredFraction <= maxClusteredFraction) {\n        const ladders = (0, getChargeLadders_js_1.getChargeLadders)(peaks, {\n            ionizations,\n            ...ladder,\n            maxCharge,\n        });\n        withLadderCharge = (0, getChargeLadders_js_1.assignLadderCharge)(peaks, ladders, precision);\n    }\n    const peaksWithCharge = [];\n    for (let i = 0; i < peaks.length; i++) {\n        const peak = peaks[i];\n        // when a ladder explains the peak it wins over the isotopologue clusters,\n        // which on an unresolved envelope only see a spurious low charge\n        let charge = withLadderCharge === null ? undefined : withLadderCharge[i].charge;\n        if (charge === undefined) {\n            charge = getChargeAtMass(clustered, masses, peak.x, precision);\n        }\n        peaksWithCharge.push(charge === undefined ? { ...peak } : { ...peak, charge });\n    }\n    return peaksWithCharge;\n}\n/**\n * Charge of the clustered peak lying at a mass, if there is one there.\n * @param {Array} clustered - peaks carrying their charge, sorted by mass\n * @param {import('cheminfo-types').NumberArray} masses - their masses\n * @param {number} targetMass\n * @param {number} precision - in ppm\n * @returns {number|undefined}\n */\nfunction getChargeAtMass(clustered, masses, targetMass, precision) {\n    if (masses.length === 0)\n        return undefined;\n    const index = (0, ml_spectra_processing_1.xFindClosestIndex)(masses, targetMass);\n    const peak = clustered[index];\n    const tolerance = precision * 1e-6 * targetMass;\n    if (Math.abs(peak.x - targetMass) > tolerance)\n        return undefined;\n    return peak.charge;\n}\n//# sourceMappingURL=getPeaksWithCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakChargeBySimilarity = getPeakChargeBySimilarity;\nexports.getMinIntensity = getMinIntensity;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst getPeaksWithCharge_js_1 = require(\"./getPeaksWithCharge.js\");\n/**\n * Evaluate the charge of the peak observed at a mass.\n *\n * The charge is the one of the isotopologue cluster the peak belongs to, see\n * `getChargeClusters`. A peak on its own shows no charge: what shows it is the\n * series of peaks around it, separated by one dalton over the charge.\n * @param {import('./Spectrum.js').Spectrum} spectrum\n * @param {number} targetMass\n * @param {object}   [options={}]\n * @param {number}   [options.minCharge=1]\n * @param {number}   [options.maxCharge=10]\n * @param {number}   [options.precision=20] - tolerance on the position of an\n * isotopologue, in ppm\n * @param {number}   [options.minLength=3] - shortest series that shows a charge\n * @param {number}   [options.minSignalToNoise=10] - a peak under `median` plus\n * `minSignalToNoise` times the standard deviation of the noise takes no part in\n * the series: the position of a maximum of the noise is random and would give a\n * charge to what is only noise. Only for a continuous spectrum, a list of\n * centroids does not describe its noise anymore.\n * @returns {number|undefined} the charge, or undefined when no series of peaks\n * shows one at that mass\n */\nfunction getPeakChargeBySimilarity(spectrum, targetMass, options = {}) {\n    if (!spectrum || spectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    const { minCharge = 1, maxCharge = 10, precision = 20 } = options;\n    const peaks = (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(spectrum.getPeaks({ threshold: 0 }), {\n        ...options,\n        min: minCharge,\n        max: maxCharge,\n        minIntensity: getMinIntensity(spectrum, options),\n    });\n    const masses = new Float64Array(peaks.length);\n    for (let i = 0; i < peaks.length; i++)\n        masses[i] = peaks[i].x;\n    return (0, getPeaksWithCharge_js_1.getChargeAtMass)(peaks, masses, targetMass, precision);\n}\n/**\n * Intensity under which a peak is too close to the noise to say anything about\n * a charge. The peak picking already removes what is under `median + 3 sd`, but\n * a gaussian noise still leaves some of its maxima over it.\n * @param {import('./Spectrum.js').Spectrum} spectrum\n * @param {object} [options={}]\n * @param {number} [options.minSignalToNoise=10]\n * @returns {number}\n */\nfunction getMinIntensity(spectrum, options = {}) {\n    const { minSignalToNoise = 10 } = options;\n    // the intensities of a list of centroids are signal, not noise: their median\n    // and deviation describe the peaks themselves and would remove all of them\n    if (!minSignalToNoise || !spectrum.isContinuous())\n        return 0;\n    if (spectrum.cache.noise === undefined) {\n        spectrum.cache.noise = (0, ml_spectra_processing_1.xNoiseStandardDeviation)(spectrum.data.y);\n    }\n    const { median, sd } = spectrum.cache.noise;\n    return median + minSignalToNoise * sd;\n}\n//# sourceMappingURL=getPeakChargeBySimilarity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isContinuous = isContinuous;\nexports.defaultMaxDeltaX = defaultMaxDeltaX;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * When a spectrum is continous ?\n * - has more than 100 points\n * - deltaX change can not be more than a factor 2\n * - deltaX may not be larger than what `maxDeltaX` allows at that mass\n * - if y is zero it does not count\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.minLength=100]\n * @param {number} [options.relativeHeightThreshold=0.001] // Under this value the\n * @param {number} [options.maxDeltaRatio=3]\n * @param {function} [options.maxDeltaX] - function called with the mass that\n * returns the largest step a profile spectrum may have there. Defaults to\n * `defaultMaxDeltaX`.\n */\nfunction isContinuous(spectrum, options = {}) {\n    const { minLength = 100, maxDeltaRatio = 3, relativeHeightThreshold = 0.001, maxDeltaX = defaultMaxDeltaX, } = options;\n    const minHeight = (0, ml_spectra_processing_1.xMaxValue)(spectrum.data.y) * relativeHeightThreshold;\n    const minRadio = 1 / maxDeltaRatio;\n    const maxRatio = 1 * maxDeltaRatio;\n    if (spectrum.continuous === undefined) {\n        let xs = spectrum.data.x;\n        let ys = spectrum.data.y;\n        if (xs.length < minLength) {\n            spectrum.continuous = false;\n        }\n        else {\n            let previousDelta = xs[1] - xs[0];\n            spectrum.continuous = true;\n            let success = 0;\n            let failed = 0;\n            for (let i = 0; i < xs.length - 1; i++) {\n                if (ys[i] < minHeight || ys[i + 1] < minHeight) {\n                    previousDelta = 0;\n                    continue;\n                }\n                let delta = xs[i + 1] - xs[i];\n                if (previousDelta) {\n                    let ratio = delta / previousDelta;\n                    const deltaLimit = maxDeltaX(xs[i]);\n                    if ((Math.abs(delta) > deltaLimit ||\n                        ratio < minRadio ||\n                        ratio > maxRatio) &&\n                        ys[i] !== 0 &&\n                        ys[i + 1] !== 0) {\n                        failed++;\n                    }\n                    else {\n                        success++;\n                    }\n                }\n                previousDelta = delta;\n            }\n            if (success / failed < 10) {\n                spectrum.continuous = false;\n            }\n        }\n    }\n    return spectrum.continuous;\n}\n/**\n * Largest step a profile spectrum may have around a mass.\n *\n * A time of flight is sampled evenly in time and an orbitrap evenly in\n * frequency, so in both the m/z step grows with the m/z: a MALDI-TOF is sampled\n * every 0.19 Da around m/z 1000 and every 0.47 Da around m/z 6000, and is still\n * a profile spectrum. The step is therefore allowed to grow with the mass,\n * between two bounds:\n * - never under `0.1` Da, so that a spectrum of small molecules keeps the step\n *   it always had\n * - never over `0.6` Da, because the isotopologues of a singly charged ion are\n *   one dalton apart: over that a profile could not describe them, and a list\n *   of centroids would pass for one whatever its mass\n * @param {number} mass\n * @returns {number}\n */\nfunction defaultMaxDeltaX(mass) {\n    return Math.min(0.6, Math.max(0.1, mass * 0.0003));\n}\n//# sourceMappingURL=isContinuous.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm.\n * @param ys - Array of y values.\n * @param xs - Array of X or deltaX.\n * @param options - Options controlling window size, derivative and polynomial order.\n * @returns Array containing the new ys (same length).\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (xs === undefined) {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * Compute the full weights matrix for every position inside the window.\n * @param m - Number of points.\n * @param n - Polynomial grade.\n * @param s - Derivative.\n * @returns Array of Float64Array weight vectors, one per position in the window.\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","/**\n * Compute the `[left, right]` intervals around each peak by locating\n * consecutive extrema (minima / maxima) of the first derivative.\n * @param y - Spectrum y values.\n * @param x - Spectrum x values.\n * @param dY - First derivative of `y`.\n * @param dX - Sign of the x step (positive for increasing x, negative otherwise).\n * @returns `intervalL` / `intervalR` arrays defining each peak's inflection-point bounds.\n */\nexport function getMinMaxIntervalsDy(y, x, dY, dX) {\n    let lastMax = null;\n    let lastMin = null;\n    const intervalL = [];\n    const intervalR = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n    }\n    return { intervalL, intervalR };\n}\n//# sourceMappingURL=getMinMaxIntervals.js.map","/**\n * Find the `minData` index closest to the center of one interval,\n * above the intensity threshold and bounded by the half-width.\n * @param options - Interval, candidate indices and spectrum data.\n * @returns The picked candidate (`possible`) and the last visited index (`lastIndex`).\n */\nexport function tryMatchOneIntervalWithMinData(options) {\n    const { x, lastK, minData, yThreshold, intervalWidth, intervalCenter, yData, } = options;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let possible = -1;\n    let newLastIndex = lastK;\n    for (let k = newLastIndex + 1; k < minData.length; k++) {\n        const centerIndex = minData[k];\n        if (yData[centerIndex] <= yThreshold) {\n            continue;\n        }\n        const deltaX = x[centerIndex];\n        const currentDistance = Math.abs(deltaX - intervalCenter);\n        if (currentDistance < intervalWidth) {\n            if (currentDistance < minDistance) {\n                possible = k;\n            }\n            newLastIndex = k;\n        }\n        if (currentDistance >= minDistance)\n            break;\n        minDistance = currentDistance;\n    }\n    return { lastIndex: newLastIndex, possible };\n}\n//# sourceMappingURL=tryMatchOneIntervalWithMinData.js.map","import { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Build the list of detected peaks by matching each `[left, right]` interval\n * with the best candidate index from `minData`.\n * @param options - Intervals, candidate indices and spectrum data.\n * @returns The detected peaks.\n */\nexport function getPeakFromIntervals(options) {\n    let lastK = -1;\n    const peaks = [];\n    const { x, ddY, yData, yThreshold, intervalR, intervalL, minData } = options;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        const { possible, lastIndex } = tryMatchOneIntervalWithMinData({\n            x,\n            lastK,\n            minData,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            yData,\n        });\n        if (possible !== -1) {\n            const centerIndex = minData[possible];\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[centerIndex],\n                y: yData[centerIndex],\n                width,\n                index: centerIndex,\n                ddY: ddY[centerIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n        lastK = lastIndex;\n    }\n    return peaks;\n}\n//# sourceMappingURL=getPeaksFromIntervals.js.map","/**\n * Finds the indices where the first derivative crosses zero (sign change),\n * which are potential peak positions. This function does not detect zero-crossings\n * in regions with consecutive zero values in the derivative (flat regions).\n * @param input - Object containing the y values and their first derivative (dY).\n * @returns Array of indices where the first derivative crosses zero (excluding consecutive zeros).\n */\nexport function xGetCrossZeroPoints(input) {\n    const { y, dY } = input;\n    const crossDy = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if (isLessAndGreaterThanZero(dY[i], dY[i + 1])) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        else if (\n        // Handle exact zero\n        dY[i] === 0 &&\n            isLessAndGreaterThanZero(dY[i - 1], dY[i + 1])) {\n            crossDy.push(i);\n        }\n    }\n    return crossDy;\n}\nfunction isLessAndGreaterThanZero(back, next) {\n    return (back < 0 && next > 0) || (back > 0 && next < 0);\n}\n//# sourceMappingURL=xGetCrossZeroPoints.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nimport { xGetCrossZeroPoints } from \"./xGetCrossZeroPoints.js\";\n/**\n * Detect peaks using zero-crossings of the first derivative.\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function firstDerivative(input) {\n    const { y, x, dY, dX, yData, yThreshold, ddY } = input;\n    const crossDy = xGetCrossZeroPoints(input);\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    return getPeakFromIntervals({\n        minData: crossDy,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=firstDerivative.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2, ROOT_PI_OVER_LN2, } from \"../../../util/constants.js\";\nimport erfinv from \"../../../util/erfinv.js\";\nexport class Gaussian {\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = gaussianDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\n    }\n}\n/**\n * Calculate the peak height for a given area and fwhm.\n * @param options - fwhm, area, and optional sd.\n * @returns the peak height.\n */\nexport function calculateGaussianHeight(options) {\n    const { area = 1, sd } = options;\n    let { fwhm = 500 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Evaluate the gaussian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the intensity at x.\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (x / fwhm) ** 2);\n}\n/**\n * Analytical value and partial derivatives of the gaussian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function gaussianDerivative(x, fwhm) {\n    const fct = gaussianFct(x, fwhm);\n    const dx = ((2 * GAUSSIAN_EXP_FACTOR * x) / (fwhm * fwhm)) * fct;\n    const dFwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) / (fwhm * fwhm * fwhm)) * fct;\n    return { fct, dx, dFwhm };\n}\n/**\n * Convert inflection-point width to full width at half maximum.\n * @param width - width between inflection points.\n * @returns full width at half maximum.\n */\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\n/**\n * Convert full width at half maximum to inflection-point width.\n * @param fwhm - full width at half maximum.\n * @returns width between inflection points.\n */\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\n/**\n * Calculate the area under a gaussian peak.\n * @param options - fwhm, height, and optional sd.\n * @returns the area.\n */\nexport function getGaussianArea(options) {\n    const { sd, height = 1 } = options;\n    let { fwhm = 500 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\n/**\n * Calculate the half-width factor corresponding to a given area coverage fraction.\n * @param area - target area fraction (0–1). Defaults to `0.9999`.\n * @returns the factor by which to multiply fwhm to cover the given area.\n */\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\n/**\n * Generate an intensity array for a gaussian shape.\n * @param shape - gaussian shape parameters (fwhm, sd).\n * @param options - sampling options (length, factor, height).\n * @returns Float64Array of intensity values.\n */\nexport function getGaussianData(shape = {}, options = {}) {\n    const { sd } = shape;\n    let { fwhm = 500 } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    const { factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 2 ** 25 - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        const value = gaussianFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n/**\n * Approximate inverse error function.\n * @param x - value in the range (-1, 1).\n * @returns erfinv(x).\n * @see https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n */\nexport default function erfinv(x) {\n    const a = 0.147;\n    if (x === 0)\n        return 0;\n    const ln1MinusXSqrd = Math.log(1 - x * x);\n    const lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    const firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    const secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_THREE } from \"../../../util/constants.js\";\nexport class Lorentzian {\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = lorentzianDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + fwhm ** 2);\n};\n/**\n * Analytical value and partial derivatives of the lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function lorentzianDerivative(x, fwhm) {\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const fct = (fwhm * fwhm) / denominator;\n    const dx = (-8 * x * fwhm * fwhm) / (denominator * denominator);\n    const dFwhm = (8 * fwhm * x * x) / (denominator * denominator);\n    return { fct, dx, dFwhm };\n}\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nconst lorentzianQuantile = (p) => Math.tan(Math.PI * (p - 0.5));\nexport const getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    return ((lorentzianQuantile(1 - halfResidual) - lorentzianQuantile(halfResidual)) /\n        2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    const { fwhm = 500 } = shape;\n    const { factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 2 ** 25 - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        const value = lorentzianFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from \"../lorentzian/Lorentzian.js\";\nexport class LorentzianDispersive {\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianDispersiveFct(x, this.fwhm);\n    }\n    getArea() {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = lorentzianDispersiveDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\n/**\n * Analytical value and partial derivatives of the dispersive lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function lorentzianDispersiveDerivative(x, fwhm) {\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const fct = (2 * fwhm * x) / denominator;\n    const dx = (2 * fwhm * (fwhm * fwhm - 4 * x * x)) / (denominator * denominator);\n    const dFwhm = (2 * x * (4 * x * x - fwhm * fwhm)) / (denominator * denominator);\n    return { fct, dx, dFwhm };\n}\nexport const getLorentzianDispersiveData = (shape = {}, options = {}) => {\n    const { fwhm = 500 } = shape;\n    const { factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 2 ** 25 - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        const value = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = -value;\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { getGaussianFactor } from \"../gaussian/Gaussian.js\";\nimport { getLorentzianFactor } from \"../lorentzian/Lorentzian.js\";\n/**\n * Find the k factor for a pseudo-Voigt distribution such that the\n * cumulative probability pPseudoVoigt(k, mu) equals `pTarget`.\n *\n * Uses a simple bisection search (with exponential bracketing) to\n * invert the pseudo-Voigt cumulative function. Special cases:\n * - mu === 1 -> reduces to the gaussian case\n * - mu === 0 -> reduces to the lorentzian case\n * @param pTarget - Target cumulative probability in (0,1)\n * @param mu - Gaussian fraction in [0,1]\n * @param tol - Convergence tolerance\n * @param maxIter - Maximum number of bisection iterations\n * @returns the factor k such that pPseudoVoigt(k, mu) ~= pTarget\n */\nexport function pseudoVoigtFindFactor(pTarget, mu, tol = 1e-9, maxIter = 200) {\n    if (pTarget <= 0 || pTarget >= 1) {\n        throw new RangeError('pTarget must be in (0,1)');\n    }\n    if (mu === 1) {\n        return getGaussianFactor(pTarget);\n    }\n    else if (mu === 0) {\n        return getLorentzianFactor(pTarget);\n    }\n    // bisection\n    let lo = 0;\n    let hi = 10;\n    let it = 0;\n    while (pPseudoVoigt(hi, mu) < pTarget && it++ < 200)\n        hi *= 2;\n    for (let i = 0; i < maxIter; i++) {\n        const mid = 0.5 * (lo + hi);\n        const val = pPseudoVoigt(mid, mu);\n        if (Math.abs(val - pTarget) < tol)\n            return mid;\n        if (val < pTarget) {\n            lo = mid;\n        }\n        else {\n            hi = mid;\n        }\n    }\n    return 0.5 * (lo + hi);\n}\nfunction erf(x) {\n    const sign = x < 0 ? -1 : 1;\n    x = Math.abs(x);\n    const a1 = 0.254829592;\n    const a2 = -0.284496736;\n    const a3 = 1.421413741;\n    const a4 = -1.453152027;\n    const a5 = 1.061405429;\n    const p = 0.3275911;\n    const t = 1 / (1 + p * x);\n    const y = 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n    return sign * y;\n}\nconst sqrtLn2 = Math.sqrt(Math.log(2));\nfunction pGaussian(k) {\n    return erf(k * sqrtLn2);\n}\nfunction pLorentz(k) {\n    return (2 / Math.PI) * Math.atan(k);\n}\nfunction pPseudoVoigt(k, mu) {\n    return (1 - mu) * pLorentz(k) + mu * pGaussian(k);\n}\n//# sourceMappingURL=computeFactor.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from \"../../../util/constants.js\";\nimport { gaussianFct } from \"../gaussian/Gaussian.js\";\nimport { lorentzianFct } from \"../lorentzian/Lorentzian.js\";\nimport { pseudoVoigtFindFactor } from \"./computeFactor.js\";\nexport class PseudoVoigt {\n    fwhm;\n    /**\n     * Ratio of gaussian contribution in the shape\n     * @default 0.5\n     */\n    mu;\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area, this.mu);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm, dMu } = pseudoVoigtDerivative(x, this.fwhm, this.mu);\n        return { fct, dx, parameters: [dFwhm, dMu] };\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    const { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\n/**\n * Analytical value and partial derivatives of the pseudo-Voigt function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @param mu - ratio of gaussian contribution in the shape.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhm` (`dFwhm`) and `mu` (`dMu`).\n */\nexport function pseudoVoigtDerivative(x, fwhm, mu) {\n    // gaussian and lorentzian derivative math is inlined (rather than calling\n    // gaussianDerivative / lorentzianDerivative) to allocate a single object on\n    // this hot path; the sub-calls would allocate three.\n    const e = Math.exp(GAUSSIAN_EXP_FACTOR * (x / fwhm) ** 2);\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const lorentz = (fwhm * fwhm) / denominator;\n    const dEdt = ((2 * GAUSSIAN_EXP_FACTOR * x) / (fwhm * fwhm)) * e;\n    const dLdt = (-8 * x * fwhm * fwhm) / (denominator * denominator);\n    const dEdfwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) / (fwhm * fwhm * fwhm)) * e;\n    const dLdfwhm = (8 * fwhm * x * x) / (denominator * denominator);\n    return {\n        fct: (1 - mu) * lorentz + mu * e,\n        dx: (1 - mu) * dLdt + mu * dEdt,\n        dFwhm: (1 - mu) * dLdfwhm + mu * dEdfwhm,\n        dMu: e - lorentz,\n    };\n}\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return pseudoVoigtFindFactor(area, mu);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    const { fwhm = 500, mu = 0.5 } = shape;\n    const { factor = getPseudoVoigtFactor(0.999, mu) } = options;\n    let { length, height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }) } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 2 ** 25 - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        const value = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { GAUSSIAN_EXP_FACTOR } from \"../../../util/constants.js\";\nimport { calculatePseudoVoigtHeight, getPseudoVoigtArea, getPseudoVoigtData, getPseudoVoigtFactor, pseudoVoigtFct, pseudoVoigtFwhmToWidth, pseudoVoigtWidthToFWHM, } from \"../pseudoVoigt/PseudoVoigt.js\";\n/**\n * TCH-style pseudo-Voigt where gaussian and lorentzian widths are independent.\n * The effective fwhm and mixing parameter mu are derived from fwhmG and fwhmL\n * via the Thompson–Cox–Hastings approximation.\n */\nexport class PseudoVoigtTCH {\n    _fwhmG;\n    _fwhmL;\n    _fwhm;\n    _mu;\n    _lorentzianWidthFraction;\n    constructor(options = {}) {\n        const { fwhmG, fwhmL, fwhm, mu = 0.5 } = options;\n        this._mu = mu;\n        this._fwhm = 0;\n        this._fwhmG = 0;\n        this._fwhmL = 0;\n        this._lorentzianWidthFraction = lorentzianWidthFraction(1 - mu);\n        if (fwhmG && fwhmL) {\n            this._fwhmG = fwhmG;\n            this.fwhmL = fwhmL;\n        }\n        else if (fwhm) {\n            this.fwhm = fwhm;\n        }\n    }\n    set fwhmG(value) {\n        const effectiveFwhm = computeEffectiveWidth(value, this._fwhmL);\n        const lorentzianFraction = this._fwhmL / effectiveFwhm;\n        this._fwhm = effectiveFwhm;\n        this._mu =\n            1 -\n                (1.36603 * lorentzianFraction -\n                    0.47719 * lorentzianFraction * lorentzianFraction +\n                    0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n        this._fwhmG = value;\n        this._lorentzianWidthFraction = lorentzianFraction;\n    }\n    get fwhmG() {\n        return this._fwhmG;\n    }\n    set fwhmL(value) {\n        const effectiveFwhm = computeEffectiveWidth(this._fwhmG, value);\n        const lorentzianFraction = value / effectiveFwhm;\n        this._fwhm = effectiveFwhm;\n        this._mu =\n            1 -\n                (1.36603 * lorentzianFraction -\n                    0.47719 * lorentzianFraction * lorentzianFraction +\n                    0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n        this._fwhmL = value;\n        this._lorentzianWidthFraction = lorentzianFraction;\n    }\n    get fwhmL() {\n        return this._fwhmL;\n    }\n    set mu(value) {\n        const lorentzianFraction = lorentzianWidthFraction(1 - value);\n        this._lorentzianWidthFraction = lorentzianFraction;\n        this._fwhmL = this._fwhm * lorentzianFraction;\n        this._fwhmG = this._fwhm * (1 - lorentzianFraction);\n        this._mu = value;\n    }\n    get mu() {\n        return this._mu;\n    }\n    set fwhm(value) {\n        const lorentzianFraction = this._lorentzianWidthFraction || lorentzianWidthFraction(1 - this._mu);\n        this._fwhmL = value * lorentzianFraction;\n        this._fwhmG = value * (1 - lorentzianFraction);\n        this._fwhm = value;\n    }\n    get fwhm() {\n        return this._fwhm;\n    }\n    fwhmToWidth(fwhm = this._fwhm, mu = this._mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this._mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this._fwhm, this._mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this._fwhm, height, mu: this._mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area, this._mu);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this._fwhm,\n            mu: this._mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({\n            fwhm: this._fwhm,\n            mu: this._mu,\n            area,\n        });\n    }\n    getParameters() {\n        return ['fwhmG', 'fwhmL'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhmG, dFwhmL } = pseudoVoigtTCHDerivative(x, this._fwhmG, this._fwhmL);\n        return { fct, dx, parameters: [dFwhmG, dFwhmL] };\n    }\n}\n/**\n * Analytical value and partial derivatives of the TCH pseudo-Voigt function centered at x=0.\n * The effective fwhm `F` and mixing `mu` are functions of `fwhmG` and `fwhmL`, so the\n * derivatives chain `∂fct/∂F` and `∂fct/∂mu` through `∂F/∂·` and `∂mu/∂·`.\n * @param x - position at which to evaluate.\n * @param fwhmG - full width at half maximum of the gaussian component.\n * @param fwhmL - full width at half maximum of the lorentzian component.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhmG` (`dFwhmG`) and `fwhmL` (`dFwhmL`).\n */\nexport function pseudoVoigtTCHDerivative(x, fwhmG, fwhmL) {\n    const effectiveFwhm = computeEffectiveWidth(fwhmG, fwhmL);\n    const w = effectiveFwhm ** 5; // the polynomial under the 1/5 power\n    // ∂w/∂fwhmG and ∂w/∂fwhmL (derivatives of the TCH width polynomial).\n    const dwDfwhmG = 5 * fwhmG ** 4 +\n        10.77076 * fwhmG ** 3 * fwhmL +\n        7.28529 * fwhmG ** 2 * fwhmL ** 2 +\n        8.94326 * fwhmG * fwhmL ** 3 +\n        0.07842 * fwhmL ** 4;\n    const dwDfwhmL = 2.69269 * fwhmG ** 4 +\n        4.85686 * fwhmG ** 3 * fwhmL +\n        13.41489 * fwhmG ** 2 * fwhmL ** 2 +\n        0.31368 * fwhmG * fwhmL ** 3 +\n        5 * fwhmL ** 4;\n    // F = w^0.2  =>  ∂F/∂· = 0.2 * F / w * ∂w/∂·\n    const dFwhmDfwhmG = (0.2 * effectiveFwhm * dwDfwhmG) / w;\n    const dFwhmDfwhmL = (0.2 * effectiveFwhm * dwDfwhmL) / w;\n    // lorentzian width fraction L = fwhmL / F\n    const lorentzianFraction = fwhmL / effectiveFwhm;\n    const dLorentzianFractionDfwhmG = (-fwhmL / (effectiveFwhm * effectiveFwhm)) * dFwhmDfwhmG;\n    const dLorentzianFractionDfwhmL = 1 / effectiveFwhm - (fwhmL / (effectiveFwhm * effectiveFwhm)) * dFwhmDfwhmL;\n    // mu = 1 - (1.36603 L - 0.47719 L^2 + 0.11116 L^3)\n    const dPolyDfraction = 1.36603 -\n        0.95438 * lorentzianFraction +\n        0.33348 * lorentzianFraction * lorentzianFraction;\n    const dMuDfwhmG = -dPolyDfraction * dLorentzianFractionDfwhmG;\n    const dMuDfwhmL = -dPolyDfraction * dLorentzianFractionDfwhmL;\n    const mu = 1 -\n        (1.36603 * lorentzianFraction -\n            0.47719 * lorentzianFraction * lorentzianFraction +\n            0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n    // pseudoVoigt value and its ∂/∂x, ∂/∂F (dFwhm), ∂/∂mu (dMu) at the effective\n    // fwhm, inlined to allocate a single object on this hot path.\n    const e = Math.exp(GAUSSIAN_EXP_FACTOR * (x / effectiveFwhm) ** 2);\n    const denominator2 = 4 * x * x + effectiveFwhm * effectiveFwhm;\n    const lorentz = (effectiveFwhm * effectiveFwhm) / denominator2;\n    const dEdt = ((2 * GAUSSIAN_EXP_FACTOR * x) / (effectiveFwhm * effectiveFwhm)) * e;\n    const dLdt = (-8 * x * effectiveFwhm * effectiveFwhm) / (denominator2 * denominator2);\n    const dEdfwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) /\n        (effectiveFwhm * effectiveFwhm * effectiveFwhm)) *\n        e;\n    const dLdfwhm = (8 * effectiveFwhm * x * x) / (denominator2 * denominator2);\n    const dFwhm = (1 - mu) * dLdfwhm + mu * dEdfwhm;\n    const dMu = e - lorentz;\n    return {\n        fct: (1 - mu) * lorentz + mu * e,\n        dx: (1 - mu) * dLdt + mu * dEdt,\n        dFwhmG: dFwhm * dFwhmDfwhmG + dMu * dMuDfwhmG,\n        dFwhmL: dFwhm * dFwhmDfwhmL + dMu * dMuDfwhmL,\n    };\n}\n/**\n * Compute the effective FWHM from gaussian and lorentzian component widths\n * using the Thompson–Cox–Hastings approximation.\n * @param fwhmG - gaussian component FWHM.\n * @param fwhmL - lorentzian component FWHM.\n * @returns effective combined FWHM.\n */\nfunction computeEffectiveWidth(fwhmG, fwhmL) {\n    return ((fwhmG ** 5 +\n        2.69269 * fwhmG ** 4 * fwhmL +\n        2.42843 * fwhmG ** 3 * fwhmL ** 2 +\n        4.47163 * fwhmG ** 2 * fwhmL ** 3 +\n        0.07842 * fwhmG * fwhmL ** 4 +\n        fwhmL ** 5) **\n        0.2);\n}\n/**\n * Solve for the lorentzian width fraction fwhmL/fwhm given lorentzianFraction = 1 - mu,\n * using Newton's method on: 1.36603·x - 0.47719·x² + 0.11116·x³ = lorentzianFraction.\n * @param lorentzianFraction - TCH lorentzian mixing parameter (= 1 - mu).\n * @returns the lorentzian width fraction fwhmL/fwhm.\n */\nfunction lorentzianWidthFraction(lorentzianFraction) {\n    let fraction = lorentzianFraction;\n    for (let i = 0; i < 6; i++) {\n        const f = 1.36603 * fraction -\n            0.47719 * fraction * fraction +\n            0.11116 * fraction * fraction * fraction -\n            lorentzianFraction;\n        const df = 1.36603 - 2 * 0.47719 * fraction + 3 * 0.11116 * fraction * fraction;\n        fraction -= f / df;\n    }\n    return fraction;\n}\n//# sourceMappingURL=PseudoVoigtTCH.js.map","import { ROOT_THREE } from \"../../../util/constants.js\";\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * {@link https://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html}\n */\nexport class GeneralizedLorentzian {\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    /**\n     * kurtosis parameter of the shape, between -1 to 2\n     * @default 1\n     */\n    gamma;\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm, dGamma } = generalizedLorentzianDerivative(x, this.fwhm, this.gamma);\n        return { fct, dx, parameters: [dFwhm, dGamma] };\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * Calculate the area under a generalized Lorentzian peak (integral from Mathematica).\n * @param options - shape parameters including fwhm, height, and gamma.\n * @returns the area under the peak.\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\n/**\n * Analytical value and partial derivatives of the generalized lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @param gamma - kurtosis parameter of the shape.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhm` (`dFwhm`) and `gamma` (`dGamma`).\n */\nexport function generalizedLorentzianDerivative(x, fwhm, gamma) {\n    const u = ((2 * x) / fwhm) ** 2;\n    const lorentzian = 1 / (1 + u); // A\n    const rational = (1 + u / 2) / (1 + u + u * u); // B\n    const fct = (1 - gamma) * lorentzian + gamma * rational;\n    // dA/du and dB/du\n    const dLorentzianDu = -1 / ((1 + u) * (1 + u));\n    const denominator = 1 + u + u * u;\n    const dRationalDu = -(0.5 + 2 * u + 0.5 * u * u) / (denominator * denominator);\n    const dFctDu = (1 - gamma) * dLorentzianDu + gamma * dRationalDu;\n    const duDx = (8 * x) / (fwhm * fwhm);\n    const duDfwhm = (-8 * x * x) / (fwhm * fwhm * fwhm);\n    const dx = dFctDu * duDx;\n    const dFwhm = dFctDu * duDfwhm;\n    const dGamma = rational - lorentzian; // B - A\n    return { fct, dx, dFwhm, dGamma };\n}\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nconst generalizedLorentzianQuantile = (p) => Math.tan(Math.PI * (p - 0.5));\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    return ((generalizedLorentzianQuantile(1 - halfResidual) -\n        generalizedLorentzianQuantile(halfResidual)) /\n        2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    const { fwhm = 500, gamma = 1 } = shape;\n    const { factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 2 ** 25 - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        const value = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { GAUSSIAN_EXP_FACTOR } from \"../../../util/constants.js\";\nimport { gaussianFwhmToWidth, gaussianWidthToFWHM, getGaussianFactor, } from \"../../1d/gaussian/Gaussian.js\";\nexport class Gaussian2D {\n    fwhmX;\n    fwhmY;\n    constructor(options = {}) {\n        const { sd } = options;\n        let { fwhm = 20 } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * ((x / xFWHM) ** 2 + (y / yFWHM) ** 2));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    const { sd } = shape;\n    let { fwhm = 50 } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    const { height = calculateGaussian2DHeight({ fwhm, volume: 1 }) } = options;\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 } } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), 2 ** 25 - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    const { sd, volume = 1 } = options;\n    let { fwhm = 50 } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    const { sd, height = 1 } = options;\n    let { fwhm = 50 } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        const sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from \"./gaussian/Gaussian.js\";\nimport { GeneralizedLorentzian } from \"./generalizedLorentzian/GeneralizedLorentzian.js\";\nimport { Lorentzian } from \"./lorentzian/Lorentzian.js\";\nimport { LorentzianDispersive } from \"./lorentzianDispersive/LorentzianDispersive.js\";\nimport { PseudoVoigt } from \"./pseudoVoigt/PseudoVoigt.js\";\nimport { PseudoVoigtTCH } from \"./pseudoVoigtTCH/PseudoVoigtTCH.js\";\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'pseudoVoigtTCH':\n            return new PseudoVoigtTCH(shape);\n        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default:\n            throw new Error(`Unknown distribution ${kind}`);\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from \"./gaussian2D/Gaussian2D.js\";\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default:\n            throw new Error(`Unknown distribution ${kind}`);\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","/**\n * Asserts that value is truthy.\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message || 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","import { xMean } from 'ml-spectra-processing';\nimport { assert } from \"./assert.js\";\n/**\n * Build an optimization layout mapping actual per-peak parameter slots\n * to optimizer variables. The layout describes slots, grouped/shared\n * variables, variable bounds/initials, and provides a helper to\n * materialize actual peak parameter values from a variable vector.\n * @param internalPeaks - normalized internal peaks with parameter indices\n * @param peaks - original peak objects (for per-peak optimize flags)\n * @param options - user `OptimizeOptions`, may contain `linkedParameters`\n * @param yScale - y normalization factor (used when converting offsets)\n * @returns an `OptimizationLayout` describing variables and slots\n */\nexport function buildOptimizationLayout(internalPeaks, peaks, options, yScale = 1) {\n    const slots = buildParameterSlots(internalPeaks, peaks, options);\n    const variables = buildOptimizationVariables(slots, options.linkedParameters, yScale);\n    const variableMin = new Float64Array(variables.length);\n    const variableMax = new Float64Array(variables.length);\n    const variableInit = new Float64Array(variables.length);\n    const variableGrad = new Float64Array(variables.length);\n    const freeIndices = [];\n    for (let i = 0; i < variables.length; i++) {\n        const variable = variables[i];\n        variableMin[i] = variable.min;\n        variableMax[i] = variable.max;\n        variableInit[i] = variable.init;\n        variableGrad[i] = variable.gradientDifference;\n        if (variable.optimize) {\n            freeIndices.push(i);\n        }\n    }\n    return {\n        slots,\n        variables,\n        freeIndices,\n        variableMin,\n        variableMax,\n        variableInit,\n        variableGrad,\n        variableToPeakValues(variableValues) {\n            const actualValues = new Array(slots.length);\n            for (let i = 0; i < variables.length; i++) {\n                const variableValue = variableValues[i];\n                const members = variables[i].members;\n                for (const member of members) {\n                    actualValues[member.actualIndex] =\n                        variableValue * member.factor + member.offset;\n                }\n            }\n            return actualValues;\n        },\n    };\n}\n/**\n * Builds concrete parameter slots for each peak parameter.\n * @param internalPeaks - normalized peaks containing parameter metadata\n * @param peaks - original peaks used to resolve optimize flags\n * @param options - optimization options with parameter settings\n * @returns flattened parameter slots across all peaks\n */\nfunction buildParameterSlots(internalPeaks, peaks, options) {\n    const slots = [];\n    for (let peakIndex = 0; peakIndex < internalPeaks.length; peakIndex++) {\n        const internalPeak = internalPeaks[peakIndex];\n        for (let i = 0; i < internalPeak.parameters.length; i++) {\n            const parameter = internalPeak.parameters[i];\n            slots.push({\n                actualIndex: internalPeak.fromIndex + i,\n                peakIndex,\n                peakId: internalPeak.id,\n                parameter,\n                init: internalPeak.propertiesValues.init[i],\n                min: internalPeak.propertiesValues.min[i],\n                max: internalPeak.propertiesValues.max[i],\n                gradientDifference: internalPeak.propertiesValues.gradientDifference[i],\n                optimize: getOptimizeFlag(peaks[peakIndex], parameter, options),\n            });\n        }\n    }\n    return slots;\n}\n/**\n * Builds optimization variables from concrete parameter slots.\n * @param slots - flattened per-peak parameter slots\n * @param linkedParameters - optional linked parameter groups\n * @param yScale - y normalization factor for y-offset conversion\n * @returns sorted optimization variables ready for the optimizer\n */\nfunction buildOptimizationVariables(slots, linkedParameters, yScale) {\n    const groupedActualIndices = new Set();\n    const variables = [];\n    const slotLookup = new Map();\n    const idToIndices = new Map();\n    for (const slot of slots) {\n        slotLookup.set(getSlotKey(slot.peakIndex, slot.parameter), slot);\n        if (slot.peakId) {\n            const indices = idToIndices.get(slot.peakId) ?? [];\n            if (!indices.includes(slot.peakIndex)) {\n                indices.push(slot.peakIndex);\n            }\n            idToIndices.set(slot.peakId, indices);\n        }\n    }\n    for (const linkedParameter of linkedParameters ?? []) {\n        variables.push(buildLinkedVariable(linkedParameter, slotLookup, groupedActualIndices, idToIndices, yScale));\n    }\n    for (const slot of slots) {\n        if (groupedActualIndices.has(slot.actualIndex)) {\n            continue;\n        }\n        variables.push({\n            sortKey: slot.actualIndex,\n            parameter: slot.parameter,\n            init: slot.init,\n            min: slot.min,\n            max: slot.max,\n            gradientDifference: slot.gradientDifference,\n            optimize: slot.optimize,\n            members: [\n                {\n                    actualIndex: slot.actualIndex,\n                    peakIndex: slot.peakIndex,\n                    parameter: slot.parameter,\n                    factor: 1,\n                    offset: 0,\n                },\n            ],\n        });\n    }\n    variables.sort((a, b) => a.sortKey - b.sortKey);\n    return variables.map(({ sortKey: _sortKey, ...variable }) => variable);\n}\nfunction buildLinkedVariable(linkedParameter, slotLookup, groupedActualIndices, idToIndices, yScale) {\n    if (linkedParameter.peaks.length === 0) {\n        throw new Error(`Linked parameter for ${linkedParameter.parameter} must contain at least one peak`);\n    }\n    const resolvedMembers = linkedParameter.peaks.map((peak) => {\n        const slot = resolveLinkedSlot(peak, linkedParameter.parameter, slotLookup, idToIndices);\n        if (groupedActualIndices.has(slot.actualIndex)) {\n            throw new Error(`Peak ${String(peak.id)} parameter ${linkedParameter.parameter} is already linked`);\n        }\n        return {\n            slot,\n            factor: getFactor(peak, linkedParameter.parameter),\n            offset: getOffset(peak, linkedParameter.parameter, yScale),\n        };\n    });\n    const memberActualIndices = new Set();\n    for (const member of resolvedMembers) {\n        if (memberActualIndices.has(member.slot.actualIndex)) {\n            throw new Error(`Linked parameter for ${linkedParameter.parameter} contains the same peak more than once`);\n        }\n        memberActualIndices.add(member.slot.actualIndex);\n    }\n    const firstMember = resolvedMembers[0];\n    let sharedMin = Number.NEGATIVE_INFINITY;\n    let sharedMax = Number.POSITIVE_INFINITY;\n    const optimize = firstMember.slot.optimize;\n    const sharedInitCandidates = [];\n    for (const member of resolvedMembers) {\n        if (member.slot.optimize !== optimize) {\n            throw new Error(`Linked parameter ${linkedParameter.parameter} must use a consistent optimize flag across all members`);\n        }\n        if (member.slot.min > member.slot.max) {\n            throw new Error(`Linked parameter ${linkedParameter.parameter} has incompatible bounds across its members`);\n        }\n        const variableBounds = getMemberVariableBounds(member);\n        sharedMin = Math.max(sharedMin, variableBounds.min);\n        sharedMax = Math.min(sharedMax, variableBounds.max);\n        sharedInitCandidates.push((member.slot.init - member.offset) / member.factor);\n    }\n    if (sharedMin > sharedMax) {\n        throw new Error(`Linked parameter ${linkedParameter.parameter} has incompatible bounds across its members`);\n    }\n    for (const member of resolvedMembers) {\n        groupedActualIndices.add(member.slot.actualIndex);\n    }\n    return {\n        sortKey: Math.min(...resolvedMembers.map((member) => member.slot.actualIndex)),\n        parameter: linkedParameter.parameter,\n        init: xMean(sharedInitCandidates),\n        min: sharedMin,\n        max: sharedMax,\n        gradientDifference: Math.min(...resolvedMembers.map((m) => Math.abs(m.slot.gradientDifference))),\n        optimize,\n        members: resolvedMembers.map((member) => ({\n            actualIndex: member.slot.actualIndex,\n            peakIndex: member.slot.peakIndex,\n            parameter: member.slot.parameter,\n            factor: member.factor,\n            offset: member.offset,\n        })),\n    };\n}\nfunction resolveLinkedSlot(peak, parameter, slotLookup, idToIndices) {\n    const peakIndex = typeof peak.id === 'number'\n        ? peak.id\n        : resolvePeakIndexById(peak.id, idToIndices);\n    if (!Number.isInteger(peakIndex) || peakIndex < 0) {\n        throw new Error(`Invalid peak reference ${String(peak.id)}`);\n    }\n    const slot = slotLookup.get(getSlotKey(peakIndex, parameter));\n    if (!slot) {\n        throw new Error(`Unknown parameter ${parameter} for peak ${String(peak.id)}`);\n    }\n    return slot;\n}\nfunction resolvePeakIndexById(peakId, idToIndices) {\n    const indices = idToIndices.get(peakId);\n    if (!indices || indices.length === 0) {\n        throw new Error(`Unknown peak id ${peakId}`);\n    }\n    if (new Set(indices).size > 1) {\n        throw new Error(`Peak id ${peakId} is ambiguous because it is used by multiple peaks`);\n    }\n    return indices[0];\n}\nfunction getFactor(peak, parameter) {\n    const factor = peak.factor ?? 1;\n    if (!Number.isFinite(factor) || factor === 0) {\n        throw new Error(`Linked parameter ${parameter} must use a non-zero finite factor`);\n    }\n    return factor;\n}\nfunction getOffset(peak, parameter, yScale) {\n    const offset = peak.offset ?? 0;\n    if (!Number.isFinite(offset)) {\n        throw new Error(`Linked parameter ${parameter} must use a finite offset`);\n    }\n    if (parameter === 'y') {\n        return offset / yScale;\n    }\n    return offset;\n}\nfunction getMemberVariableBounds(member) {\n    const transformedMin = (member.slot.min - member.offset) / member.factor;\n    const transformedMax = (member.slot.max - member.offset) / member.factor;\n    return {\n        min: Math.min(transformedMin, transformedMax),\n        max: Math.max(transformedMin, transformedMax),\n    };\n}\nfunction getOptimizeFlag(peak, parameter, options) {\n    assert(peak);\n    let optimizeFlag = true;\n    const perPeakParam = peak.parameters?.[parameter];\n    const globalParam = options.parameters?.[parameter];\n    if (perPeakParam?.optimize !== undefined) {\n        if (typeof perPeakParam.optimize === 'function') {\n            optimizeFlag = perPeakParam.optimize(peak);\n        }\n        else {\n            const { optimize = true } = perPeakParam;\n            optimizeFlag = optimize;\n        }\n    }\n    else if (globalParam?.optimize !== undefined) {\n        if (typeof globalParam.optimize === 'function') {\n            optimizeFlag = globalParam.optimize(peak);\n        }\n        else {\n            const { optimize = true } = globalParam;\n            optimizeFlag = optimize;\n        }\n    }\n    return optimizeFlag;\n}\nfunction getSlotKey(peakIndex, parameter) {\n    return `${peakIndex}:${parameter}`;\n}\n//# sourceMappingURL=buildOptimizationLayout.js.map","/**\n * Reconstruct user-facing peak objects from internal peaks and a full\n * actual-parameter vector.\n * @template T - original Peak type\n * @param internalPeaks - internal peaks produced by `getInternalPeaks`\n * @param actualValues - flattened actual parameter values (not normalized for Y)\n * @param yScale - normalization factor previously applied to Y values\n * @returns array of optimized peaks with reconstructed shapes and ids\n */\nexport function reconstructPeaks(internalPeaks, actualValues, yScale) {\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = actualValues[fromIndex];\n        newPeak.y = actualValues[fromIndex + 1] * yScale;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = actualValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return newPeaks;\n}\n//# sourceMappingURL=reconstructPeaks.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (peak) => (peak.y < 0 ? -1.1 : 0),\n        max: (peak) => (peak.y < 0 ? 0 : 1.1),\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    fwhmG: {\n        init: (peak, peakShape) => peakShape.fwhm * 0.6,\n        min: (peak, peakShape) => peakShape.fwhm * 0.6 * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 0.6 * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 0.6 * 2e-3,\n    },\n    fwhmL: {\n        init: (peak, peakShape) => peakShape.fwhm * 0.4,\n        min: (peak, peakShape) => peakShape.fwhm * 0.4 * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 0.4 * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 0.4 * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param yScale\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, yScale, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    for (const originalPeak of peaks) {\n        const normalizedPeak = {\n            ...originalPeak,\n            y: originalPeak.y / yScale,\n        };\n        const peak = normalizedPeak;\n        const { id, shape = options.shape || { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValuesInternal = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue !== undefined) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, yScale);\n                    propertiesValuesInternal[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options?.parameters?.[parameter]?.[property];\n                if (generalParameterValue !== undefined) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, yScale);\n                        propertiesValuesInternal[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        // callbacks receive user-provided peak values (not Y-normalized)\n                        let value = generalParameterValue(originalPeak);\n                        value = getNormalizedValue(value, parameter, property, yScale);\n                        propertiesValuesInternal[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                propertiesValuesInternal[property].push(\n                //@ts-expect-error parameters and shape instance are guaranteed to be present in the defaultParameterValues function\n                defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        const propertiesValues = {\n            min: propertiesValuesInternal.min,\n            max: propertiesValuesInternal.max,\n            init: propertiesValuesInternal.init,\n            gradientDifference: propertiesValuesInternal.gradientDifference,\n        };\n        internalPeaks.push({\n            id,\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, yScale) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return value / yScale;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    const identity = Matrix.eye(params.length, params.length, damping);\n    const func = parameterizedFunction(params);\n    const evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    const gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    const perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\n/**\n * Run a direct optimization on the provided data using a sum-of-shapes model.\n * @param data - The observed x/y data to fit.\n * @param sumOfShapes - A function returning the model prediction for a given parameter vector.\n * @param options - Optimization bounds and solver options.\n * @returns The optimized parameter values, the final objective error, and the number of iterations.\n */\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima, minFunctionValue, iterations } = result;\n    return {\n        parameterError: minFunctionValue,\n        iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { xMaxAbsoluteValue } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { buildOptimizationLayout } from \"./util/buildOptimizationLayout.js\";\nimport { getFixedParametersResult } from \"./util/getFixedParametersResult.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { reconstructPeaks } from \"./util/reconstructPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data so the maximum Y value becomes 1\n    const max = xMaxAbsoluteValue(data.y);\n    const yScale = max === 0 ? 1 : max;\n    const internalPeaks = getInternalPeaks(peaks, yScale, options);\n    // need to rescale what is related to Y\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = data.y[i] / yScale;\n    }\n    const optimizationLayout = buildOptimizationLayout(internalPeaks, peaks, options, yScale);\n    const { freeIndices, variableMin, variableMax, variableInit, variableGrad, variables, } = optimizationLayout;\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const baseSumOfShapes = getSumOfShapes(internalPeaks);\n    const sumOfShapesForVariables = (variableValues) => {\n        return baseSumOfShapes(optimizationLayout.variableToPeakValues(variableValues));\n    };\n    if (freeIndices.length === 0) {\n        return getFixedParametersResult(internalPeaks, normalizedY, data.x, optimizationLayout.variableToPeakValues(variableInit), baseSumOfShapes, yScale);\n    }\n    // prepare arrays to pass to the algorithm (reduced if needed)\n    let minValues;\n    let maxValues;\n    let initialValues;\n    let gradientDifferences;\n    let sumOfShapesToUse = sumOfShapesForVariables;\n    if (freeIndices.length === variables.length) {\n        // nothing to reduce\n        minValues = variableMin;\n        maxValues = variableMax;\n        initialValues = variableInit;\n        gradientDifferences = variableGrad;\n    }\n    else {\n        // wrapper that maps reduced (free) parameters into the full parameter vector\n        const sumOfShapesForReduced = (reducedParameters) => {\n            const full = new Float64Array(variables.length);\n            full.set(variableInit);\n            for (let k = 0; k < freeIndices.length; k++) {\n                full[freeIndices[k]] = reducedParameters[k];\n            }\n            return sumOfShapesForVariables(full);\n        };\n        minValues = new Float64Array(freeIndices.length);\n        maxValues = new Float64Array(freeIndices.length);\n        initialValues = new Float64Array(freeIndices.length);\n        gradientDifferences = new Float64Array(freeIndices.length);\n        for (let j = 0; j < freeIndices.length; j++) {\n            const i = freeIndices[j];\n            minValues[j] = variableMin[i];\n            maxValues[j] = variableMax[i];\n            initialValues[j] = variableInit[i];\n            gradientDifferences[j] = variableGrad[i];\n        }\n        sumOfShapesToUse = sumOfShapesForReduced;\n    }\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapesToUse, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    let fittedVariableValues;\n    if (freeIndices.length === variables.length) {\n        fittedVariableValues = fitted.parameterValues;\n    }\n    else {\n        const full = variableInit.slice();\n        for (let k = 0; k < freeIndices.length; k++) {\n            full[freeIndices[k]] = fitted.parameterValues[k];\n        }\n        fittedVariableValues = full;\n    }\n    const fittedValues = optimizationLayout.variableToPeakValues(fittedVariableValues);\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: reconstructPeaks(internalPeaks, fittedValues, yScale),\n    };\n}\n//# sourceMappingURL=index.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/**\n * Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    maxIterations: 20,\n                    epsilon: 1e-4,\n                    tolerance: 1e-16,\n                    tolerance2: 1e-12,\n                    initialState: {},\n                    ...options,\n                },\n            };\n        }\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        for (const peak of internalPeaks) {\n            for (let i = 2; i < peak.parameters.length; i++) {\n                const shapeFctKey = peak.parameters[i];\n                peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n            }\n        }\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","import { reconstructPeaks } from \"./reconstructPeaks.js\";\n/**\n * Build result when no parameters are free to optimize.\n * Computes the fit error using the provided `globalInit` parameter vector\n * and reconstructs the output peak objects from `internalPeaks`.\n * @template T - input Peak type\n * @param internalPeaks - internal representation of peaks (with parameter indices)\n * @param normalizedY - observed Y values normalized by the global scale\n * @param x - X axis values\n * @param globalInit - full parameter vector (actual-space) used to evaluate the model\n * @param baseSumOfShapes - function that returns the spectrum function given parameters\n * @param yScale - the scale factor used to normalize Y (used to reconstruct peak amplitudes)\n * @returns an object containing `error`, `iterations` (0) and the reconstructed `peaks`\n */\nexport function getFixedParametersResult(internalPeaks, normalizedY, x, globalInit, baseSumOfShapes, yScale) {\n    const fct = baseSumOfShapes(globalInit);\n    let error = 0;\n    for (let i = 0; i < normalizedY.length; i++) {\n        error += (normalizedY[i] - fct(x[i])) ** 2;\n    }\n    return {\n        error,\n        iterations: 0,\n        peaks: reconstructPeaks(internalPeaks, globalInit, yScale),\n    };\n}\n//# sourceMappingURL=getFixedParametersResult.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Add a `shape` property to peaks that do not have one.\n * If a peak already has a `shape` but no `fwhm`, the FWHM is computed from `peak.width`.\n * @param peaks - Peaks with a `width` property.\n * @param options - Shape options.\n * @returns A peak list where every peak has a `shape` property.\n */\nexport function addMissingShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const defaultShapeInstance = getShape1D(shape);\n    return output.map((peak) => {\n        if (hasShape(peak)) {\n            if (!('fwhm' in peak.shape)) {\n                peak.shape.fwhm = getShape1D(peak.shape).widthToFWHM(peak.width);\n            }\n            return peak;\n        }\n        return {\n            ...peak,\n            shape: {\n                fwhm: defaultShapeInstance.widthToFWHM(peak.width),\n                ...shape,\n            },\n        };\n    });\n}\nfunction hasShape(peak) {\n    return 'shape' in peak;\n}\n//# sourceMappingURL=addMissingShape.js.map","/**\n * Splits a group of peaks into smaller subgroups whose size is approximately\n * limited by `maxNumberOfPeaks`.\n *\n * If the group contains more peaks than allowed, the function identifies the\n * largest normalized gaps between adjacent peaks and uses them as split points.\n *\n * The gap score is computed as:\n *\n * `score = distanceBetweenCenters / averagePeakWidth`\n *\n * where:\n * - `distanceBetweenCenters = peak[i + 1].x - peak[i].x`\n * - `averagePeakWidth = (peak[i].width + peak[i + 1].width) / 2`\n *\n * Larger scores indicate that two neighboring peaks are well separated\n * relative to their widths, making them good candidates for dividing the\n * fitting problem into independent subgroups.\n *\n * The algorithm:\n * 1. Computes the number of cuts required.\n * 2. Scores every boundary between adjacent peaks.\n * 3. Selects the boundaries with the largest scores.\n * 4. Splits the original group at those boundaries.\n * @param group - Ordered collection of peaks. Peaks should be sorted by\n * increasing `x` position before calling this function.\n * @param maxNumberOfPeaks - Desired maximum number of peaks per subgroup.\n * If the group size is less than or equal to this value, no splitting occurs.\n * @returns An array of peak subgroups. The returned groups preserve the\n * original peak ordering.\n */\nexport function splitGroup(group, maxNumberOfPeaks) {\n    const groups = [group];\n    while (true) {\n        const index = groups.findIndex((g) => g.length > maxNumberOfPeaks);\n        if (index === -1)\n            break;\n        const current = groups[index];\n        const cut = findBestCut(current);\n        groups.splice(index, 1, current.slice(0, cut), current.slice(cut));\n    }\n    return groups;\n}\nfunction findBestCut(group) {\n    let bestScore = -Infinity;\n    const candidates = [];\n    for (let i = 1; i < group.length; i++) {\n        const score = (group[i].x - group[i - 1].x) /\n            ((group[i].width + group[i - 1].width) / 2);\n        if (score > bestScore) {\n            bestScore = score;\n            candidates.length = 0;\n        }\n        if (score === bestScore) {\n            candidates.push({\n                index: i,\n                balance: Math.abs(i - (group.length - i)),\n            });\n        }\n    }\n    let bestScored = candidates[0];\n    for (const candidate of candidates) {\n        if (candidate.balance < bestScored.balance) {\n            bestScored = candidate;\n        }\n    }\n    return bestScored.index;\n}\n//# sourceMappingURL=splitGroup.js.map","import { splitGroup } from \"./splitGroup.js\";\n/**\n * Group peaks based on a width-aware factor.\n * Only `x` and `width` are used, so the current implementation does not take\n * peak asymmetry into account.\n * @param peaks - Peaks with `x` and `width` properties.\n * @param options - Grouping options.\n * @returns Groups of peaks sorted by ascending `x`.\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks.length === 0)\n        return [];\n    const { groupingFactor = 1, maxNumberOfPeaks = 15 } = options;\n    const sortedPeaks = peaks.toSorted((a, b) => a.x - b.x);\n    let previousPeak = sortedPeaks[0];\n    let currentGroup = [previousPeak];\n    const groups = [currentGroup];\n    for (let i = 1; i < sortedPeaks.length; i++) {\n        const peak = sortedPeaks[i];\n        if ((peak.x - previousPeak.x) / ((peak.width + previousPeak.width) / 2) <=\n            groupingFactor) {\n            currentGroup.push(peak);\n        }\n        else {\n            currentGroup = [peak];\n            groups.push(currentGroup);\n        }\n        previousPeak = peak;\n    }\n    if (maxNumberOfPeaks !== undefined) {\n        return groups.flatMap((group) => group.length > maxNumberOfPeaks\n            ? splitGroup(group, maxNumberOfPeaks)\n            : [group]);\n    }\n    return groups;\n}\n//# sourceMappingURL=groupPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xGetFromToIndex } from 'ml-spectra-processing';\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { groupPeaks } from \"../utils/groupPeaks.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required.\n * It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt.\n * Returns both the optimized peaks and per-group diagnostic logs.\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Optimization options.\n * @returns An object with the optimized peaks and the per-group logs.\n */\nexport function optimizePeaksWithLogs(data, peakList, options = {}) {\n    const { fromTo = {}, shape = { kind: 'gaussian' }, maxNumberOfPeaks, groupingFactor, factorLimits = 2, parameters, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    // Optimize peaks in groups: fitting everything at once would be too slow and\n    // have too many free parameters.\n    const groups = groupPeaks(peakList, {\n        groupingFactor,\n        maxNumberOfPeaks,\n    });\n    const logs = [];\n    const results = [];\n    for (const peakGroup of groups) {\n        const start = Date.now();\n        const peaks = addMissingShape(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks.at(-1);\n        const { from = firstPeak.x - firstPeak.width * factorLimits, to = lastPeak.x + lastPeak.width * factorLimits, } = fromTo;\n        const { fromIndex, toIndex } = xGetFromToIndex(data.x, { from, to });\n        const x = data.x instanceof Float64Array\n            ? data.x.subarray(fromIndex, toIndex)\n            : data.x.slice(fromIndex, toIndex);\n        const y = data.y instanceof Float64Array\n            ? data.y.subarray(fromIndex, toIndex)\n            : data.y.slice(fromIndex, toIndex);\n        const log = {\n            range: { from, to },\n            parameters: { optimization, parameters },\n            groupSize: peakGroup.length,\n            time: Date.now() - start,\n        };\n        if (x.length > 5) {\n            const { iterations, error, peaks: optimizedPeaks, } = optimize({ x, y }, peaks, {\n                shape,\n                parameters,\n                optimization,\n            });\n            for (let i = 0; i < peaks.length; i++) {\n                results.push({\n                    ...optimizedPeaks[i],\n                    width: getShape1D(peaks[i].shape).fwhmToWidth(optimizedPeaks[i].shape.fwhm),\n                });\n            }\n            logs.push({\n                ...log,\n                iterations,\n                error,\n                message: 'optimization successful',\n            });\n        }\n        else {\n            results.push(...peaks);\n            logs.push({\n                ...log,\n                iterations: 0,\n                message: 'x length too small for optimization',\n            });\n        }\n    }\n    return { logs, optimizedPeaks: results };\n}\n//# sourceMappingURL=optimizePeaksWithLogs.js.map","/**\n * Assign a random UUID to every peak that does not already have an `id`.\n * @param peaks - Peaks possibly missing an `id`.\n * @param options - Options.\n * @param options.output - Destination array. Defaults to a deep clone of `peaks`.\n * @returns A peak list where every peak has an `id`.\n */\nexport function addMissingIDs(peaks, options = {}) {\n    const { output = structuredClone(peaks) } = options;\n    for (const peak of output) {\n        if (!('id' in peak)) {\n            peak.id = crypto.randomUUID();\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=addMissingIDs.js.map","import { addMissingIDs } from \"../utils/addMissingIDs.js\";\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Join peaks that seem to belong to a broad signal into a single broad peak.\n * @param peakList - Detected peaks, possibly containing fragments of a broad signal.\n * @param options - Join options.\n * @returns The peak list with broad fragments fitted as a single peak.\n */\nexport function joinBroadPeaks(peakList, options = {}) {\n    const { shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, broadWidth = 0.25, broadRatio = 0.0025, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    if (peakList.length < 2) {\n        return addMissingIDs(addMissingShape(peakList.map(getGSDPeakOptimizedStructure), { shape }));\n    }\n    let maxDdy = Math.abs(peakList[0].ddY);\n    for (let i = 1; i < peakList.length; i++) {\n        const absDdy = Math.abs(peakList[i].ddY);\n        if (absDdy > maxDdy)\n            maxDdy = absDdy;\n    }\n    const newPeaks = [];\n    for (const peak of peakList) {\n        if (Math.abs(peak.ddY) <= broadRatio * maxDdy) {\n            broadLines.push(peak);\n        }\n        else {\n            newPeaks.push(getGSDPeakOptimizedStructure(peak));\n        }\n    }\n    // Sentinel: forces the final group to be flushed by the `else` branch below.\n    //@ts-expect-error Sentinel peak, x=+Infinity guarantees the distance check fails.\n    broadLines.push({ x: Number.MAX_VALUE, y: 0 });\n    let candidates = {\n        x: [broadLines[0].x],\n        y: [broadLines[0].y],\n    };\n    let indexes = [0];\n    for (let i = 1; i < broadLines.length; i++) {\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < broadWidth) {\n            candidates.x.push(broadLines[i].x);\n            candidates.y.push(broadLines[i].y);\n            if (broadLines[i].y > max) {\n                max = broadLines[i].y;\n                maxI = i;\n            }\n            indexes.push(i);\n            count++;\n        }\n        else {\n            if (count > 2) {\n                const initialWidth = Math.abs(candidates.x.at(-1) - candidates.x[0]);\n                const { logs, optimizedPeaks } = optimizePeaksWithLogs(candidates, [\n                    {\n                        id: crypto.randomUUID(),\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: initialWidth,\n                        parameters: {\n                            width: { max: initialWidth * 4, min: initialWidth * 0.8 },\n                        },\n                    },\n                ], { shape: { kind: 'pseudoVoigt' }, optimization });\n                max = 0;\n                maxI = 0;\n                const log = logs.find((l) => l.message === 'optimization successful');\n                if (log?.error !== undefined && log.error < 0.2) {\n                    newPeaks.push(optimizedPeaks[0]);\n                }\n                else {\n                    pushBackPeaks(broadLines, indexes, newPeaks);\n                }\n            }\n            else {\n                pushBackPeaks(broadLines, indexes, newPeaks);\n            }\n            candidates = { x: [broadLines[i].x], y: [broadLines[i].y] };\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n    newPeaks.sort((a, b) => a.x - b.x);\n    return addMissingIDs(newPeaks, { output: newPeaks });\n}\nfunction pushBackPeaks(broadLines, indexes, peaks) {\n    for (const index of indexes) {\n        peaks.push(getGSDPeakOptimizedStructure(broadLines[index]));\n    }\n}\nfunction getGSDPeakOptimizedStructure(peak) {\n    const { id, shape, x, y, width } = peak;\n    const newPeak = {\n        x,\n        y,\n        width,\n        shape,\n    };\n    if (id)\n        newPeak.id = id;\n    return newPeak;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Enlarge peaks while preventing overlap between them.\n * A typical application is chromatography peak picking.\n * We should not make the hypothesis that `x` is equidistant, because peaks\n * may not be symmetric once we add the `from` and `to` properties.\n * @param peakList - Peaks to broaden.\n * @param options - Broadening options.\n * @returns The broadened peaks.\n */\nexport function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = mapPeaks(peakList, factor);\n    if (!overlap) {\n        for (let i = 0; i < peaks.length - 1; i++) {\n            const peak = peaks[i];\n            const nextPeak = peaks[i + 1];\n            if (peak.to.x > nextPeak.from.x) {\n                // we do it proportional to the width of the peaks\n                peak.to.x =\n                    (peak.width / (nextPeak.width + peak.width)) * (nextPeak.x - peak.x) +\n                        peak.x;\n                nextPeak.from.x = peak.to.x;\n            }\n        }\n    }\n    for (const peak of peaks) {\n        peak.width = peak.to.x - peak.from.x;\n        if (peak.shape) {\n            const { shape, width } = peak;\n            if (shape.fwhm !== undefined) {\n                const shapeFct = getShape1D(shape);\n                shape.fwhm = shapeFct.widthToFWHM(width);\n            }\n        }\n    }\n    return peaks;\n}\nfunction mapPeaks(peaks, factor) {\n    return peaks.map((peak) => {\n        const { id, shape, x, y, index, inflectionPoints } = peak;\n        const xFrom = x - (x - inflectionPoints.from.x) * factor;\n        const xTo = x + (inflectionPoints.to.x - x) * factor;\n        let result = {\n            x,\n            y,\n            index,\n            width: xTo - xFrom,\n            from: { x: xFrom },\n            to: { x: xTo },\n        };\n        if (id) {\n            result = { ...result, id };\n        }\n        if (shape) {\n            result = { ...result, shape };\n        }\n        return result;\n    });\n}\n//# sourceMappingURL=broadenPeaks.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMaxAbsoluteValue, xMaxValue, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { autoAlgorithm } from \"./algorithms/autoAlgorithm.js\";\nimport { firstDerivative } from \"./algorithms/firstDerivative.js\";\nimport { secondDerivative } from \"./algorithms/secondDerivative.js\";\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution.\n * @param data - Object with `x` and `y` arrays. `x` must be monotone increasing.\n * @param options - Peak detection options.\n * @returns The detected peaks, sorted by ascending `x`.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, maxAbsoluteRatio = 0, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    if (maxAbsoluteRatio < 0 || maxAbsoluteRatio > 1) {\n        throw new Error('maxAbsoluteRatio must be between 0 and 1');\n    }\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    // Copy so the `maxCriteria` / clipping loops below don't mutate the caller's array.\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const isEquallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (isEquallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] = -y[i];\n        }\n    }\n    const maxAbsoluteValue = maxAbsoluteRatio > 0 ? maxAbsoluteRatio * xMaxAbsoluteValue(y) : noiseLevel;\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = isEquallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const yThreshold = xMaxValue([\n        noiseLevel,\n        minY + (maxY - minY) * minMaxRatio,\n        maxAbsoluteValue,\n    ]);\n    const dX = x[1] - x[0];\n    const peakData = { x, y, yData, dY, ddY, dX, yThreshold };\n    let peaks = [];\n    if (peakDetectionAlgorithm === 'first') {\n        peaks = firstDerivative(peakData);\n    }\n    else if (peakDetectionAlgorithm === 'second') {\n        peaks = secondDerivative(peakData);\n    }\n    else {\n        peaks = autoAlgorithm(peakData);\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    for (const peak of peaks) {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    }\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\n/**\n * Detect peaks using local minima of the second derivative (inflection points).\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function secondDerivative(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < y.length - 1; ++i) {\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    return getPeakFromIntervals({\n        minData: minddY,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=secondDerivative.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Peak detection that combines first-derivative zero-crossings and\n * second-derivative local minima to find peaks inside each interval.\n * @param input - Spectrum values together with its first and second derivatives.\n * @returns The detected peaks.\n */\nexport function autoAlgorithm(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const crossDy = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < 0 && dY[i + 1] > 0) || (dY[i] > 0 && dY[i + 1] < 0)) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        // Handle exact zero\n        if (dY[i] === 0 &&\n            dY[i] < Math.abs(dY[i + 1]) &&\n            dY[i] < Math.abs(dY[i - 1])) {\n            crossDy.push(i);\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    const peaks = [];\n    let lastK = -1;\n    let lastJ = -1;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        let yIndex = -1;\n        let match = tryMatchOneIntervalWithMinData({\n            x,\n            yData,\n            lastK,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            minData: crossDy,\n        });\n        lastK = match.lastIndex;\n        if (match.possible !== -1) {\n            yIndex = crossDy[match.possible];\n        }\n        else {\n            match = tryMatchOneIntervalWithMinData({\n                x,\n                yData,\n                yThreshold,\n                lastK: lastJ,\n                intervalWidth,\n                intervalCenter,\n                minData: minddY,\n            });\n            if (match.possible !== -1) {\n                yIndex = minddY[match.possible];\n            }\n            lastJ = match.lastIndex;\n        }\n        if (yIndex !== -1) {\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[yIndex],\n                y: y[yIndex],\n                width,\n                index: yIndex,\n                ddY: ddY[yIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n    }\n    return peaks;\n}\n//# sourceMappingURL=autoAlgorithm.js.map","/**\n * Refine the `x` and `y` coordinates of each peak by running a quadratic\n * interpolation over the peak and its 3 closest neighbors.\n * The correction is performed in place.\n * @param data - Object with `x` and `y` arrays.\n * @param peaks - Peaks to refine (mutated in place).\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // Quadratic interpolation on log-intensities to refine the peak top.\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = Math.log10(y[currentIndex - 1]);\n            const beta = Math.log10(y[currentIndex]);\n            const gamma = Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required.\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Optimization options.\n * @returns The optimized peaks.\n */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Append a `shape` property (including `fwhm`) to every peak.\n * @param peaks - Peaks with a `width` property.\n * @param options - Shape options.\n * @returns A peak list where every peak has a `shape` property.\n */\nexport function setShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => ({\n        ...peak,\n        shape: { ...shape, fwhm: shapeInstance.widthToFWHM(peak.width) },\n    }));\n}\n//# sourceMappingURL=setShape.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peakPicking = peakPicking;\nconst ml_gsd_1 = require(\"ml-gsd\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {import('./Spectrum')} spectrum - array of all the peaks\n * @returns {array}\n */\nfunction peakPicking(spectrum) {\n    if (!spectrum.peaks || spectrum.peaks.length === 0) {\n        spectrum.peaks = [];\n        const keys = Object.keys(spectrum.data).filter((key) => key !== 'x' && key !== 'y');\n        if (spectrum.isContinuous()) {\n            // some experimental data are really problematic and we need to add this line\n            const data = (0, ml_spectra_processing_1.xyEnsureGrowingX)(spectrum.data);\n            const gsdPeaks = (0, ml_gsd_1.gsd)(data, {\n                minMaxRatio: spectrum.options.threshold || 0.00025, // Threshold to determine if a given peak should be considered as a noise\n                noiseLevel: getNoiseLevel(data.y, spectrum.options.noiseFactor),\n                realTopDetection: true,\n                smoothY: false,\n                sgOptions: { windowSize: 7, polynomial: 3 },\n            });\n            for (let gsdPeak of gsdPeaks) {\n                const peak = { x: gsdPeak.x, y: gsdPeak.y, width: gsdPeak.width };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][gsdPeak.index];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n        else {\n            spectrum.peaks = [];\n            let data = spectrum.data;\n            for (let i = 0; i < data.x.length; i++) {\n                const peak = {\n                    x: data.x[i],\n                    y: data.y[i],\n                    width: 0,\n                };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][i];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n    }\n    return spectrum.peaks;\n}\n/**\n * Intensity under which a maximum is considered to be noise.\n *\n * We have to compute it ourselves: left alone, gsd only estimates a noise level\n * when the x values are equally spaced within 5%, and falls back to 0 otherwise.\n * A mass spectrum is sampled in time or in frequency, so over a wide m/z range\n * the steps grow by far more than that and the noise would not be filtered.\n * @param {import('cheminfo-types').NumberArray} y\n * @param {number} [noiseFactor=3] - 0 leaves the decision to gsd\n * @returns {number|undefined}\n */\nfunction getNoiseLevel(y, noiseFactor = 3) {\n    if (!noiseFactor)\n        return undefined;\n    const { median, sd } = (0, ml_spectra_processing_1.xNoiseStandardDeviation)(y);\n    return median + noiseFactor * sd;\n}\n//# sourceMappingURL=peakPicking.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\n/**\n * Class representing simple linear regression.\n * The regression uses OLS to calculate intercept and slope.\n */\nexport class SimpleLinearRegression extends BaseRegression {\n    /**\n     * @param x - explanatory variable\n     * @param y - response variable\n     */\n    constructor(x, y) {\n        super();\n        // @ts-expect-error internal use of the constructor, from `this.load`\n        if (x === true) {\n            // @ts-expect-error internal use of the constructor, from `this.load`\n            const yObj = y;\n            this.slope = yObj.slope;\n            this.intercept = yObj.intercept;\n            this.coefficients = [yObj.intercept, yObj.slope];\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y);\n            this.slope = result.slope;\n            this.intercept = result.intercept;\n            this.coefficients = [result.intercept, result.slope];\n        }\n    }\n    /**\n     * Get the parameters and model name in JSON format\n     * @returns\n     */\n    toJSON() {\n        return {\n            name: 'simpleLinearRegression',\n            slope: this.slope,\n            intercept: this.intercept,\n        };\n    }\n    _predict(x) {\n        return this.slope * x + this.intercept;\n    }\n    /**\n     * Finds x for the given y value.\n     * @param y - response variable value\n     * @returns - x value\n     */\n    computeX(y) {\n        return (y - this.intercept) / this.slope;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toString(precision) {\n        let result = 'f(x) = ';\n        if (this.slope !== 0) {\n            const xFactor = maybeToPrecision(this.slope, precision);\n            result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n            if (this.intercept !== 0) {\n                const absIntercept = Math.abs(this.intercept);\n                const operator = absIntercept === this.intercept ? '+' : '-';\n                result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n            }\n        }\n        else {\n            result += maybeToPrecision(this.intercept, precision);\n        }\n        return result;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toLaTeX(precision) {\n        return this.toString(precision);\n    }\n    /**\n     * Class instance from a JSON Object.\n     * @param json\n     * @returns\n     */\n    static load(json) {\n        if (json.name !== 'simpleLinearRegression') {\n            throw new TypeError('not a SLR model');\n        }\n        // @ts-expect-error internal use of the constructor\n        return new SimpleLinearRegression(true, json);\n    }\n}\n/**\n * Internal  function.\n * It determines the parameters (slope, intercept) of the line that best fit the `x,y` vector-data (simple linear regression).\n * @param x - explanatory variable\n * @param y - response variable\n * @returns - slope and intercept of the best fit line\n */\nfunction regress(x, y) {\n    const n = x.length;\n    let xSum = 0;\n    let ySum = 0;\n    let xSquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n        xSum += x[i];\n        ySum += y[i];\n        xSquared += x[i] * x[i];\n        xY += x[i] * y[i];\n    }\n    const numerator = n * xY - xSum * ySum;\n    const slope = numerator / (n * xSquared - xSum * xSum);\n    return {\n        slope,\n        intercept: (1 / n) * ySum - slope * (1 / n) * xSum,\n    };\n}\n//# sourceMappingURL=index.js.map","import {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { SimpleLinearRegression } from 'ml-regression-simple-linear';\n\nexport class PowerRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // reloading model\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(newInputs) {\n    return this.A * newInputs ** this.B;\n  }\n\n  toJSON() {\n    return {\n      name: 'powerRegression',\n      A: this.A,\n      B: this.B,\n    };\n  }\n\n  toString(precision) {\n    return `f(x) = ${maybeToPrecision(\n      this.A,\n      precision,\n    )} * x^${maybeToPrecision(this.B, precision)}`;\n  }\n\n  toLaTeX(precision) {\n    let latex = '';\n    if (this.B >= 0) {\n      latex = `f(x) = ${maybeToPrecision(\n        this.A,\n        precision,\n      )}x^{${maybeToPrecision(this.B, precision)}}`;\n    } else {\n      latex = `f(x) = \\\\frac{${maybeToPrecision(\n        this.A,\n        precision,\n      )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n    }\n    latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n    return latex;\n  }\n\n  static load(json) {\n    if (json.name !== 'powerRegression') {\n      throw new TypeError('not a power regression model');\n    }\n    return new PowerRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y) {\n  const n = x.length;\n  const xl = new Array(n);\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    xl[i] = Math.log(x[i]);\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(xl, yl);\n  pr.A = Math.exp(linear.intercept);\n  pr.B = linear.slope;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peaksWidth = peaksWidth;\nconst ml_regression_power_1 = require(\"ml-regression-power\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nfunction peaksWidth(peaks) {\n    let xs = peaks.map((peak) => peak.x);\n    let widths = peaks.map((peak) => peak.width);\n    if (xs.length < 2) {\n        throw new Error(`peaksWidth: not enough peaks (less than 2) for automatic width calculation: ${xs.length}`);\n    }\n    let regression = new ml_regression_power_1.PowerRegression(xs, widths);\n    if (Number.isNaN(regression.A) || Number.isNaN(regression.B)) {\n        throw new Error('peaksWidth: can not calculate regression');\n    }\n    let from = (0, ml_spectra_processing_1.xMinValue)(xs);\n    let to = (0, ml_spectra_processing_1.xMaxValue)(xs);\n    let regressionChart = { x: [], y: [] };\n    for (let x = from; x <= to; x += (to - from) / 1000) {\n        regressionChart.x.push(x);\n        regressionChart.y.push(regression.predict(x));\n    }\n    return {\n        widths: {\n            x: xs,\n            y: widths,\n        },\n        fit: regressionChart,\n        score: regression.score(xs, widths),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        A: regression.A,\n        B: regression.B,\n        predictFctString: `${regression.A} * mass ** ${regression.B}`,\n    };\n}\n//# sourceMappingURL=peaksWidth.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Spectrum = void 0;\nexports.fromPeaks = fromPeaks;\nexports.fromText = fromText;\nconst is_any_array_1 = require(\"is-any-array\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst xy_parser_1 = require(\"xy-parser\");\nconst getBestPeaks_js_1 = require(\"./getBestPeaks.js\");\nconst getChargeClusters_js_1 = require(\"./getChargeClusters.js\");\nconst getChargeLadders_js_1 = require(\"./getChargeLadders.js\");\nconst getFragmentPeaks_js_1 = require(\"./getFragmentPeaks.js\");\nconst getMassRemainder_js_1 = require(\"./getMassRemainder.js\");\nconst getPeakChargeBySimilarity_js_1 = require(\"./getPeakChargeBySimilarity.js\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\nconst getPeaksWithCharge_js_1 = require(\"./getPeaksWithCharge.js\");\nconst isContinuous_js_1 = require(\"./isContinuous.js\");\nconst peakPicking_js_1 = require(\"./peakPicking.js\");\nconst peaksWidth_js_1 = require(\"./peaksWidth.js\");\nconst defaultData = { x: [], y: [] };\n/**\n * Class dealing with mass spectra and peak picking\n */\nclass Spectrum {\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} data\n     * @param {object} [options={}]\n     * @param {number} [options.threshold=0.00025]\n     * @param {number} [options.noiseFactor=3] - peaks under `median + noiseFactor * sd`\n     * of the noise are ignored when peak picking a continuous spectrum. Set it to 0\n     * to let the peak picking decide by itself.\n     * @param {string|Array} [options.ionizations='H+'] - the charge carriers a\n     * multiply charged species may show, used by `getChargeLadders`. A comma\n     * separated list (`'H+,Na+,K+'`) or an array of preprocessed ionizations.\n     */\n    constructor(data = defaultData, options = {}) {\n        if (typeof data !== 'object' ||\n            !(0, is_any_array_1.isAnyArray)(data.x) ||\n            !(0, is_any_array_1.isAnyArray)(data.y)) {\n            throw new TypeError('Spectrum data must be an object with x:[], y:[]');\n        }\n        this.data = { ...data };\n        this.options = {\n            threshold: 0.00025,\n            noiseFactor: 3,\n            ionizations: 'H+',\n            ...options,\n        };\n        Object.defineProperty(this.data, 'xOriginal', {\n            enumerable: false,\n            writable: true,\n        });\n        /**\n         * someProperty is an example property that is set to `true`\n         * @type {array}\n         * @public\n         */\n        this.peaks = [];\n        this.clearCache();\n    }\n    /**\n     * Forget everything that was derived from the data. Has to be called by any\n     * method changing `data`, otherwise the peaks, the sums or the min / max\n     * values would still describe the previous data.\n     * @returns {this}\n     */\n    clearCache() {\n        this.cache = {};\n        this.peaks = [];\n        this.continuous = undefined;\n        this.info =\n            this.data && this.data.x.length > 0\n                ? {\n                    minX: (0, ml_spectra_processing_1.xMinValue)(this.data.x),\n                    maxX: (0, ml_spectra_processing_1.xMaxValue)(this.data.x),\n                    minY: (0, ml_spectra_processing_1.xMinValue)(this.data.y),\n                    maxY: (0, ml_spectra_processing_1.xMaxValue)(this.data.y),\n                }\n                : {\n                    minX: Number.NaN,\n                    maxX: Number.NaN,\n                    minY: Number.NaN,\n                    maxY: Number.NaN,\n                };\n        return this;\n    }\n    minMaxX() {\n        return (0, ml_spectra_processing_1.xMinMaxValues)(this.data.x);\n    }\n    /**\n     *\n     * @param {import('ml-spectra-processing').XYMaxYOptions} options\n     * @returns\n     */\n    maxY(options) {\n        return (0, ml_spectra_processing_1.xyMaxY)(this.data, options);\n    }\n    sumY() {\n        if (!this.cache.sumY) {\n            this.cache.sumY = (0, ml_spectra_processing_1.xSum)(this.data.y);\n        }\n        return this.cache.sumY;\n    }\n    scaleY(intensity = 1) {\n        this.data.y = Array.from((0, ml_spectra_processing_1.xNormed)(this.data.y, { value: intensity, algorithm: 'max' }));\n        return this.clearCache();\n    }\n    rescaleX(callback) {\n        this.ensureOriginalX();\n        for (let i = 0; i < this.data.x.length; i++) {\n            this.data.x[i] = callback(this.data.xOriginal[i]);\n        }\n        return this.clearCache();\n    }\n    ensureOriginalX() {\n        if (!this.data.xOriginal) {\n            this.data.xOriginal = this.data.x.slice(0);\n        }\n    }\n    normedY(total = 1) {\n        this.data.y = (0, ml_spectra_processing_1.xNormed)(this.data.y, { value: total });\n        return this.clearCache();\n    }\n    peakPicking() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return this.peaks;\n    }\n    peaksWidth() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, peaksWidth_js_1.peaksWidth)(this.peaks);\n    }\n    getBestPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getBestPeaks_js_1.getBestPeaks)(this.peaks, options);\n    }\n    /**\n     * All the peaks of the spectrum, each carrying the `charge` of the series it\n     * belongs to — an isotopologue cluster or, on an unresolved multiply charged\n     * species, a charge-state ladder — when one was found. The charges are\n     * evaluated once, over all the peaks, and cached; `getSelectedPeaksWithCharge`\n     * reads them out of this result rather than recomputing them.\n     * @param {object} [options={}]\n     * @param {number} [options.min=1] - lowest charge the isotopologue clusters\n     * consider\n     * @param {number} [options.max=100] - highest charge to consider; shared by the\n     * isotopologue clusters and the charge-state ladder (which spans `1` to `max`)\n     * @param {number} [options.precision=20] - tolerance on the position of an\n     * isotopologue, in ppm\n     * @param {number} [options.minLength=3] - shortest series that shows a charge\n     * @param {number} [options.minSignalToNoise=10] - on a continuous spectrum a\n     * peak under `median + minSignalToNoise * sd` of the noise takes no part in a\n     * series; ignored for a centroided spectrum\n     * @param {string|Array} [options.ionizations] - the charge carriers a\n     * charge-state ladder may show, see `getChargeLadders`. Defaults to the\n     * spectrum's `ionizations`\n     * @param {object} [options.ladder={}] - options forwarded to `getChargeLadders`,\n     * kept apart because a ladder is broader than an isotopologue and needs its own\n     * tolerances. `max` above is shared and caps both, so the ladder has no\n     * `maxCharge` of its own\n     * @param {number} [options.ladder.tolerance=500] - tolerance on the position of\n     * the next charge state, in ppm\n     * @param {number} [options.ladder.minLength=5] - shortest ladder that shows a\n     * charge\n     * @param {number} [options.ladder.minRelativeIntensity=0.05] - peaks under this\n     * fraction of the most intense one take no part in the ladders\n     * @param {number} [options.maxClusteredFraction=0.2] - the charge-state ladders\n     * are ignored when the isotopologue clusters already explain more than this\n     * fraction of the significant peaks: a resolved spectrum (where the ladders\n     * would only be coincidences) is read from its isotopologues alone\n     * @returns {Array} copy of the peaks, with a `charge` when one was found\n     */\n    getPeaksWithCharge(options = {}) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const merged = {\n            minIntensity: (0, getPeakChargeBySimilarity_js_1.getMinIntensity)(this, options),\n            ionizations: this.options.ionizations,\n            ...options,\n        };\n        if (Object.keys(options).length > 0) {\n            return (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(this.peaks, merged);\n        }\n        if (this.cache.peaksWithCharge === undefined) {\n            this.cache.peaksWithCharge = (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(this.peaks, merged);\n        }\n        return this.cache.peaksWithCharge;\n    }\n    /**\n     * Give to each of `selectedPeaks` the charge of the peak at the same mass in\n     * `getPeaksWithCharge`. A peak matching none keeps no `charge`. Both arrays are\n     * sorted by mass, so one pointer walks the precomputed peaks a single time.\n     * This only reads the precomputed charges, so both entry points always agree.\n     * @param {Array} selectedPeaks - peaks to evaluate\n     * @param {object} [options={}] - see `getPeaksWithCharge`\n     * @returns {Array} copy of `selectedPeaks` sorted by mass, with a `charge` when\n     * one was found\n     */\n    getSelectedPeaksWithCharge(selectedPeaks, options = {}) {\n        const peaks = this.getPeaksWithCharge(options);\n        const selected = structuredClone(selectedPeaks).toSorted((a, b) => a.x - b.x);\n        let index = 0;\n        for (const peak of selected) {\n            while (index < peaks.length && peaks[index].x < peak.x)\n                index++;\n            if (index < peaks.length && peaks[index].x === peak.x) {\n                const { charge } = peaks[index];\n                if (charge !== undefined)\n                    peak.charge = charge;\n            }\n        }\n        return selected;\n    }\n    /**\n     * The isotopologue clusters of the spectrum, from the one holding the most\n     * intensity to the one holding the least. To give their charge to the peaks\n     * themselves, use `getSelectedPeaksWithCharge`.\n     * @param {object} [options={}] - see `getChargeClusters`\n     * @param {number} [options.minSignalToNoise=10]\n     * @returns {Array<{charge: number, peaks: Array}>}\n     */\n    getChargeClusters(options = {}) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const minIntensity = (0, getPeakChargeBySimilarity_js_1.getMinIntensity)(this, options);\n        const peaks = [];\n        for (const peak of this.peaks) {\n            if (peak.y >= minIntensity)\n                peaks.push(peak);\n        }\n        return (0, getChargeClusters_js_1.getChargeClusters)(peaks, options);\n    }\n    getPeakChargeBySimilarity(targetMass, options) {\n        return (0, getPeakChargeBySimilarity_js_1.getPeakChargeBySimilarity)(this, targetMass, options);\n    }\n    /**\n     * The charge carriers a multiply charged species may show, tried by\n     * `getChargeLadders`. Changing them clears only the caches that depend on\n     * them, so the peak picking and the noise estimate are kept.\n     * @param {string|Array} ionizations - a comma separated list (`'H+,Na+,K+'`)\n     * or an array of preprocessed ionizations\n     * @returns {this}\n     */\n    setIonizations(ionizations) {\n        if (ionizations === this.options.ionizations)\n            return this;\n        this.options.ionizations = ionizations;\n        this.cache.chargeLadders = undefined;\n        this.cache.peaksWithCharge = undefined;\n        return this;\n    }\n    /**\n     * The charge-state ladders of a multiply charged species (a protein\n     * electrospray, ...). Contrary to `getChargeClusters`, which reads the charge\n     * on the isotopologues of a single envelope, this reconstructs the neutral\n     * mass from a series of peaks of the same molecule ionized a growing number of\n     * times by the spectrum's `ionizations`. See `getChargeLadders`.\n     * @returns {Array<{mass: number, ionization: string, peaks: Array}>}\n     */\n    getChargeLadders() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        if (this.cache.chargeLadders === undefined) {\n            this.cache.chargeLadders = (0, getChargeLadders_js_1.getChargeLadders)(this.peaks, {\n                ionizations: this.options.ionizations,\n            });\n        }\n        return this.cache.chargeLadders;\n    }\n    getPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n    }\n    getPeaksAsDataXY(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const peaks = (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n        return {\n            x: peaks.map((peak) => peak.x),\n            y: peaks.map((peak) => peak.y),\n        };\n    }\n    /**\n     * Returns also peaks possible for a specific molecular formula\n     * @example\n     *  const spectrum = new Spectrum({x:[], y:[]})\n     *  await spectrum.getFragmentPeaks();\n     * @param {string} mf\n     * @param {object} options\n     * @returns\n     */\n    getFragmentPeaksFct(mf, options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getFragmentPeaks_js_1.getFragmentPeaks)(this.peaks, mf, options);\n    }\n    isContinuous() {\n        return (0, isContinuous_js_1.isContinuous)(this);\n    }\n    /**\n     * Remove an integer number of time the specifiedd monoisotopic mass\n     * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n     */\n    getMassRemainderFct(mass, options = {}) {\n        return (0, getMassRemainder_js_1.getMassRemainder)(this.data, mass, options);\n    }\n}\nexports.Spectrum = Spectrum;\nfunction fromPeaks(peaks) {\n    if (peaks.length === 0)\n        return new Spectrum();\n    const data = {};\n    for (let key of Object.keys(peaks[0])) {\n        data[key] = peaks.map((peak) => peak[key]);\n    }\n    return new Spectrum(data);\n}\nfunction fromText(text, options) {\n    const data = (0, xy_parser_1.parseXY)(text);\n    return new Spectrum(data, options);\n}\n//# sourceMappingURL=Spectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSComparator = void 0;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nclass MSComparator {\n    /**\n     * Create a class that will be able to get the similarity between 2 spectra\n     * The similarity is based on 'cosine' similarity. The goal is 2 prepare 2 vectors\n     * on which the similarity is calculated.\n     * The vectors are created by taking the mass and the intensity of the peaks.\n     * @param {object} [options={}]\n     * @param {number} [options.nbPeaks] - Before comparing spectra how many peaks should be kept\n     * @param {number} [options.minNbCommonPeaks] - Minimum number of peaks in common to consider any similarity\n     * @param {number} [options.minIntensity] - What is the minimal relative intensity to keep a peak\n     * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n     * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n     * @param {number[]} [options.selectedMasses] - List of allowed masses.\n     * @param {number|Function} [options.delta=0.1] - Tolerance in Da (u) to consider 2 peaks as aligned. If a function is provided it will be called with the mass of the peak\n     */\n    constructor(options = {}) {\n        this.options = {\n            massPower: 3,\n            intensityPower: 0.6,\n            delta: 0.1,\n            ...options,\n        };\n        this.cache = new WeakMap();\n    }\n    /**\n     * Get the similarity between a spectrum and a list of masses.\n     * The main issue is that we don't have the intensity of the peaks.\n     * So we will use the intensity of the closest peak.\n     * @param {import('cheminfo-types').DataXY} dataXY\n     * @param {number[]} masses\n     */\n    getSimilarityToMasses(dataXY, masses) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY, this.options);\n        const data2 = {\n            x: Float64Array.from(masses),\n            y: new Float64Array(masses.length).fill(1),\n        };\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        // because we don't have any idea of the intensity we will use the intensity of the experimental peak\n        // and otherwise we ignore the theoretical peak\n        for (let i = 0; i < aligned.ys[0].length; i++) {\n            if (aligned.ys[0][i] === 0) {\n                aligned.ys[1][i] = 0;\n            }\n            if (aligned.ys[0][i] > 0 && aligned.ys[1][i] !== 0) {\n                aligned.ys[1][i] = aligned.ys[0][i];\n            }\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} dataXY1\n     * @param {import('cheminfo-types').DataXY} dataXY2\n     */\n    getSimilarity(dataXY1, dataXY2) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY1, this.options);\n        const data2 = normalizeAndCacheData(this.cache, dataXY2, this.options);\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n}\nexports.MSComparator = MSComparator;\n/**\n *\n * @param {WeakMap} cache\n * @param {import('cheminfo-types').DataXY} dataXY\n * @param {object} [options={}]\n * @param {number} [options.nbPeaks]\n * @param {number} [options.minIntensity]\n */\nfunction normalizeAndCacheData(cache, dataXY, options = {}) {\n    const { nbPeaks, minIntensity } = options;\n    if (cache.has(dataXY))\n        return cache.get(dataXY);\n    let data = { ...dataXY };\n    if ((0, ml_spectra_processing_1.xIsMonotonic)(data.x) !== 1) {\n        data = (0, ml_spectra_processing_1.xySortX)(data);\n    }\n    if (minIntensity !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterMinYValue)(data, minIntensity);\n    }\n    if (nbPeaks !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterTopYValues)(data, nbPeaks);\n    }\n    cache.set(dataXY, data);\n    return data;\n}\n/**\n *\n * @param {*} aligned\n * @param {object} [options={}]\n * @param {number} [options.massPower]\n * @param {number} [options.intensityPower]\n * @param {number} [options.minNbCommonPeaks]\n\n * @returns\n */\nfunction returnSimilarity(aligned, options = {}) {\n    const { massPower, intensityPower, minNbCommonPeaks } = options;\n    let nbCommonPeaks = 0;\n    let nbPeaks1 = 0;\n    let nbPeaks2 = 0;\n    for (let i = 0; i < aligned.ys[0].length; i++) {\n        if (aligned.ys[0][i] !== 0) {\n            nbPeaks1++;\n        }\n        if (aligned.ys[1][i] !== 0) {\n            nbPeaks2++;\n        }\n        if (aligned.ys[0][i] !== 0 && aligned.ys[1][i] !== 0) {\n            nbCommonPeaks++;\n        }\n    }\n    if (nbCommonPeaks === 0 ||\n        (minNbCommonPeaks && nbCommonPeaks < minNbCommonPeaks)) {\n        return {\n            nbCommonPeaks,\n            nbPeaks1,\n            nbPeaks2,\n            tanimoto: 0,\n            cosine: 0,\n        };\n    }\n    const vector1 = new Float64Array(aligned.x.length);\n    const vector2 = new Float64Array(aligned.x.length);\n    for (let i = 0; i < aligned.x.length; i++) {\n        vector1[i] = aligned.x[i] ** massPower * aligned.ys[0][i] ** intensityPower;\n        vector2[i] = aligned.x[i] ** massPower * aligned.ys[1][i] ** intensityPower;\n    }\n    return {\n        nbCommonPeaks,\n        nbPeaks1,\n        nbPeaks2,\n        tanimoto: nbCommonPeaks / (nbPeaks1 + nbPeaks2 - nbCommonPeaks),\n        cosine: cosineSimilarity(vector1, vector2),\n    };\n}\n/**\n * Returns the average of cosine distances between vectors a and b\n * Copied from https://github.com/mljs/distance/blob/0b15acd6476413f4111cb4852ca1bec9edaa2805/src/similarities/cosine.ts\n * @param a {import('cheminfo-types').NumberArray} - first vector\n * @param b {import('cheminfo-types').NumberArray} - second vector\n * @returns {number} - cosine similarity\n */\nfunction cosineSimilarity(a, b) {\n    let p = 0;\n    let p2 = 0;\n    let q2 = 0;\n    for (let i = 0; i < a.length; i++) {\n        p += a[i] * b[i];\n        p2 += a[i] * a[i];\n        q2 += b[i] * b[i];\n    }\n    return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n//# sourceMappingURL=MSComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksAnnotation = getPeaksAnnotation;\nconst fromMonoisotopicMass_1 = require(\"../from/fromMonoisotopicMass\");\n/**\n *\n * @param {array} bestPeaks\n * @param {object} [options={}]\n * @param {number} [options.numberDigits=5]\n * @param {number} [options.numberMFs=0]\n * @param {boolean} [options.showMF=false]\n * @param {array} [options.mfColors={}]\n * @param {number} [options.charge=1]\n * @param {number} [options.shift=0]\n * @param {object} [options.mfPrefs]\n * @param {number} [options.displayCharge=true]\n * @param {number} [options.displayProperties=[]] Array of properties name to display\n * @returns {Promise}\n */\nasync function getPeaksAnnotation(bestPeaks, options = {}) {\n    let { numberDigits = 5, shift = 0, showMF = false, numberMFs = 0, charge = 1, mfPrefs = {}, displayCharge = true, displayProperties = [], mfColors = [\n        { limit: 3, color: 'green' },\n        { limit: 20, color: 'lightgreen' },\n        { limit: 50, color: 'lightorange' },\n    ], } = options;\n    if (showMF && !numberMFs)\n        numberMFs = 1;\n    let annotations = [];\n    bestPeaks.sort((a, b) => (a.close ? -1 : b.close ? 1 : 0));\n    for (let peak of bestPeaks) {\n        let textLine = 0;\n        let annotation;\n        if (peak.close) {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n            };\n            annotations.push(annotation);\n            annotation = {\n                type: 'ellipse',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n                props: {\n                    rx: '3px',\n                    ry: '3px',\n                    fillOpacity: 0.3,\n                },\n            };\n        }\n        else {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-25px',\n                        x: peak.x,\n                    },\n                ],\n                labels: [\n                    {\n                        text: (peak.x + shift).toFixed(numberDigits),\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    },\n                ],\n            };\n            if (displayCharge && peak.charge !== undefined) {\n                annotation.labels.push({\n                    text: `Z:${peak.charge}`,\n                    color: 'grey',\n                    position: {\n                        x: peak.x,\n                        y: peak.y,\n                        dy: '-4px',\n                        dx: '2px',\n                    },\n                });\n            }\n            let mfs = [];\n            if (numberMFs) {\n                // we have 2 cases. Either there is a shift and we deal with differences\n                // otherwise it is absolute\n                // if there is a shift we consider only a neutral loss and the parameter charge is important\n                // we also check that the selected peak (for relative mass) is not the current peak\n                if (shift && Math.abs(peak.x + shift) > Number.EPSILON) {\n                    // neutral loss\n                    let currentMfPrefs = {\n                        ...mfPrefs,\n                        allowNeutral: true,\n                        ionizations: '',\n                    };\n                    // we need to deal with the precision and increase it\n                    currentMfPrefs.precision =\n                        (currentMfPrefs.precision / Math.max(Math.abs(peak.x + shift), 1)) *\n                            peak.x;\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs((peak.x + shift) * charge), currentMfPrefs));\n                }\n                else {\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs(peak.x * charge), mfPrefs));\n                }\n                let numberOfMFS = Math.min(mfs.length, numberMFs);\n                for (let i = 0; i < numberOfMFS; i++) {\n                    let mf = mfs[i];\n                    let ppm = shift ? (mf.ms.ppm / shift) * mfs[0].ms.em : mf.ms.ppm;\n                    annotation.labels.push({\n                        text: mf.mf,\n                        color: getColor(mfColors, Math.abs(ppm)),\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n            if (displayProperties.length > 0) {\n                for (let property of displayProperties) {\n                    annotation.labels.push({\n                        text: peak[property],\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n        }\n        annotations.push(annotation);\n    }\n    return annotations;\n}\nfunction getColor(colors, value) {\n    for (let color of colors) {\n        if (value < color.limit)\n            return color.color;\n    }\n    return 'lightgrey';\n}\n//# sourceMappingURL=getPeaksAnnotation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsGraph = void 0;\nconst getPeaksAnnotation_js_1 = require(\"./getPeaksAnnotation.js\");\nexports.JsGraph = {\n    getPeaksAnnotation: getPeaksAnnotation_js_1.getPeaksAnnotation,\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendFragmentsInfo = appendFragmentsInfo;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n *\n * @param {object}   experimentalSpectrum\n * @param {object}   database\n * @param {object}   [options={}]\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string}   [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}   [options.precision=100] - Allowed mass range based on precision\n */\nasync function appendFragmentsInfo(experimentalSpectrum, database, options = {}) {\n    const { ionizations, onStep, precision } = options;\n    if (!experimentalSpectrum) {\n        throw new Error('Experimental spectrum is not defined');\n    }\n    if (!database) {\n        throw new Error('Database is not defined');\n    }\n    const peaks = experimentalSpectrum.getPeaks({ sumValue: 1 });\n    for (let entry of database) {\n        const ranges = Object.keys(entry.atoms)\n            .map((atom) => `${atom}0-${entry.atoms[atom]}`)\n            .join(' ');\n        entry.fragments = {\n            nbFound: 0,\n            intensityFound: 0,\n            assignments: [],\n        };\n        for (let i = 0; i < peaks.length; i++) {\n            if (onStep)\n                await onStep(i);\n            const peak = peaks[i];\n            const possibleMFs = await (0, mf_finder_1.findMFs)(peak.x, {\n                ionizations,\n                precision,\n                ranges,\n            });\n            if (possibleMFs.mfs.length > 0) {\n                entry.fragments.nbFound++;\n                entry.fragments.intensityFound += peak.y;\n                entry.fragments.assignments.push({\n                    peak,\n                    bestMF: possibleMFs.mfs[0],\n                });\n            }\n        }\n    }\n}\n//# sourceMappingURL=appendFragmentsInfo.js.map","'use strict';\n\n/**\n * Modify object a to join it with b and make the sum of each of the keys\n * @param {*} a\n * @param {*} source1\n *\n * @return {object}\n */\n\nfunction sum(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        let toSum = arguments[i];\n        for (var key of Object.keys(toSum)) {\n            if (target[key]) {\n                target[key] += toSum[key];\n            } else {\n                target[key] = toSum[key];\n            }\n        }\n    }\n    return target;\n}\n\nmodule.exports = sum;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateMFs = generateMFs;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst sum_object_keys_1 = __importDefault(require(\"sum-object-keys\"));\n/**\n * Generate all the possible combinations of molecular formula and calculate\n * for each of them the monoisotopic mass and observed monoisotopic mass (m/z)\n * In the molecular formula there may be a comment after the '$' symbol\n *\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {number}        [options.limit=10000000] - Maximum number of results\n * @param {boolean}       [options.estimate=false] - estimate the number of MF without filters\n * @param {boolean}       [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean}       [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {function}      [options.onStep] - Callback to do after each step\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @param {string}        [options.filterFct]\n * @param {object}        [options.links]\n * @param {boolean}       [options.links.filter] We filter all the MF that do not match the '*X'\n * @returns {Promise}\n */\nasync function generateMFs(ranges, options = {}) {\n    if (!Array.isArray(ranges)) {\n        throw new Error('Ranges must be an array of string or object');\n    }\n    options = { ...options };\n    let { limit = 100000, uniqueMFs = true, estimate = false, onStep, filterFct, canonizeMF, ionizations: rawIonizations, } = options;\n    let filterFctVariables = {};\n    for (let i = 0; i < ranges.length; i++) {\n        const range = ranges[i];\n        if (typeof range === 'object' && range.name) {\n            filterFctVariables[range.name] = i;\n            ranges[i] = range.value;\n        }\n    }\n    if (filterFct) {\n        // we create a real javascript function\n        let variables = Object.keys(filterFctVariables);\n        variables.push('mm', 'mz', 'charge', 'unsaturation', 'atoms');\n        // eslint-disable-next-line no-new-func\n        filterFct = new Function(...variables, `return ${filterFct}`);\n    }\n    if (uniqueMFs === true)\n        canonizeMF = true;\n    if (canonizeMF === undefined)\n        canonizeMF = true;\n    const ionizations = (0, mf_utilities_1.preprocessIonizations)(rawIonizations);\n    options = {\n        ...options,\n        filterFctVariables,\n        filterFct,\n        canonizeMF,\n        ionizations,\n    };\n    // we allow String delimited by \". or ;\" instead of an array\n    for (let i = 0; i < ranges.length; i++) {\n        if (!Array.isArray(ranges[i])) {\n            ranges[i] = ranges[i].split(/[,.]/);\n        }\n    }\n    // we allow ranges in a string ...\n    // problem with ranges is that we need to know to what the range applies\n    for (let i = 0; i < ranges.length; i++) {\n        let parts = ranges[i];\n        let newParts = [];\n        for (let j = 0; j < parts.length; j++) {\n            let part = parts[j];\n            if (part.match(/\\d-[\\d-]/)) {\n                // deal with negative numbers\n                // there are ranges ... we are in trouble !\n                newParts = newParts.concat(new mf_parser_1.MF(part).flatten({ groupIdentical: false, limit }));\n            }\n            else {\n                newParts.push(parts[j]); // the part with the comments !\n            }\n        }\n        ranges[i] = newParts;\n    }\n    if (estimate) {\n        let total = ranges.reduce((previous, current) => previous * current.length, 1);\n        return total * ionizations.length;\n    }\n    let results = [];\n    let sizes = [];\n    let currents = [];\n    for (let i = 0; i < ranges.length; i++) {\n        sizes.push(ranges[i].length - 1);\n        currents.push(0);\n    }\n    let position = 0;\n    let evolution = 0;\n    while (position < currents.length) {\n        if (currents[position] < sizes[position]) {\n            if (onStep)\n                await onStep(evolution);\n            evolution++;\n            appendResult(results, currents, ranges, options);\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = 0;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (evolution > limit) {\n            throw new Error(`You have reached the limit of ${limit}. You could still change this value using the limit option but it is likely to crash.`);\n        }\n    }\n    appendResult(results, currents, ranges, options);\n    if (uniqueMFs) {\n        let uniqueMFsObject = {};\n        for (const result of results) {\n            uniqueMFsObject[result.mf + result.ionization.mf] = result;\n        }\n        results = Object.keys(uniqueMFsObject).map((k) => uniqueMFsObject[k]);\n    }\n    results.sort((a, b) => a.em - b.em);\n    return results;\n}\nlet ems = {};\n// internal method used as a cache\nfunction getMonoisotopicMass(mfString) {\n    if (!ems[mfString]) {\n        // we need to calculate based on the mf but not very often ...\n        let mf = new mf_parser_1.MF(mfString);\n        let info = mf.getInfo();\n        ems[mfString] = {\n            em: info.monoisotopicMass,\n            charge: info.charge,\n            mw: info.mass,\n            unsaturation: (info.unsaturation - 1) * 2,\n            atoms: info.atoms,\n        };\n    }\n    return ems[mfString];\n}\nfunction getEMFromParts(parts, currents, ionization) {\n    let charge = 0;\n    let em = 0;\n    let mw = 0;\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    let atoms = {};\n    for (let i = 0; i < parts.length; i++) {\n        let part = parts[i][currents[i]];\n        if (part) {\n            let info = getMonoisotopicMass(part);\n            charge += info.charge;\n            em += info.em;\n            mw += info.mw;\n            (0, sum_object_keys_1.default)(atoms, info.atoms);\n            if (info.unsaturation && validUnsaturation) {\n                unsaturation += info.unsaturation;\n            }\n        }\n    }\n    return {\n        charge,\n        em,\n        mw,\n        ionization,\n        unsaturation: validUnsaturation ? unsaturation / 2 + 1 : undefined,\n        atoms,\n    };\n}\nfunction appendResult(results, currents, keys, options = {}) {\n    const { canonizeMF, filter, ionizations, filterFct, filterFctVariables, links = {}, } = options;\n    // this script is designed to combine molecular formula\n    // that may contain comments after a \"$\" sign\n    // therefore we should put all the comments at the ned\n    if (links.filter) {\n        let sharps = [];\n        for (let i = 0; i < keys.length; i++) {\n            let anchors = keys[i][currents[i]].match(/#\\d+/g);\n            if (anchors)\n                sharps.push(...anchors);\n        }\n        if (sharps.length % 2 === 1)\n            return;\n        sharps = sharps.toSorted();\n        for (let i = 0; i < sharps.length; i += 2) {\n            if (sharps[i] !== sharps[i + 1])\n                return;\n        }\n    }\n    for (let ionization of ionizations) {\n        let result = getEMFromParts(keys, currents, ionization);\n        if (filterFct) {\n            let variables = [];\n            for (let key in filterFctVariables) {\n                variables.push(currents[filterFctVariables[key]]);\n            }\n            variables.push(result.em, (result.em + ionization.em - ionization.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(ionization.charge), result.charge + result.ionization.charge, result.unsaturation, result.atoms);\n            if (!filterFct(...variables))\n                continue;\n        }\n        result.parts = [];\n        result.mf = '';\n        let comments = [];\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i][currents[i]];\n            if (key) {\n                if (key.includes('$')) {\n                    comments.push(key.replace(/^[^$]*\\$/, ''));\n                    key = key.replace(/\\$.*/, '');\n                }\n                result.parts[i] = key;\n                result.mf += key;\n            }\n        }\n        if (comments.length > 0) {\n            result.comment = comments.join(' ');\n        }\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        if (canonizeMF) {\n            result.mf = new mf_parser_1.MF(result.mf).toMF();\n        }\n        results.push(result);\n    }\n}\n//# sourceMappingURL=generateMFs.js.map","let xAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getXAtomicNumber(molecule) {\n    if (!xAtomicNumber) {\n        const OCL = molecule.getOCL();\n        xAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('X', OCL.Molecule.cPseudoAtomX);\n    }\n    return xAtomicNumber;\n}\n//# sourceMappingURL=getXAtomicNumber.js.map","/**\n * Check if a specific atom is a sp3 carbon\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} atomID\n */\nexport function isCsp3(molecule, atomID) {\n    if (molecule.getAtomicNo(atomID) !== 6)\n        return false;\n    if (molecule.getAtomCharge(atomID) !== 0)\n        return false;\n    if (molecule.getImplicitHydrogens(atomID) + molecule.getConnAtoms(atomID) !==\n        4) {\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=isCsp3.js.map","/**\n * This method put all the chiral centers in the molecule in the same group and racemic\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @param {object} [options={}]\n * @param {object} [options.OCL] - openchemlib library\n */\nexport function makeRacemic(molecule) {\n    const { Molecule } = molecule.getOCL();\n    // if we don't calculate this we have 2 epimers\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n    // we need to make one group \"AND\" for chiral (to force to racemic, this means diastereotopic and not enantiotopic)\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomParity(i) !== Molecule.cAtomParityNone) {\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0); // changed to group 0; TLS 9.Nov.2015\n        }\n    }\n    // after the change we need to recalculate the CIP\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n}\n//# sourceMappingURL=makeRacemic.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Tag an atom to be able to visualize it\n * @param molecule\n * @param iAtom\n */\nexport function tagAtom(molecule, iAtom) {\n    const customLabel = `${molecule.getAtomLabel(iAtom)}*`;\n    molecule.setAtomCustomLabel(iAtom, customLabel);\n    if (molecule.getAtomicNo(iAtom) === 1) {\n        molecule.setAtomicNo(iAtom, getXAtomicNumber(molecule));\n    }\n    else {\n        // we can not use X because we would have problems with valencies if it is\n        // expanded hydrogens or not\n        // we can not only use a custom label because it does not count for the canonisation\n        molecule.setAtomMass(iAtom, molecule.getAtomMass(iAtom) + 5);\n    }\n    return customLabel;\n}\n//# sourceMappingURL=tagAtom.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\nimport { isCsp3 } from '../util/isCsp3.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns an array of hose code fragments for the specified molecule.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code fragments.\n */\nexport function getHoseCodesForAtomsAsFragments(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { allowedCustomLabels, minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, tagAtoms = [], tagAtomFct = tagAtom, } = options;\n    const rootAtoms = options.rootAtoms ? options.rootAtoms.slice() : [];\n    molecule = molecule.getCompactCopy();\n    if (tagAtoms.length > 0) {\n        internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct);\n    }\n    else {\n        // this force reordering of atoms in order to have hydrogens at the end\n        molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    }\n    if (rootAtoms.length === 0) {\n        for (let j = 0; j < molecule.getAllAtoms(); j++) {\n            if (allowedCustomLabels?.includes(molecule.getAtomCustomLabel(j) ?? '') ||\n                molecule.getAtomCustomLabel(j)) {\n                rootAtoms.push(j);\n            }\n        }\n    }\n    const fragments = [];\n    // keep track of the atoms when creating the fragment\n    const mappings = [];\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms());\n    for (let sphere = 0; sphere <= maxSphereSize; sphere++) {\n        if (max === 0) {\n            for (const rootAtom of rootAtoms) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        switch (kind) {\n                            case FULL_HOSE_CODE:\n                                atomMask[connAtom] = true;\n                                atomList[newMax++] = connAtom;\n                                break;\n                            case HOSE_CODE_CUT_C_SP3_SP3:\n                                if (!(isCsp3(molecule, atom) && isCsp3(molecule, connAtom))) {\n                                    atomMask[connAtom] = true;\n                                    atomList[newMax++] = connAtom;\n                                }\n                                break;\n                            default:\n                                throw new Error('getHoseCoesForAtom unknown kind');\n                        }\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        if (sphere >= minSphereSize) {\n            const fragment = new OCL.Molecule(0, 0);\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, mappings);\n            // we using atomMapNo field in order to keep track of the original atom number even if we remove hydrogens\n            for (let i = 0; i < fragment.getAllAtoms(); i++) {\n                fragment.setAtomMapNo(i, mappings.indexOf(i) + 1);\n            }\n            fragment.removeExplicitHydrogens();\n            makeRacemic(fragment);\n            // we encode atom characteristics in the query features\n            addQueryFeaturesAndRemoveMapNo(fragment, molecule);\n            fragments.push(fragment);\n        }\n    }\n    return fragments;\n}\n/**\n * If the atom is not an halogen, X or an hydrogen\n * we add query features to the atom\n * This includes aromaticity, ring size, number of hydrogens\n * @param fragment\n * @param molecule\n */\nfunction addQueryFeaturesAndRemoveMapNo(fragment, molecule) {\n    const Molecule = molecule.getOCL().Molecule;\n    for (let i = 0; i < fragment.getAllAtoms(); i++) {\n        const mapping = fragment.getAtomMapNo(i) - 1;\n        fragment.setAtomMapNo(i, 0);\n        if ([1, 9, 17, 35, 53, getXAtomicNumber(molecule)].includes(fragment.getAtomicNo(i))) {\n            continue;\n        }\n        // aromaticity\n        const isAromatic = molecule.isAromaticAtom(mapping);\n        if (isAromatic) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, true);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, false);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, true);\n        }\n        // cycles\n        const smallestRing = molecule.getAtomRingSize(mapping);\n        switch (smallestRing) {\n            case 0:\n                break;\n            case 3:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize3, true);\n                break;\n            case 4:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize4, true);\n                break;\n            case 5:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize5, true);\n                break;\n            case 6:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize6, true);\n                break;\n            case 7:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize7, true);\n                break;\n            default:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSizeLarge, true);\n        }\n        const nbHydrogens = molecule.getAllHydrogens(mapping);\n        if (nbHydrogens === 0) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, true);\n        }\n        if (nbHydrogens === 1) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, true);\n        }\n        if (nbHydrogens === 2) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, true);\n        }\n        if (nbHydrogens === 3) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, true);\n        }\n    }\n}\n// tagging atoms may change the order of the atoms because hydrogens must be at the end of the file\n// in order to remember the rootAtoms we will tag before\nfunction internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct) {\n    const OCL = molecule.getOCL();\n    if (tagAtoms) {\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            molecule.setAtomMapNo(i, i + 1);\n        }\n        if (tagAtoms.length > 0) {\n            for (const atom of tagAtoms) {\n                tagAtomFct(molecule, atom);\n            }\n        }\n    }\n    // this force reordering of atoms in order to have hydrogens at the end\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    if (rootAtoms.length > 0) {\n        const mapping = new Int32Array(molecule.getAllAtoms());\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            mapping[molecule.getAtomMapNo(i) - 1] = i;\n        }\n        for (let i = 0; i < rootAtoms.length; i++) {\n            rootAtoms[i] = mapping[rootAtoms[i]];\n        }\n    }\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsFragments.js.map","/**\n * Ensures that all atoms in the molecule have a unique mapNo.\n * Atoms that already have a mapNo keep it. Atoms without a mapNo\n * are assigned the next available number starting from 1.\n * Throws if the molecule contains duplicate mapNo values.\n * @param molecule - The molecule to process (modified in place)\n */\nexport function ensureMapNo(molecule) {\n    const existingMapNo = {};\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const mapNo = molecule.getAtomMapNo(i);\n        if (mapNo) {\n            if (existingMapNo[mapNo]) {\n                throw new Error('The molecule contains several atoms with the same mapNo');\n            }\n            existingMapNo[mapNo] = true;\n        }\n    }\n    let nextMapNo = 1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const mapNo = molecule.getAtomMapNo(i);\n        if (!mapNo) {\n            while (existingMapNo[nextMapNo]) {\n                nextMapNo++;\n            }\n            existingMapNo[nextMapNo] = true;\n            molecule.setAtomMapNo(i, nextMapNo, false);\n        }\n    }\n}\n//# sourceMappingURL=ensureMapNo.js.map","/**\n * Creates a compact copy of the molecule without custom labels.\n * We don't want that custom labels interfere with hose code and diaID generation.\n * @param molecule\n * @returns\n */\nexport function getCompactCopyWithoutCustomLabels(molecule) {\n    const tempMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < tempMolecule.getAllAtoms(); i++) {\n        tempMolecule.setAtomCustomLabel(i, '');\n    }\n    return tempMolecule;\n}\n//# sourceMappingURL=getCompactCopyWithoutCustomLabels.js.map","import { floydWarshall } from 'ml-floyd-warshall';\nimport { Matrix } from 'ml-matrix';\n/**\n * Returns a connectivity matrix\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.pathLength=false] - get the path length between atoms\n * @param {boolean} [options.mass=false] - set the nominal mass of the atoms on diagonal\n * @param {boolean} [options.atomicNo=false] - set the atomic number of the atom on diagonal\n * @param {boolean} [options.negativeAtomicNo=false] - set the atomic number * -1 of the atom on diagonal\n * @param {boolean} [options.sdt=false] - set 1, 2 or 3 depending if single, double or triple bond\n * @param {boolean} [options.sdta=false] - set 1, 2, 3 or 4 depending if single, double, triple or aromatic  bond\n */\nexport function getConnectivityMatrix(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const nbAtoms = molecule.getAllAtoms();\n    let result = new Array(nbAtoms).fill();\n    result = result.map(() => new Array(nbAtoms).fill(0));\n    if (!options.pathLength) {\n        if (options.atomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.negativeAtomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = -molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.mass) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = OCL.Molecule.cRoundedMass[molecule.getAtomicNo(i)];\n            }\n        }\n        else {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = 1;\n            }\n        }\n    }\n    if (options.sdt) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n            }\n        }\n    }\n    else if (options.sdta) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                const bondNumber = molecule.getConnBond(i, j);\n                if (molecule.isAromaticBond(bondNumber)) {\n                    result[i][molecule.getConnAtom(i, j)] = 4;\n                }\n                else {\n                    result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n                }\n            }\n        }\n    }\n    else {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = 1;\n            }\n        }\n    }\n    if (options.pathLength) {\n        result = floydWarshall(new Matrix(result)).to2DArray();\n    }\n    return result;\n}\n//# sourceMappingURL=getConnectivityMatrix.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Algorithm that finds the shortest distance from one node to the other\n * @param {Matrix} adjMatrix - A squared adjacency matrix\n * @return {Matrix} - Distance from a node to the other, -1 if the node is unreachable\n */\nexport function floydWarshall(adjMatrix) {\n    if (Matrix.isMatrix(adjMatrix) && adjMatrix.columns !== adjMatrix.rows) {\n        throw new TypeError('The adjacency matrix should be squared');\n    }\n    const numVertices = adjMatrix.columns;\n    let distMatrix = new Matrix(numVertices, numVertices);\n    distMatrix.apply((row, column) => {\n        // principal diagonal is 0\n        if (row === column) {\n            distMatrix.set(row, column, 0);\n        }\n        else {\n            let val = adjMatrix.get(row, column);\n            if (val || Object.is(val, -0)) {\n                // edges values remain the same\n                distMatrix.set(row, column, val);\n            }\n            else {\n                // 0 values become infinity\n                distMatrix.set(row, column, Number.POSITIVE_INFINITY);\n            }\n        }\n    });\n    for (let k = 0; k < numVertices; ++k) {\n        for (let i = 0; i < numVertices; ++i) {\n            for (let j = 0; j < numVertices; ++j) {\n                let dist = distMatrix.get(i, k) + distMatrix.get(k, j);\n                if (distMatrix.get(i, j) > dist) {\n                    distMatrix.set(i, j, dist);\n                }\n            }\n        }\n    }\n    // When there's no connection the value is -1\n    distMatrix.apply((row, column) => {\n        if (distMatrix.get(row, column) === Number.POSITIVE_INFINITY) {\n            distMatrix.set(row, column, -1);\n        }\n    });\n    return distMatrix;\n}\n//# sourceMappingURL=index.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\n/**\n * Computes a canonical ID for each atom in `moleculeWithH` by tagging it\n * and calling `getCanonizedIDCode`.\n * By default (`racemic: false`) the ID encodes absolute stereochemistry so\n * enantiomers produce distinct IDs — suitable as independent cache keys for\n * pro-R / pro-S assignment.\n * With `racemic: true` the probe is first racemized (same logic as `diaIDs`),\n * yielding IDs that are identical for both enantiomers.\n * @param topicMolecule\n * @param options\n */\nexport function getEnantioIDs(topicMolecule, options = {}) {\n    const { racemic = false } = options;\n    const moleculeWithH = topicMolecule.moleculeWithH;\n    const { Molecule } = moleculeWithH.getOCL();\n    const heterotopicSymmetryRanks = topicMolecule.heterotopicSymmetryRanks;\n    const ids = new Array(moleculeWithH.getAllAtoms());\n    const cache = {};\n    for (let i = 0; i < moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            ids[i] = cache[rank];\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(moleculeWithH);\n        tagAtom(tempMolecule, i);\n        if (racemic)\n            makeRacemic(tempMolecule);\n        const id = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        ids[i] = id;\n        if (rank)\n            cache[rank] = id;\n    }\n    return ids;\n}\n//# sourceMappingURL=getEnantioIDs.js.map","import { getHoseCodesForAtomsAsFragments } from './getHoseCodesForAtomsAsFragments.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code strings.\n */\nexport function getHoseCodesForAtomsAsStrings(molecule, options = {}) {\n    const fragments = getHoseCodesForAtomsAsFragments(molecule, options);\n    const OCL = molecule.getOCL();\n    const hoses = [];\n    for (const fragment of fragments) {\n        hoses.push(fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS));\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsStrings.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * Returns the atoms that are chiral or pseudo chiral.\n * There could be some issues if the original molecule lacks chiral bonds.\n * The function will add them and this could lead to some issues in the case of pseudochiral atoms.\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number[]}\n */\nexport function getChiralOrHeterotopicCarbons(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomicNumber = getXAtomicNumber(molecule);\n    const internalMolecule = molecule.getCompactCopy();\n    // hydrogens may be diastereotopic, we need to add them\n    internalMolecule.addImplicitHydrogens();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomicNumber);\n        }\n    }\n    addPossibleChiralBonds(internalMolecule);\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (internalMolecule.getAtomicNo(i) === xAtomicNumber) {\n            continue;\n        }\n        if (molecule.getAtomicNo(i) !== internalMolecule.getAtomicNo(i)) {\n            throw new Error('getChiralOrHeterotopicCarbons: mismatching atomic numbers');\n        }\n        if (internalMolecule.getAtomicNo(i) !== 6) {\n            continue;\n        }\n        const neighbourSymmetries = getNeighbourSymmetries(internalMolecule, i);\n        if (neighbourSymmetries.length === 4) {\n            atoms.push(i);\n        }\n    }\n    return atoms;\n}\nfunction addPossibleChiralBonds(molecule) {\n    const { Molecule } = molecule.getOCL();\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    for (let i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) !== 6)\n            continue;\n        if (molecule.getStereoBond(i) >= 0)\n            continue;\n        const neighbourSymmetries = getNeighbourSymmetries(molecule, i);\n        if (neighbourSymmetries.length <= 2)\n            continue;\n        const stereoBond = molecule.getAtomPreferredStereoBond(i);\n        if (stereoBond !== -1) {\n            molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n            if (molecule.getBondAtom(1, stereoBond) === i) {\n                const connAtom = molecule.getBondAtom(0, stereoBond);\n                molecule.setBondAtom(0, stereoBond, i);\n                molecule.setBondAtom(1, stereoBond, connAtom);\n            }\n            // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0);\n        }\n    }\n}\nfunction getNeighbourSymmetries(molecule, iAtom) {\n    const neighbourSymmetries = [];\n    for (let j = 0; j < molecule.getAllConnAtoms(iAtom); j++) {\n        const connAtom = molecule.getConnAtom(iAtom, j);\n        const symmetryRank = molecule.getSymmetryRank(connAtom);\n        if (!neighbourSymmetries.includes(symmetryRank)) {\n            neighbourSymmetries.push(molecule.getSymmetryRank(connAtom));\n        }\n    }\n    return neighbourSymmetries;\n}\n//# sourceMappingURL=getChiralOrHeterotopicCarbons.js.map","import { getChiralOrHeterotopicCarbons } from './getChiralOrHeterotopicCarbons.js';\n/**\n * This function will add missing chiral bonds on carbons ensure that all enantiotopic\n * or diastereotopic atoms can be identified uniquely\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {number} [options.esrType=Molecule.cESRTypeAnd]\n * @param {boolean} [options.atLeastThreeAtoms=true] - if true, only carbons with at least three atoms will be considered\n */\nexport function ensureHeterotopicChiralBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { esrType = Molecule.cESRTypeAnd, atLeastThreeAtoms = true } = options;\n    molecule.ensureHelperArrays(Molecule.cHelperBitNeighbours);\n    const heterotopicCarbons = getChiralOrHeterotopicCarbons(molecule);\n    for (const i of heterotopicCarbons) {\n        if (atLeastThreeAtoms && molecule.getAllConnAtoms(i) < 3)\n            continue;\n        if (molecule.getStereoBond(i) === -1) {\n            const stereoBond = molecule.getAtomPreferredStereoBond(i);\n            if (stereoBond !== -1) {\n                molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n                if (molecule.getBondAtom(1, stereoBond) === i) {\n                    const connAtom = molecule.getBondAtom(0, stereoBond);\n                    molecule.setBondAtom(0, stereoBond, i);\n                    molecule.setBondAtom(1, stereoBond, connAtom);\n                }\n                // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n                molecule.setAtomESR(i, esrType, 0);\n            }\n        }\n    }\n}\n//# sourceMappingURL=ensureHeterotopicChiralBonds.js.map","import { getHoseCodesForAtomsAsFragments } from '../hose/getHoseCodesForAtomsAsFragments.js';\nimport { getAllAtomsPaths } from \"../path/getAllAtomsPaths.js\";\nimport { ensureMapNo } from \"../util/ensureMapNo.js\";\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getCanonizedDiaIDs } from \"./getCanonizedDiaIDs.js\";\nimport { getCanonizedHoseCodes } from \"./getCanonizedHoseCodes.js\";\nimport { getCanonizedHoseCodesForPath } from \"./getCanonizedHoseCodesForPaths.js\";\nimport { getDiaIDsAndInfo } from \"./getDiaIDsAndInfo.js\";\nimport { getEnantioIDs } from \"./getEnantioIDs.js\";\nimport { getFinalRanks, getHeterotopicSymmetryRanks, } from \"./getHeterotopicSymmetryRanks.js\";\nimport { getMoleculeWithH } from \"./getMoleculeWithH.js\";\nimport { getXMolecule } from \"./getXMolecule.js\";\n/**\n * This class deals with topicity information and hose codes\n * It is optimized to avoid recalculation of the same information\n */\nexport class TopicMolecule {\n    originalMolecule;\n    molecule;\n    idCode;\n    options;\n    cache;\n    constructor(molecule, options = {}) {\n        this.originalMolecule = molecule;\n        this.options = {\n            maxPathLength: 5,\n            maxNbAtoms: 250,\n            logger: console,\n            ...options,\n        };\n        this.idCode = molecule.getIDCode();\n        this.molecule = this.originalMolecule.getCompactCopy();\n        this.molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        this.molecule.ensureHelperArrays(this.molecule.getOCL().Molecule.cHelperNeighbours);\n        this.cache = {};\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo corresponding to the atom number.\n     * It will enforce mapNo in molecule and moleculeWithH\n     * We start numbering the atoms at 1\n     */\n    setAtomNoInMapNo() {\n        const molecules = [this.molecule, this.moleculeWithH];\n        for (const molecule of molecules) {\n            for (let i = 0; i < molecule.getAllAtoms(); i++) {\n                molecule.setAtomMapNo(i, i + 1, false);\n            }\n        }\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo in the molecule (and not the moleculeWithH! )\n     */\n    ensureMapNo() {\n        ensureMapNo(this.molecule);\n    }\n    /**\n     * For each atom we will return an array of objects that contains the\n     * different possible path as well as the canonic hose codes\n     * @param options\n     * @returns\n     */\n    getHoseCodesForPath(options = {}) {\n        return getCanonizedHoseCodesForPath(this, options);\n    }\n    /**\n     * Return one fragment for a specific sphere size and specific root atoms\n     * @param rootAtoms\n     * @param options\n     * @returns\n     */\n    getHoseFragment(rootAtoms, options = {}) {\n        const { sphereSize = 2, tagAtoms = rootAtoms, tagAtomFct } = options;\n        const fragments = getHoseCodesForAtomsAsFragments(this.moleculeWithH, {\n            rootAtoms,\n            minSphereSize: sphereSize,\n            maxSphereSize: sphereSize,\n            tagAtoms,\n            tagAtomFct,\n        });\n        return fragments[0];\n    }\n    getAtomPathsFrom(atom, options = {}) {\n        const { minPathLength = 1, maxPathLength = this.options.maxPathLength, toAtomicNo, } = options;\n        if (maxPathLength > this.options.maxPathLength) {\n            throw new Error('The maxPathLength is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const paths = [];\n        for (let i = minPathLength; i <= maxPathLength; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (!toAtomicNo ||\n                    this.moleculeWithH.getAtomicNo(atomPath.path.at(-1)) ===\n                        toAtomicNo) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    getAtomPaths(atom1, atom2, options = {}) {\n        const { pathLength } = options;\n        if (pathLength !== undefined && pathLength > this.options.maxPathLength) {\n            throw new Error('The distance is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom1];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const minDistance = pathLength || 0;\n        const maxDistance = pathLength || this.options.maxPathLength;\n        const paths = [];\n        for (let i = minDistance; i <= maxDistance; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (atomPath.path.at(-1) === atom2) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    get atomsPaths() {\n        if (this.cache.atomsPaths)\n            return this.cache.atomsPaths;\n        this.cache.atomsPaths = getAllAtomsPaths(this.moleculeWithH, {\n            maxPathLength: this.options.maxPathLength,\n        });\n        return this.cache.atomsPaths;\n    }\n    toMolfile(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.molecule.toMolfile();\n        }\n        return this.molecule.toMolfileV3();\n    }\n    getMolecule() {\n        return this.molecule;\n    }\n    /**\n     * Returns a new TopicMolecule but will copy precalculated information\n     * if possible (same idCode). This is very practical when expanding hydrogens\n     * for example.\n     * @param molecule\n     * @returns\n     */\n    fromMolecule(molecule) {\n        const idCode = molecule.getIDCode();\n        if (idCode !== this.idCode) {\n            // no way for optimisation\n            return new TopicMolecule(molecule);\n        }\n        const topicMolecule = new TopicMolecule(molecule);\n        topicMolecule.cache = {\n            canonizedDiaIDs: this.cache.canonizedDiaIDs,\n            canonizedHoseCodes: this.cache.canonizedHoseCodes,\n            prochiralityByEnantioID: this.cache.prochiralityByEnantioID,\n        };\n        return topicMolecule;\n    }\n    /**\n     * Returns a molecule with all the hydrogens added. The order is NOT canonized\n     */\n    get moleculeWithH() {\n        if (this.cache.moleculeWithH)\n            return this.cache.moleculeWithH;\n        this.cache.moleculeWithH = getMoleculeWithH(this.molecule, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.moleculeWithH;\n    }\n    get xMolecule() {\n        if (this.cache.xMolecule)\n            return this.cache.xMolecule;\n        this.cache.xMolecule = getXMolecule(this.moleculeWithH);\n        return this.cache.xMolecule;\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get diaIDs() {\n        if (this.cache.diaIDs)\n            return this.cache.diaIDs;\n        const diaIDs = [];\n        if (this.moleculeWithH.getAllAtoms() > this.options.maxNbAtoms) {\n            this.options.logger.warn(`too many atoms to evaluate heterotopicity: ${this.moleculeWithH.getAllAtoms()} > ${this.options.maxNbAtoms}`);\n        }\n        else {\n            for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n                diaIDs.push(this.canonizedDiaIDs[this.finalRanks[i]]);\n            }\n        }\n        this.cache.diaIDs = diaIDs;\n        return diaIDs;\n    }\n    /**\n     * Computes a canonical ID for each atom in `moleculeWithH` that encodes\n     * absolute stereochemistry (no `makeRacemic` step). Unlike `diaIDs`,\n     * these IDs differ between enantiomers and are used as cache keys for\n     * pro-R / pro-S assignment so that each enantiomer gets an independent\n     * computation.\n     */\n    get enantioIDs() {\n        if (this.cache.enantioIDs)\n            return this.cache.enantioIDs;\n        this.cache.enantioIDs =\n            this.moleculeWithH.getAllAtoms() <= this.options.maxNbAtoms\n                ? getEnantioIDs(this)\n                : [];\n        return this.cache.enantioIDs;\n    }\n    /**\n     * We return the atomIDs corresponding to the specified diaID as well has the attached hydrogens or heavy atoms\n     * @param diaID\n     * @returns\n     */\n    getDiaIDsObject() {\n        return groupDiastereotopicAtomIDsAsObject(this.diaIDs, this.molecule, this.moleculeWithH);\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get hoseCodes() {\n        if (this.cache.hoseCodes)\n            return this.cache.hoseCodes;\n        const hoseCodes = [];\n        for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n            hoseCodes.push(this.canonizedHoseCodes[this.finalRanks[i]]);\n        }\n        this.cache.hoseCodes = hoseCodes;\n        return hoseCodes;\n    }\n    get canonizedDiaIDs() {\n        if (this.cache.canonizedDiaIDs)\n            return this.cache.canonizedDiaIDs;\n        if (this.moleculeWithH.getAllAtoms() > this.options.maxNbAtoms) {\n            this.options.logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${this.moleculeWithH.getAllAtoms()} > ${this.options.maxNbAtoms}`);\n            this.cache.canonizedDiaIDs = [];\n            return [];\n        }\n        this.cache.canonizedDiaIDs = getCanonizedDiaIDs(this);\n        return this.cache.canonizedDiaIDs;\n    }\n    get canonizedHoseCodes() {\n        if (this.cache.canonizedHoseCodes) {\n            return this.cache.canonizedHoseCodes;\n        }\n        this.cache.canonizedHoseCodes = getCanonizedHoseCodes(this);\n        return this.cache.canonizedHoseCodes;\n    }\n    /**\n     * Returns the distance matrix for the current moleculeWithH\n     */\n    get distanceMatrix() {\n        return getConnectivityMatrix(this.moleculeWithH, { pathLength: true });\n    }\n    get diaIDsAndInfo() {\n        if (this.cache.diaIDsAndInfo) {\n            return this.cache.diaIDsAndInfo;\n        }\n        this.cache.diaIDsAndInfo = getDiaIDsAndInfo(this, this.canonizedDiaIDs);\n        return this.cache.diaIDsAndInfo;\n    }\n    /**\n     * Returns symmetryRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get heterotopicSymmetryRanks() {\n        if (this.cache.heterotopicSymmetryRanks) {\n            return this.cache.heterotopicSymmetryRanks;\n        }\n        this.cache.heterotopicSymmetryRanks = getHeterotopicSymmetryRanks(this.xMolecule);\n        return [...this.cache.heterotopicSymmetryRanks];\n    }\n    /**\n     * Returns finalRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * All the atoms have a unique identifier.j\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get finalRanks() {\n        if (this.cache.finalRanks)\n            return this.cache.finalRanks;\n        this.cache.finalRanks = getFinalRanks(this.xMolecule);\n        return this.cache.finalRanks;\n    }\n    toMolfileWithH(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.moleculeWithH.toMolfile();\n        }\n        return this.moleculeWithH.toMolfileV3();\n    }\n    toMolfileWithoutH(options = {}) {\n        const molecule = this.molecule.getCompactCopy();\n        molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        const atomsToDelete = [];\n        for (let atomID = 0; atomID < molecule.getAtoms(); atomID++) {\n            if (molecule.getExplicitHydrogens(atomID) > 0) {\n                for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n                    const connectedAtom = molecule.getConnAtom(atomID, i);\n                    if (molecule.getAtomicNo(connectedAtom) === 1) {\n                        atomsToDelete.push(connectedAtom);\n                    }\n                }\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n        const { version = 2 } = options;\n        if (version === 2) {\n            return molecule.toMolfile();\n        }\n        return molecule.toMolfileV3();\n    }\n    /**\n     * Returns an array of objects containing the oclID and the corresponding hydrogens and atoms\n     * for the specified atomLabel (if any)\n     * This always applied to the molecule with expanded hydrogens and chirality\n     * @param options\n     * @returns\n     */\n    getGroupedDiastereotopicAtomIDs(options = {}) {\n        if (!this.diaIDs)\n            return undefined;\n        return groupDiastereotopicAtomIDs(this.diaIDs, this.moleculeWithH, options);\n    }\n    /**\n     * Returns an array, indexed by atom number in `moleculeWithH`, holding the\n     * pro-R / pro-S descriptor (`'r'` or `'s'`) for every hydrogen of a CH2\n     * whose two hydrogens are diastereotopic. Atoms that are not labelled\n     * prochiral hydrogens hold `undefined`. The underlying hash\n     * (`prochiralityByEnantioID`) is keyed by `enantioID`, which encodes\n     * absolute stereochemistry, so two enantiomers receive independent\n     * assignments. Hydrogens are never R or S themselves (that is a\n     * stereocenter descriptor), so the label is always lowercase regardless\n     * of whether the prochiral carbon is a true or a pseudoasymmetric centre.\n     * The assignment is determined by replacing one H with a higher-priority\n     * pseudo-atom (via `tagAtom`) and reading `getAtomCIPParity` of the carbon.\n     * @returns array of `'r'` / `'s'` / `undefined` indexed by atom number\n     */\n    get prochiralities() {\n        if (this.cache.prochiralities)\n            return this.cache.prochiralities;\n        const map = this.prochiralityByEnantioID;\n        const enantioIDs = this.enantioIDs;\n        const result = new Array(enantioIDs.length);\n        for (let atom = 0; atom < enantioIDs.length; atom++) {\n            result[atom] = map[enantioIDs[atom]];\n        }\n        this.cache.prochiralities = result;\n        return result;\n    }\n    /**\n     * Hash from `enantioID` to the pro-R / pro-S descriptor (`'r'` or `'s'`).\n     * Only entries for hydrogens that actually carry a prochiral descriptor\n     * are present. Keyed by absolute IDs (no `makeRacemic`), so enantiomers\n     * get independent entries. Transferred across instances by `fromMolecule()`.\n     * @returns map from enantioID string to `'r'` or `'s'`\n     */\n    get prochiralityByEnantioID() {\n        if (this.cache.prochiralityByEnantioID) {\n            return this.cache.prochiralityByEnantioID;\n        }\n        this.cache.prochiralityByEnantioID = computeProchiralityByEnantioID(this);\n        return this.cache.prochiralityByEnantioID;\n    }\n    /**\n     * Set a pro-R / pro-S `customLabel` on each diastereotopic CH2 hydrogen,\n     * appended as lowercase `r` or `s`. Idempotent: calling it again replaces\n     * any trailing pro-R / pro-S letter rather than stacking. The label is\n     * appended to whatever `customLabel` the hydrogen already has, falling\n     * back to the parent carbon's `customLabel` when the hydrogen has none.\n     * Both `molecule` and `moleculeWithH` are labelled in place, sharing the\n     * same cached `prochiralityByEnantioID` hash; on `molecule` only hydrogens\n     * that are explicit (i.e. exist as atoms there) receive a label.\n     * Repeated calls do no extra CIP work.\n     * @returns The number of hydrogens labelled in `moleculeWithH`\n     */\n    setProchiralHydrogenLabels() {\n        const moleculeWithH = this.moleculeWithH;\n        const molecule = this.molecule;\n        const moleculeAtoms = molecule.getAllAtoms();\n        const map = this.prochiralityByEnantioID;\n        const enantioIDs = this.enantioIDs;\n        let count = 0;\n        for (let atom = 0; atom < enantioIDs.length; atom++) {\n            const letter = map[enantioIDs[atom]];\n            if (!letter)\n                continue;\n            appendProchiralLabel(moleculeWithH, atom, moleculeWithH.getConnAtom(atom, 0), letter);\n            count++;\n            if (atom < moleculeAtoms && molecule.getAtomicNo(atom) === 1) {\n                appendProchiralLabel(molecule, atom, molecule.getConnAtom(atom, 0), letter);\n            }\n        }\n        return count;\n    }\n    /**\n     * Remove a trailing pro-R / pro-S character (`r` or `s`) from the\n     * `customLabel` of every hydrogen that carries one, in both `molecule`\n     * and `moleculeWithH`. Idempotent. Hydrogens whose `customLabel` does\n     * not end with `r` or `s` are left untouched.\n     * @returns The number of labels that were stripped from `moleculeWithH`\n     */\n    removeProchiralHydrogenLabels() {\n        const count = stripTrailingProchiralLetter(this.moleculeWithH);\n        stripTrailingProchiralLetter(this.molecule);\n        return count;\n    }\n    /**\n     * This method returns a mapping between the diaIDs of the current molecule.\n     * It expects that the initial molfile and the final molfile contains atomMapNo\n     * in order to track which atom becomes which one.\n     * @param molecule\n     */\n    getDiaIDsMapping(molecule) {\n        const topicMolecule = new TopicMolecule(molecule);\n        const originalDiaIDs = this.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const destinationDiaIDs = topicMolecule.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const mapping = {};\n        // we first check all the atoms present in the molfile\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            const newIDCode = destinationDiaID.idCode;\n            const oldIDCode = originalDiaID.idCode;\n            if (oldIDCode in mapping) {\n                if (mapping[oldIDCode] !== newIDCode) {\n                    mapping[oldIDCode] = undefined;\n                }\n            }\n            else {\n                mapping[oldIDCode] = newIDCode;\n            }\n        }\n        // we now check all the attached hydrogens that are not defined in the molfile and were not yet mapped\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            for (let i = 0; i < originalDiaID.attachedHydrogensIDCodes.length; i++) {\n                const oldHydrogenIDCode = originalDiaID.attachedHydrogensIDCodes.at(i);\n                if (mapping[oldHydrogenIDCode])\n                    continue;\n                const newHydrogenIDCode = destinationDiaID.attachedHydrogensIDCodes[i];\n                if (oldHydrogenIDCode && newHydrogenIDCode) {\n                    if (oldHydrogenIDCode in mapping) {\n                        if (mapping[oldHydrogenIDCode] !== newHydrogenIDCode) {\n                            mapping[oldHydrogenIDCode] = undefined;\n                        }\n                    }\n                    else {\n                        mapping[oldHydrogenIDCode] = newHydrogenIDCode;\n                    }\n                }\n            }\n        }\n        return mapping;\n    }\n}\nfunction computeProchiralityByEnantioID(topicMolecule) {\n    const target = topicMolecule.moleculeWithH;\n    const { Molecule } = target.getOCL();\n    const enantioIDs = topicMolecule.enantioIDs;\n    const result = {};\n    for (let atom = 0; atom < target.getAllAtoms(); atom++) {\n        if (target.getAtomicNo(atom) !== 6)\n            continue;\n        const hydrogens = [];\n        let nonHydrogenCount = 0;\n        for (let j = 0; j < target.getAllConnAtoms(atom); j++) {\n            const connected = target.getConnAtom(atom, j);\n            if (target.getAtomicNo(connected) === 1) {\n                hydrogens.push(connected);\n            }\n            else {\n                nonHydrogenCount++;\n            }\n        }\n        if (hydrogens.length !== 2 || nonHydrogenCount !== 2)\n            continue;\n        const enantioID0 = enantioIDs[hydrogens[0]];\n        const enantioID1 = enantioIDs[hydrogens[1]];\n        if (enantioID0 === enantioID1)\n            continue;\n        if (result[enantioID0] && result[enantioID1])\n            continue;\n        const probe = getCompactCopyWithoutCustomLabels(target);\n        tagAtom(probe, hydrogens[0]);\n        probe.ensureHelperArrays(Molecule.cHelperCIP);\n        const cipParity = probe.getAtomCIPParity(atom);\n        if (cipParity === Molecule.cAtomCIPParityRorM) {\n            result[enantioID0] = 'r';\n            result[enantioID1] = 's';\n        }\n        else if (cipParity === Molecule.cAtomCIPParitySorP) {\n            result[enantioID0] = 's';\n            result[enantioID1] = 'r';\n        }\n    }\n    return result;\n}\nfunction appendProchiralLabel(molecule, hydrogen, parent, letter) {\n    const existing = molecule.getAtomCustomLabel(hydrogen);\n    if (existing) {\n        molecule.setAtomCustomLabel(hydrogen, existing.replace(/[rs]$/, '') + letter);\n        return;\n    }\n    const parentLabel = molecule.getAtomCustomLabel(parent);\n    if (parentLabel) {\n        molecule.setAtomCustomLabel(hydrogen, parentLabel + letter);\n        return;\n    }\n    molecule.setAtomCustomLabel(hydrogen, letter);\n}\nfunction stripTrailingProchiralLetter(molecule) {\n    let count = 0;\n    for (let atom = 0; atom < molecule.getAllAtoms(); atom++) {\n        if (molecule.getAtomicNo(atom) !== 1)\n            continue;\n        const customLabel = molecule.getAtomCustomLabel(atom);\n        if (!customLabel)\n            continue;\n        const stripped = customLabel.replace(/[rs]$/, '');\n        if (stripped === customLabel)\n            continue;\n        molecule.setAtomCustomLabel(atom, stripped || null);\n        count++;\n    }\n    return count;\n}\nexport function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const diaIDsObject = groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, molecule, options);\n    return Object.values(diaIDsObject);\n}\nfunction groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, moleculeWithH, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || moleculeWithH.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    oclID: diaID,\n                    atomLabel: moleculeWithH.getAtomLabel(i),\n                    atoms: [],\n                    existingAtoms: [],\n                    heavyAtoms: [],\n                    attachedHydrogens: [],\n                    customLabels: [],\n                    attachedHydrogensCustomLabels: [],\n                    heavyAtomsCustomLabels: [],\n                };\n            }\n            const customLabel = moleculeWithH\n                .getAtomCustomLabel(i)\n                ?.replace(/^\\]/, '');\n            if (customLabel &&\n                !diaIDsObject[diaID].customLabels.includes(customLabel)) {\n                diaIDsObject[diaID].customLabels.push(customLabel);\n            }\n            if (moleculeWithH.getAtomicNo(i) === 1) {\n                const connected = moleculeWithH.getConnAtom(i, 0);\n                if (!diaIDsObject[diaID].heavyAtoms.includes(connected)) {\n                    diaIDsObject[diaID].heavyAtoms.push(connected);\n                }\n                const heavyAtomCustomLabel = molecule\n                    .getAtomCustomLabel(connected)\n                    ?.replace(/^\\]/, '');\n                if (heavyAtomCustomLabel &&\n                    !diaIDsObject[diaID].heavyAtomsCustomLabels.includes(heavyAtomCustomLabel)) {\n                    diaIDsObject[diaID].heavyAtomsCustomLabels.push(heavyAtomCustomLabel);\n                }\n                if (molecule.getAtomicNo(i)) {\n                    diaIDsObject[diaID].existingAtoms.push(i);\n                }\n                else if (!diaIDsObject[diaID].existingAtoms.includes(connected)) {\n                    diaIDsObject[diaID].existingAtoms.push(connected);\n                }\n            }\n            else {\n                for (let j = 0; j < moleculeWithH.getAllConnAtoms(i); j++) {\n                    const connected = moleculeWithH.getConnAtom(i, j);\n                    if (moleculeWithH.getAtomicNo(connected) === 1) {\n                        const attachedHydrogenCustomLabel = molecule\n                            .getAtomCustomLabel(connected)\n                            ?.replace(/^\\]/, '');\n                        if (attachedHydrogenCustomLabel &&\n                            !diaIDsObject[diaID].attachedHydrogensCustomLabels.includes(attachedHydrogenCustomLabel)) {\n                            diaIDsObject[diaID].attachedHydrogensCustomLabels.push(attachedHydrogenCustomLabel);\n                        }\n                        diaIDsObject[diaID].attachedHydrogens.push(connected);\n                    }\n                }\n                diaIDsObject[diaID].existingAtoms.push(i);\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    for (const diaIDObject of Object.values(diaIDsObject)) {\n        diaIDObject.existingAtoms.sort((a, b) => a - b);\n        diaIDObject.attachedHydrogens.sort((a, b) => a - b);\n    }\n    return diaIDsObject;\n}\n//# sourceMappingURL=TopicMolecule.js.map","import { getHoseCodesForAtomsAsStrings } from \"../hose/getHoseCodesForAtomsAsStrings.js\";\n/**\n * For each atom we will return an array of objects\n * @param topicMolecule\n * @param options\n * @returns\n */\nexport function getCanonizedHoseCodesForPath(topicMolecule, options = {}) {\n    const { minPathLength = 0, maxPathLength = topicMolecule.options.maxPathLength, toAtomicNo, fromAtomicNo, } = options;\n    if (maxPathLength > topicMolecule.options.maxPathLength) {\n        throw new Error(`maxPathLength cannot be larger than the one defined in topicMolecule: ${topicMolecule.options.maxPathLength}`);\n    }\n    const atomsPaths = topicMolecule.atomsPaths;\n    const molecule = topicMolecule.moleculeWithH;\n    const results = new Array(molecule.getAllAtoms());\n    for (let fromAtom = 0; fromAtom < molecule.getAllAtoms(); fromAtom++) {\n        results[fromAtom] = {\n            fromDiaID: topicMolecule.diaIDs[fromAtom],\n            paths: [],\n        };\n        if (fromAtomicNo && molecule.getAtomicNo(fromAtom) !== fromAtomicNo) {\n            continue;\n        }\n        for (let pathLength = minPathLength; pathLength <= maxPathLength; pathLength++) {\n            const pathOfSpecificLength = atomsPaths[fromAtom][pathLength];\n            for (const path of pathOfSpecificLength) {\n                const toAtom = path.path.at(-1);\n                if (toAtomicNo && molecule.getAtomicNo(toAtom) !== toAtomicNo) {\n                    continue;\n                }\n                results[fromAtom].paths.push({\n                    toDiaID: topicMolecule.diaIDs[toAtom],\n                    pathLength: path.pathLength,\n                    path: path.path,\n                    hoses: getHoseCodesForAtomsAsStrings(topicMolecule.moleculeWithH, {\n                        ...options,\n                        rootAtoms: path.path,\n                        tagAtoms: [fromAtom, toAtom],\n                    }),\n                });\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getCanonizedHoseCodesForPaths.js.map","/**\n * We need to create an array of atoms\n * that contains an array of pathLength\n * that contains an array of object\n * @param molecule\n * @param options\n * @returns\n */\nexport function getAllAtomsPaths(molecule, options = {}) {\n    const { maxPathLength = 5 } = options;\n    const allAtomsPaths = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const oneAtomPaths = [];\n        allAtomsPaths.push(oneAtomPaths);\n        let atomPaths = [{ path: [i], pathLength: 0 }];\n        oneAtomPaths.push(atomPaths);\n        let nextIndexes = [0];\n        let nextAtoms = [i];\n        for (let sphere = 1; sphere <= maxPathLength; sphere++) {\n            atomPaths = [];\n            oneAtomPaths.push(atomPaths);\n            const currentIndexes = nextIndexes;\n            const currentAtoms = nextAtoms;\n            nextIndexes = [];\n            nextAtoms = [];\n            for (let i = 0; i < currentIndexes.length; i++) {\n                const atom = currentAtoms[i];\n                const index = currentIndexes[i];\n                const previousPath = oneAtomPaths[sphere - 1]?.[index]?.path;\n                if (!previousPath) {\n                    throw new Error(`Unexpected missing previousPath for sphere ${sphere - 1} and index ${index}`);\n                }\n                for (let conn = 0; conn < molecule.getAllConnAtoms(atom); conn++) {\n                    const connectedAtom = molecule.getConnAtom(atom, conn);\n                    if (previousPath.includes(connectedAtom))\n                        continue;\n                    nextIndexes.push(atomPaths.length);\n                    nextAtoms.push(connectedAtom);\n                    atomPaths.push({\n                        path: [...previousPath, connectedAtom],\n                        pathLength: sphere,\n                    });\n                }\n            }\n        }\n    }\n    return allAtomsPaths;\n}\n//# sourceMappingURL=getAllAtomsPaths.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\n/**\n * Expand all the implicit hydrogens and ensure chiral bonds on heterotopic bonds\n * @param molecule\n * @param options\n * @returns\n */\nexport function getMoleculeWithH(molecule, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = molecule.getCompactCopy();\n    moleculeWithH.addImplicitHydrogens();\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n    }\n    else {\n        ensureHeterotopicChiralBonds(moleculeWithH);\n    }\n    return moleculeWithH;\n}\n//# sourceMappingURL=getMoleculeWithH.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * In order to be able to give a unique ID to all the atoms we are replacing the H by X\n * @param moleculeWithH\n * @returns\n */\nexport function getXMolecule(moleculeWithH) {\n    const xAtomNumber = getXAtomicNumber(moleculeWithH);\n    const xMolecule = moleculeWithH.getCompactCopy();\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (xMolecule.getAtomicNo(i) === 1) {\n            xMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    return xMolecule;\n}\n//# sourceMappingURL=getXMolecule.js.map","import { getEnantioIDs } from \"./getEnantioIDs.js\";\n/**\n * Computes canonical diastereotopic IDs indexed by `finalRanks` (not by atom\n * position). The rank-indexed layout is required so that the cached array can\n * be reused across `TopicMolecule` instances with the same `idCode` but\n * different atom orderings (see `fromMolecule`).\n * @param topicMolecule\n */\nexport function getCanonizedDiaIDs(topicMolecule) {\n    // `racemic: true` collapses the absolute enantioIDs into diaIDs that are\n    // identical for both enantiomers (they encode the diastereotopic environment\n    // only, not the absolute configuration).\n    const atomIDs = getEnantioIDs(topicMolecule, { racemic: true });\n    const finalRanks = topicMolecule.finalRanks;\n    const canonized = new Array(atomIDs.length);\n    for (let i = 0; i < atomIDs.length; i++) {\n        canonized[finalRanks[i]] = atomIDs[i];\n    }\n    return canonized;\n}\n//# sourceMappingURL=getCanonizedDiaIDs.js.map","import { getHoseCodesForAtomsAsStrings } from '../hose/getHoseCodesForAtomsAsStrings.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\n/**\n * Get the canonized hose codes for a topic molecule. It will use the moleculeWithH\n * @param topicMolecule - The topic molecule to get the hose codes for.\n * @returns The canonized hose codes.\n */\nexport function getCanonizedHoseCodes(topicMolecule) {\n    const options = topicMolecule.options;\n    const heterotopicSymmetryRanks = topicMolecule.heterotopicSymmetryRanks;\n    const moleculeWithH = topicMolecule.moleculeWithH;\n    const finalRanks = topicMolecule.finalRanks;\n    const canonizedHoseCodes = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(topicMolecule.molecule.getOCL().Molecule\n        .cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < topicMolecule.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedHoseCodes[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(moleculeWithH);\n        tagAtom(tempMolecule, i);\n        const hoses = getHoseCodesForAtomsAsStrings(tempMolecule, options);\n        canonizedHoseCodes[finalRanks[i]] = hoses;\n    }\n    return canonizedHoseCodes;\n}\n//# sourceMappingURL=getCanonizedHoseCodes.js.map","export function getDiaIDsAndInfo(topicMolecule, canonizedDiaIDs) {\n    const newDiaIDs = [];\n    const molecule = topicMolecule.moleculeWithH;\n    const counts = {};\n    for (const diaID of canonizedDiaIDs) {\n        if (!counts[diaID]) {\n            counts[diaID] = 0;\n        }\n        counts[diaID]++;\n    }\n    for (let i = 0; i < canonizedDiaIDs.length; i++) {\n        const diaID = canonizedDiaIDs[topicMolecule.finalRanks[i]];\n        if (!diaID) {\n            throw new Error(`Unexpected missing canonized diaID for atom ${i}`);\n        }\n        const count = counts[diaID];\n        if (!count) {\n            throw new Error(`Unexpected missing count for diaID ${diaID}`);\n        }\n        const newDiaID = {\n            idCode: diaID,\n            attachedHydrogensIDCodes: [],\n            attachedHydrogens: [],\n            nbAttachedHydrogens: 0,\n            atomLabel: molecule.getAtomLabel(i),\n            nbEquivalentAtoms: count,\n            heavyAtom: undefined,\n            atomMapNo: molecule.getAtomMapNo(i),\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = canonizedDiaIDs[topicMolecule.finalRanks[atom]];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbAttachedHydrogens++;\n                newDiaID.attachedHydrogens.push(atom);\n                const hydrogenDiaID = canonizedDiaIDs[topicMolecule.finalRanks[atom]];\n                if (!hydrogenDiaID) {\n                    throw new Error(`Unexpected missing canonized diaID for atom ${atom}`);\n                }\n                if (!newDiaID.attachedHydrogensIDCodes.includes(hydrogenDiaID)) {\n                    newDiaID.attachedHydrogensIDCodes.push(hydrogenDiaID);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiaIDsAndInfo.js.map","/**\n * Get a unique atomic number for a X\n * @param xMolecule\n * @returns\n */\nexport function getHeterotopicSymmetryRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        symmetryRanks.push(xMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\nexport function getFinalRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    return xMolecule.getFinalRanks(0).map((rank) => rank - 1);\n}\n//# sourceMappingURL=getHeterotopicSymmetryRanks.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Returns an array of symmetry ranks.\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getSymmetryRanks(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomNumber = getXAtomicNumber(molecule);\n    // most of the molecules have some symmetry\n    const internalMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        symmetryRanks.push(internalMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\n//# sourceMappingURL=getSymmetryRanks.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { ensureHeterotopicChiralBonds } from './ensureHeterotopicChiralBonds.js';\n/**\n * Returns an array of diastereotopic ID (as idCode)\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDs(molecule) {\n    const { Molecule } = molecule.getOCL();\n    ensureHeterotopicChiralBonds(molecule);\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const numberAtoms = molecule.getAllAtoms();\n    const ids = [];\n    const cache = {};\n    for (let iAtom = 0; iAtom < numberAtoms; iAtom++) {\n        const rank = symmetryRanks[iAtom];\n        if (rank && cache[rank]) {\n            ids[iAtom] = cache[rank];\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, iAtom);\n        makeRacemic(tempMolecule);\n        // We need to ensure the helper array in order to get correctly the result of racemisation\n        ids[iAtom] = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        cache[rank] = ids[iAtom];\n    }\n    return ids;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDsAndH(molecule) {\n    const OCL = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    molecule.addImplicitHydrogens();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const newDiaIDs = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const diaID = diaIDs[i];\n        const newDiaID = {\n            oclID: diaID,\n            hydrogenOCLIDs: [],\n            nbHydrogens: 0,\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = diaIDs[atom];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbHydrogens++;\n                if (!newDiaID.hydrogenOCLIDs.includes(diaIDs[atom])) {\n                    newDiaID.hydrogenOCLIDs.push(diaIDs[atom]);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsAndH.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns the hose code for specific atom numbers\n * @param {import('openchemlib').Molecule} originalMolecule - The OCL molecule to be fragmented\n * @param {number[]} rootAtoms\n * @param {object} [options={}]\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtoms(originalMolecule, rootAtoms = [], options = {}) {\n    const { minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, } = options;\n    const molecule = getCompactCopyWithoutCustomLabels(originalMolecule);\n    // those 2 lines should be done only once\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    const allowedCustomLabels = [];\n    for (const rootAtom of rootAtoms) {\n        allowedCustomLabels.push(tagAtom(molecule, rootAtom));\n    }\n    return getHoseCodesForAtomsAsStrings(molecule, {\n        minSphereSize,\n        maxSphereSize,\n        allowedCustomLabels,\n        kind,\n    });\n}\n//# sourceMappingURL=getHoseCodesForAtoms.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nlet fragment;\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} molecule\n * @param from\n * @param to\n * @param maxLength\n */\nexport function getHoseCodesForPath(molecule, from, to, maxLength) {\n    const OCL = molecule.getOCL();\n    const originalFrom = from;\n    const originalTo = to;\n    molecule = getCompactCopyWithoutCustomLabels(molecule);\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    const tag1 = tagAtom(molecule, from);\n    const tag2 = tagAtom(molecule, to);\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    from = -1;\n    to = -1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (tag1 === tag2) {\n            if (molecule.getAtomCustomLabel(i) === tag1) {\n                if (from === -1) {\n                    from = i;\n                }\n                else {\n                    to = i;\n                }\n            }\n        }\n        else {\n            if (tag1 === molecule.getAtomCustomLabel(i)) {\n                from = i;\n            }\n            if (tag2 === molecule.getAtomCustomLabel(i)) {\n                to = i;\n            }\n        }\n    }\n    if (!fragment)\n        fragment = new OCL.Molecule(0, 0);\n    const atoms = [];\n    molecule.getPath(atoms, from, to, maxLength + 1);\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms()).fill(-1);\n    const hoses = [];\n    for (let sphere = 0; sphere <= 2; sphere++) {\n        if (max === 0) {\n            for (const atom of atoms) {\n                atomMask[atom] = true;\n                atomList[max++] = atom;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        atomMask[connAtom] = true;\n                        atomList[newMax++] = connAtom;\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        const atomMap = [];\n        molecule.copyMoleculeByAtoms(fragment, atomMask, true, atomMap);\n        makeRacemic(fragment);\n        const oclID = fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        hoses.push({\n            sphere,\n            oclID,\n        });\n    }\n    return {\n        atoms: originalAtoms,\n        from: originalFrom,\n        to: originalTo,\n        torsion,\n        hoses,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getHoseCodesForPath.js.map","/**\n * Create a polymer from a unit, alpha and omega groups\n * A unit must contain a R1 and a R2\n * An alpha end group must contain a R1\n * An omega end group must contain a R2\n * @param {import('openchemlib').Molecule} unit - an instance of OCL.Molecule\n * @param {object} options\n * @param {number} [options.count=10] - number of units\n * @param {boolean} [options.markMonomer=false] - mark the different units of the polymer in the atom map\n * @param {import('openchemlib').Molecule} [options.alpha] - alpha end group, default is an hydrogen\n * @param {import('openchemlib').Molecule} [options.gamma] - omega end group, default is an hydrogen\n */\nexport function createPolymer(unit, options = {}) {\n    const { count = 10 } = options;\n    checkEntity(unit, 'unit');\n    const { Molecule } = unit.getOCL();\n    const { alpha, gamma } = getAlphaGamma(unit, options);\n    checkEntity(alpha, 'alpha');\n    checkEntity(gamma, 'gamma');\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    const polymer = alpha.getCompactCopy();\n    polymer.addMolecule(getUnit(unit, 1, options));\n    addBond(polymer, r1AtomicNo, r1AtomicNo);\n    for (let i = 0; i < count - 1; i++) {\n        polymer.addMolecule(getUnit(unit, i + 2, options));\n        addBond(polymer, r2AtomicNo, r1AtomicNo);\n    }\n    polymer.addMolecule(gamma);\n    addBond(polymer, r2AtomicNo, r2AtomicNo);\n    polymer.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // encoding directly in atomNapNo didn't work out because it was removed when deleting atoms\n    for (let i = 0; i < polymer.getAtoms(); i++) {\n        polymer.setAtomMapNo(i, (polymer.getAtomCustomLabel(i) || '').replace(/monomer_/, ''));\n        polymer.setAtomCustomLabel(i, '');\n    }\n    return polymer;\n}\nfunction getUnit(unit, index, options) {\n    const { markMonomer = false } = options;\n    if (markMonomer) {\n        unit = unit.getCompactCopy();\n        unit.ensureHelperArrays(unit.getOCL().Molecule.cHelperNeighbours);\n        for (let j = 0; j < unit.getAtoms(); j++) {\n            unit.setAtomCustomLabel(j, `monomer_${index}`);\n        }\n    }\n    return unit;\n}\nfunction addBond(molecule, firstAtomicNo, secondAtomicNo) {\n    molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n    let i, j;\n    loop: for (i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === firstAtomicNo) {\n            for (j = i + 1; j < molecule.getAtoms(); j++) {\n                if (molecule.getAtomicNo(j) === secondAtomicNo) {\n                    molecule.addBond(molecule.getConnAtom(i, 0), molecule.getConnAtom(j, 0), 1);\n                    break loop;\n                }\n            }\n        }\n    }\n    molecule.deleteAtoms([i, j]);\n}\nfunction checkEntity(unit, kind) {\n    let nbR1 = 1;\n    let nbR2 = 1;\n    switch (kind) {\n        case 'unit':\n            break;\n        case 'alpha':\n            nbR2 = 0;\n            break;\n        case 'gamma':\n            nbR1 = 0;\n            break;\n        default:\n            throw new Error('Unknown kind');\n    }\n    if (!unit) {\n        throw new Error('unit is required');\n    }\n    const { Molecule } = unit.getOCL();\n    // unit must contain ONE R1 and ONE R2\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    let r1Count = 0;\n    let r2Count = 0;\n    for (let i = 0; i < unit.getAtoms(); i++) {\n        if (unit.getAtomicNo(i) === r1AtomicNo) {\n            r1Count++;\n        }\n        if (unit.getAtomicNo(i) === r2AtomicNo) {\n            r2Count++;\n        }\n    }\n    if (r1Count !== nbR1) {\n        throw new Error(`${kind} must contain ${nbR1} R1`);\n    }\n    if (r2Count !== nbR2) {\n        throw new Error(`${kind} must contain ${nbR2} R2`);\n    }\n}\nfunction getAlphaGamma(unit, options) {\n    let { alpha, gamma } = options;\n    const { Molecule } = unit.getOCL();\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    if (!alpha) {\n        alpha = Molecule.fromSmiles('CC');\n        alpha.setAtomicNo(0, r1AtomicNo);\n        alpha.setAtomicNo(1, 1);\n    }\n    if (!gamma) {\n        gamma = Molecule.fromSmiles('CC');\n        gamma.setAtomicNo(0, r2AtomicNo);\n        gamma.setAtomicNo(1, 1);\n    }\n    return { alpha, gamma };\n}\nfunction getR1R2AtomicNo(Molecule) {\n    const r1AtomicNo = Molecule.getAtomicNoFromLabel('R1', Molecule.cPseudoAtomsRGroups);\n    const r2AtomicNo = Molecule.getAtomicNoFromLabel('R2', Molecule.cPseudoAtomsRGroups);\n    return { r1AtomicNo, r2AtomicNo };\n}\n//# sourceMappingURL=createPolymer.js.map","/**\n * Applies fragment labels from a fragment molecule to a target molecule. This method is in\n * place and modifies the target molecule directly.\n *\n * The OpenChemLib library is recovered from the molecule itself via\n * `molecule.getOCL()`, so this package never imports `openchemlib` at\n * runtime (avoids version conflicts and keeps it out of consumer bundles).\n * @param molecule - The target molecule to which fragment labels will be applied.\n * @param fragment - The fragment molecule containing the labels to apply.\n * @param options\n * @returns The number of matches found\n */\nexport function applyFragmentLabels(molecule, fragment, options = {}) {\n    const { algorithm = 'overlapping', prefix = '', suffix = '' } = options;\n    const OCL = molecule.getOCL();\n    const sssearcher = new OCL.SSSearcher();\n    sssearcher.setMolecule(molecule);\n    sssearcher.setFragment(fragment);\n    const found = sssearcher.findFragmentInMolecule({ countMode: algorithm });\n    const matches = sssearcher.getMatchList();\n    for (const match of matches) {\n        for (let fragmentAtomIndex = 0; fragmentAtomIndex < match.length; fragmentAtomIndex++) {\n            const moleculeAtomIndex = match[fragmentAtomIndex];\n            const label = fragment.getAtomCustomLabel(fragmentAtomIndex);\n            if (label) {\n                molecule.setAtomCustomLabel(moleculeAtomIndex, prefix + label + suffix);\n            }\n        }\n    }\n    return found;\n}\n//# sourceMappingURL=applyFragmentLabels.js.map","export const autoLabelDatabase = [\n    {\n        idCode: 'ea^P@@@LdbVRRbbvRRbLVRbrTVRdsRuMTmSSMLuSPEdEaLWEiATSUCRu]_QKPiHn{FkY]vLVZ{l[MuwXrX[ni`tw]cQen{FC[Mv\\\\\\\\wQuw]cSgf{v~[kXEnuhVzVQ{lX]bw\\\\qK]STmvLswXw[gnqfwxeXN@@AkhB\\\\@S@XM]@C`BXB`[hBL@C@DpG@wPDXAN@I`IFn`NpALAhMtAF@Q`BXBqkhAl@S@^C]@Q`BX@f@bZz@k@DpFPwPDXAf@I`Jan`@P@l@S@]C]@Q`@x@f@fFz@c@BpALAlMt@f@A`BXBx[h@D@s@DpGpwPDXAV@I`HQn`@PAL@S@Tc]@@`DX@f@eFz@c@NpALAjMtAF@M`BXB',\n        coordinates: '!BmpJH@oy?mwvH_[\\\\Bb@Jw_Xa}mpK~_x`B?g~w_Xa}mpJH@k]}bGw~_{\\\\Bb@JH__x@b@JH_X`BbGw~@H`BbGvH@ha}?`BH@ha}b@K~@Ha}',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'Lycopene',\n    },\n    {\n        idCode: 'eaYP@@@LdbbTbsbrTVRTVRbrbbdWBaOKUMUMLtsSMLuUU@RTVdyAVUUCRu]_tJPknqjuW]cEfn{Fs]]vLfF{jXMMwXtY[nq`vs]gGMt]]wXtyyn}ofzvA[mZEnqdVzVq{lX\\\\RwTuO]c]f^{F[\\\\mwM~IVC`@@Zz@[@DpFCWPEX@f@hZz@{@DpGCWPDX@f@dZz@K@DpF`wPDX@N@I`KFn`ApALAxut@f@I`Han`HpCl@S@YC]@Q`CX@f@jZz@s@DpGSWPDx@f@fFz@c@@pALAlMtAF@S`BXBx[hBL@c@DpGpwPDX@f@I`HQn`HpCL@S@Xc]@Q`AX@f@iFz@S@@pALArMtAF@U`BXB',\n        coordinates: '!B?`BH_[]}mpJH?H`BmpIt^pnGmwvH_X`B?g~H_X`BbGvH@oy?bGvH@ha}b@JH__x@b@JH_X`BbGw~@H`BbGw~_x`BbGvw_Xa}f~atnH`B',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'beta-carotene',\n    },\n    {\n        idCode: 'eghP@@@LddTTVdRVbLf|VRgEdbgfPRUUUUUUUUUUUW@B`RDhbb\\\\ST@~P`aBOt^PAnshFzNP{lXMawXtXcnqiuG]cEfF{vx[mXQnqiN{FSJ]vMft{lZlYw\\\\pZqnmgFzV|[jXKnqntW]cCdn{F[YMwLUwTtzkniasW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmwvH__x@?g~w@oy??g~H@k\\\\B?`@_YSF?bGvH_Xa}Gqhq`ELXb@KxF}MgYVBw?Cctm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Cucurbitane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@D`bDh`bbbR@~PPbbOt^PAnchN{FKHMv]`w^qG]cCjN{FsL]vMVx{nXLIwXpZSnqhrc][Z]vMvL{lYMYwXsYqnuoF{FB{lZ]EwTpYInelfzfJ{jYMUwTtYinynnzfgC]uLNf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw?Cctb@KxF}Mgm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Dammarane',\n    },\n    {\n        idCode: 'eghP@@@LddTTVbTad|VLVR`fdea`VUUUUUUUUUUUUW@B`UBxRdBST@~P`bbOt^PCnq`tC]gHMvm`wXqG]cSjFzNX{lZMpwRpc][RMuLiwXq[Qn}cN{FSVMwLywTt{sniapW]cYhn{FkI]wLFr{l[lUwXpzknqfsW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpK~_x`B?`Bw__x@bGvw_Xa}mpK~_{\\\\Bb@KxF}Mg?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Lanostane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@B`RBhPbbbR@~PPbbOtnPAnchN{FKHMv]`w^qG]cCjN{FsL]vMVD{lXMIwXtYQnmmN{F{F]vLfl{lYlxwZwc]cA]vMNb{jXLdwRvS]SE]uLfj{jZLtw\\\\wW]SSanzfGS]uMfV{jXmmwTuX{ninuw]SM`',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw@cctb@KxF}Mgm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Protostane',\n    },\n    {\n        idCode: 'egdP@@@LddTQdVeRdtVLVRgD`bfag`VUUUUUUUUUUUUUp@jHICHy@du@OhCHQy@FzV`[mYAnylNzfgD]uLNh{lXLpwVwC]SBMv]HwXrg]cSmF{vL[hzsnqhsg]cEoN{FSA]vMfb{lZlew\\\\p[KnqnqW]cCjn{F[M]uLFz{jYLMwTtZ[nilrw]SEmnzfkG]uMvn{jYl',\n        coordinates: '!BmpJH@o`[tv_~@K]}?`Bw@h`B?`Bw@k]}?`Bw@k\\\\B?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Cycloartane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVbtVtT|R`ebf`QVWVquUUUUUUUUUUTh@hHaJDIMHDhitidA}`aEDQQ~cr@]vMf`{lXlawXp{CnqdqG]SMjFzNX{lZmqwTwXSnqntg]cSeN{FcZMv\\\\Xw^ug]cMgNzfS^]uLNB{jXMEwXpYKnijvS][E]uMFj{nXLuwTt{inuaf{Ff[iY[nibvs]SGMwM]wTvX',\n        coordinates: '!B?l]klaRrW`@TcVnM?l]kc_{XEHtTlo{GZ{IklalMZ{HTc_{GEHw~vAL|HgS~qqRrEHtAmqRMEKK~qp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Friedelane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRltdabce`VSPvuUUUUUUUUUUUpAHHaAEhgIt`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfc]MtlLwTtw]sAenzfg[MwL]wTqZ{nilp',\n        coordinates: '!BbGw~@K]}?g~H@oy??`Bw@h`BmpJH__x@bGvw_Yg@?g~H@ox@nuSOsURDotzH_Xa}bGwIPH`BuB^KAp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Lupane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVdLJtRdvdabcedQPwVuUUUUUUUUUUUpAHHHmIELet`OhMHQy@FzN`{lXl`wYvC]{D]uLvh{l[LqwXu[cninpg]cAiN{FcJMumiwXpxsnqdug]cMgF{V|[lXKnijtW]c]dn{FgYMtlTwTuW]SIfnzfG]]uLFF[nZ[nibrw]SYmnzfcG]wLFn{jZ\\\\',\n        coordinates: '!BmpJH@oy??`C~@K]}?g~H__x@bGvw@h`BmpK~_x`B?`Bw__x@bGvH_[\\\\BCwvw@h`BuB^KA?x@vuPlf@',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Oleanane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRvtdabce`UTpvuUUUUUUUUUUUHAHHaAIhgIyJet`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfg]MtlLwTtw]SQen{fC[MwL]wTqZ{nilp',\n        coordinates: '!BRGw~`C]}?k}H@oz??`@w@d`BMpIH__z@RGtw__z@?k}H@ox@MpKwoS\\\\Bb@IH_Ta}?hC~@D`BANmSip',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Taraxastane',\n    },\n    {\n        idCode: 'egdP@@@LdbTbbTVbbQvdjteB`e`QVSRvsUUUUUUUUUUTH`lIQAIH`hdidA}AaGzOHAwXvZCnqdrG]cElN{FGD]vMFh[hycnqjwG]S]aN{F{R]vMNT[l{Qn}cNzf[V]vLv\\\\{jYMywTpxKni`tW]SSdn{FCYMulUwTtZkny`sS]k]MvLMwTuZYneefzfv[nX{nibuw]SY`',\n        coordinates: '!BR@K~os\\\\BRGuH_S]}?k|w__z@?k?~o?x@MpHw@o^}MpJH@da}RGw~`Ox@?k}H@ox@RGuH_T`BANmSip',\n        mf: 'C30H50',\n        mw: 410.727,\n        label: 'Ursane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSj@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Poriferastane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSi@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Stigmastane',\n    },\n    {\n        idCode: 'ekdPD@@@LLdTbRbRUTRtrTfVXTxDl\\\\RrZzvNjjjjjjjjjjjbHDPkET`Oz[IAwTrYCnifqG]SAjNzfsL]uMVx{lYlIwXwZSnihrg]SEmNzf{F]vMVl{l[LywXq[snqdpW]cChfzNR{lZMdwYqS]{U]vLFZ[k[inuaf{Ff{lZ\\\\lwRvs]SGMwL',\n        coordinates: '!BgF_GS_ygnOiwSb|fnOeBRwiXe?U?IdIKnOfx~fSR?badSVSMYCK~YvQMYDw~YvPr?aadSVQMYCH',\n        mf: 'C27H44O2',\n        mw: 400.64435999999995,\n        label: 'Spirostane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNhGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Campestane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNpGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Ergostane',\n    },\n    {\n        idCode: 'ec`PH@@@LdTTRRTVVbfQdrvEG@g`USRvuUUUUUUUUUUXTKaEHC~frP]vLvP{jYMawXwXcnqjuG]SAfNzfs\\\\]vMfD{lXmIwTtYSnibvg]cIcN{FGVMt\\\\ywTu[snqhpS]gQMwlewTw[KnifqW]cAjfzvZ[m[inqan{FgSMtllwTvs]s@',\n        coordinates: '!BtJW~hNpx{D_Pfd_ltJWPfak`esvhPox@jCvWPj`}jDK~gy\\\\}?bBhOZ`}?i~hPoz`jCvhOZaB',\n        mf: 'C27H46O',\n        mw: 386.66124,\n        label: 'Furostane',\n    },\n    {\n        idCode: 'eglPD@@@MlbbbbbRRqfbbbRRsDbeagaSPqrusP@PAE@D@HPP@@_tTQsnq`vS]KUMvltwYwS]cCMwMLwQrs][GMuM\\\\w^wxiXN@AAkhB\\\\@S@TC]@S`BXCFxXFz@G@DpFMpHMt@V@I`L[aQkhBL@S@VK]@Q`@X@f@qnGFn`ApALADut@V@I`Lan`Hp@L@S@UM]@I`BXCikhBl@S@SM]@]`BXCYkhCL@S@_M]@M`BXBEkh@l@c\\\\Hc]@Q`@XAFxIZz@g@Hw@kWP@xAFx@',\n        coordinates: '!B?`Bw@h`B?`Bw__x@bOvw?H`BmpJH@h`Bm?w~@Hc}mpJH@ox@m?w~@Hc}b@Jw@k\\\\Bb@JH@ox@m?vH?P',\n        mf: 'C28H18O2',\n        mw: 386.44892,\n        label: 'Bisanthrone',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjjh@Oz[PCFCPirJmbcDXtzdNXqhwIlJKRdrfLVu]cLYMZsNXv[sFkAXwZKFGIXs[JfCETrZjfcMTv[jfKCTuZZf{KTsX',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLxi]BWP`QLesvWPi\\\\}?i~WP`',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'cholesterol',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjji`EATRhyY`OlPbdJc}MhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLvswTpXo]SIj}uMF[wTv[o]SEa}uMVgwTwY_]SM`',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}mpK~_p',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'Cholestane',\n    },\n    {\n        idCode: 'fa{@@@LddTTVbvebQbwMRlYpTuUUUUUUUUL@hJbUGKLA}bDTaT_hM@]vLF`wYrF{VpwXqN{FgT[hyg]cQnMulIneiMuLknqbvf{vMwXrZs]sN{l[M{nqjp^{F{Q{lX\\\\gnqfv^zfCE{jYMWnihs^zfs]{jXl',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@`',\n        mf: 'C24H42',\n        mw: 330.59748,\n        label: 'Cholane',\n    },\n    {\n        idCode: 'fj}@p@@FmxI\\\\dTTTRbTRR~XJSdyhJHBb`JCBDqB`OlHadBc}AHAnqdMuLQncfMwMqnuaMtmIn}gMum~HdG@@awP@xAFxX{h@l@c\\\\J]tAF@I`Jnz@[@DpGW]@I`BXCGn`JpALASwPFX@f@y{h@l@S@P',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@oy?bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H14O6',\n        mw: 290.27016000000003,\n        label: 'Flavan-3,4-diol',\n    },\n    {\n        idCode: 'fjc@@@LddTTVbvebQyjUcNBfjjjjjjjj`EATRhy@~qBJPjOtj`N{FCP[lyC]kX[lXg]cSjMt\\\\snqhwFzvDwRtfzfUwXq[S]{F{lYMYnyg]vMf}wXuXO]c]h}vLNSwXs[O]SAb}uMF@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYV@x}@',\n        mf: 'C21H36',\n        mw: 288.51684,\n        label: 'Pregnane',\n    },\n    {\n        idCode: 'fj}@p@@LDhI\\\\bbbbbfqbRvxKUdyZBhb@`JAFEq@~QbNQ~`d`wRvF{fhwZwFzfDwXtfzNtwVuf{vDRC`@H{h@l@c\\\\B]t@N@QnAnz@c@DpEw]@M`BXC{n`DpALAcwPEX@f@i{hCL@S@\\\\}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw?Hc|?g~H@k_|bOvw?_x@bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H12O6',\n        mw: 288.25428,\n        label: 'Dihydroflavonol',\n    },\n    {\n        idCode: 'fj}@p@@DEiI\\\\bbbfbTtQRQXHwhyZdJH@BJ@@OzBRC]KH[nZc]S\\\\[mXS]cJ[hxs][^[o[|QHN@Acn`BpBMpYwP@xAFxR{hBL@S@[]t@v@I`Knz@S@DpDO]@U`BXCGn`LpALAswPAX@f@`',\n        coordinates: '!B?`Bw@h`Bmww~@Ox@bGvH?K_|bOs~_x`Bm?w~@Hc}m?rw@hc|?`Bw@`',\n        mf: 'C15H10O6',\n        mw: 286.23839999999996,\n        label: 'Flavonol',\n    },\n    {\n        idCode: 'fbmAP@@Fm{NRJJJIQJYIy`iNbf`h`JHB`PaLPOdHad_hI@MvLanibMt\\\\qnynMvlIneiMwlynmoqD`x@DNz@G@HwCG]@E`D[aSn`HpALAUwPCX@f@z{hAL@S@P}tAV@I`L^z@s@DpEO]@E`BXB',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@hc|m?rw@ox@mpH',\n        mf: 'C15H14O5',\n        mw: 274.27116,\n        label: 'Flavan-3-ol',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehJH`HB``q@~`rOtDdFzVpw\\\\uF{VXwTwF{FDwQrfzvLw^wxbP\\\\@AG]@E`D[`Sn`ApBMpuwPDX@f@v{hAl@S@W]t@f@I`H^z@k@DpFO]@Y`BXBgn`BpALA@',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@m?rH?Oy?b@Jw?Hc}m?w~@Hc|m?rw@ox@mpH',\n        mf: 'C15H12O5',\n        mw: 272.25527999999997,\n        label: 'Flavanone',\n    },\n    {\n        idCode: 'fbmAPD@\\\\}GHIrQQQQQHiQItDXKd`PP@ADP@@_tD`F{F`wTvF{fXwQpfzVtwZqf{vBwVwxbP\\\\@AG]@C`D[`Sn`HpALAiwPAXAFxR{hAl@S@U]t@f@I`Mnz@k@DpEw]@Y`BXBgn`BpALA@',\n        coordinates: '!Bm?vH?_y?m?s~_xc|mwvH_[_}?`BH_Xc}m?rw@oy?b@JH?Ox@mpH',\n        mf: 'C15H11O5',\n        mw: 271.24734,\n        label: 'Anthocyanidine',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehFH`HB`@C~`d`wRvF{fhwZsFzfxwXpfzNTwVqf{vDRC`@H{h@l@c\\\\B]t@N@QnFnz@c@DpFw]@M`BXB{n`DpALACwPEX@f@q{hCL@S@T}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@oy?b@Jw@hc}m?w~@H`BmpJw@ox@mpH',\n        mf: 'C15H10O5',\n        mw: 270.2394,\n        label: 'Flavone',\n    },\n    {\n        idCode: String.raw `fluhP@DTxIPCQSdTRbbUTRRSNRT{sUKMUUUP@_t\\dIlbcXjqIMR{LbwKMJGJivfMrlinSdmr|ynPVmr@`,\n        coordinates: '!B?oum~QKy?ouBuo{}Dog]aYkMPlg~_ySz^bTT~Rc~?cK~eQKz',\n        mf: 'C10H13N5O4',\n        mw: 267.24422,\n        label: 'deoxyguanosine',\n    },\n    {\n        idCode: 'fbm@`@@HRY[UfUWISrXyZjj@@@H@@iIHMv]ancfMwlInqeMuminigMvmynydmtm~LdG@@IwPDx@f@t{h@\\\\@S@^]tAv@I`Lnz@c@DpDw]@M`BXC[n`DpALACwPEX@f@q{hCL@S@\\\\}t@V@I`H',\n        coordinates: '!BFfASFF@ZKAc~@Hc}b@K~_xc}m?vH?_y?b@K~_?y?bOvH?Xc}b@H',\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Butyrolactone',\n    },\n    {\n        idCode: 'fb}@`@@FrQQJIIIHsIDiHvgIsUPTE@@T@@_tddF{vpwXqFzNXwVwFzfDwYrf{Vtw\\\\sfzVFRC`@H{hB\\\\@S@Z]t@N@I`Lnz@{@DpFw]@Q`BXC{n`FpALACwPBX@f@q{hBl@S@T}tAf@I`N^z@K@DpD',\n        coordinates: String.raw `!Bb@J{UHc}f\\CRtOy?b@KRtIg@bOvH?[mTs}JH@f]SLXCOtl?RLX@`,\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Furanofuran lignan',\n    },\n    {\n        idCode: 'fb}@`@@HRY[efuWHrRoIcejjh@@@h@@iIHMv]ancjMwlInqcMumYni`mvmEnylmtm~LdG@@IwPDx@f@l{h@\\\\@S@^]t@v@I`Lnz@{@DpEW]@Q`BXCkn`JpALA]wPBX@f@~{h@l@S@T}tAf@I`H',\n        coordinates: '!BFfASFF@ZKAbH?_x@b@K~_x`B?`BH?[_}bOvH@h`B?g?~_xc}bOt',\n        mf: 'C18H16O2',\n        mw: 264.32304,\n        label: 'Arylnaphthalene lactone',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjj@C~fT@q`tJ\\\\bkXhqFMNiCfLZMr[BbtiLicEmWXsFSVlsfMf|qjpVMvbqarVLv@',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLx',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'steroid',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjjhAPUDjNPOlPbdJc}LhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLv@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELX',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'Androstane',\n    },\n    {\n        idCode: 'fle@P@@\\\\\\\\eIfVWyWyZCEhFB@`H@Pi_tddF{NpwQsF{vTwXqfzvlwTwf{VBw\\\\tVzVEbC`@H{hBL@S@R]t@f@I`MNz@[@DpDW]@Y`BXCKn`JpALAuwPAX@f@`',\n        coordinates: '!B?`BH@k\\\\BbGw~@Ox@?g~H@hc|m?s~@K_}?`BH?K_|mpK~@K\\\\B',\n        mf: 'C15H12O4',\n        mw: 256.25628,\n        label: 'Chalcone',\n    },\n    {\n        idCode: 'fluA@@@ISLrrn~QchaSUTDD@A@@G}IHan}jMvLqnceMuminicMv]ynu`mwLeneoqd`x@DNz@{@DpGG]@Q`BXBSn`ApALAywPCX@f@b{hAL@S@Y]tAN@I`Mnz@k@DpEw]@Y`BXCGn`BpALA@',\n        coordinates: '!BsA_LZNU_HNkeHBCeEOm?VVcSEOa?IfcLyU?eW~T`yRA?VW|f',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-7′',\n    },\n    {\n        idCode: 'fluA@@@ISKJn}jRfkQSUPTD@A@@G}IIAn}lMvLQncfMumqniaMv\\\\inumMwMYneoqd`x@BNz@g@DpFg]@C`BXCKn`NpALAMwPDX@f@n{hAl@S@_]t@f@I`H^z@k@DpFO]@Y`BXBgn`BpALA@',\n        coordinates: String.raw `!BG@\\\\^LE?lEjpIY\\]fOwhw^cBp^?A{~c]fOw~{~cBzMwhw^cB`,\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-9′',\n    },\n    {\n        idCode: 'fluA@@@IRjkLjo`chaSUUP@@A@@G}IHansbMt\\\\qn}aMvMinmcMuMynu`mwLeneoqd`x@DNz@g@DpGG]@C`BXCSn`NpALAywPDX@f@r{hAl@S@U]t@f@I`Mnz@k@DpEw]@Y`BXCGn`BpALA@',\n        coordinates: '!BKA`lYvAeXAjH@ha}bGw~_?y?b@Jw_Xa}bGvH__y??g~H@ha}',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 9-O-9′',\n    },\n    {\n        idCode: 'fdei`@LZlFHIJrQQQSIQEYDhZw`uUUPHEP@G}GIAc\\\\dI[ebgDTwJcfyLZwKdVECmVXuVm]gR[tvCQ`',\n        coordinates: '!Bj?dT~_x@^bTEI_xrO]ZZtozUDoim~_{|i]Im~fwz?os~?@',\n        mf: 'C10H13N5O3',\n        mw: 251.24521999999996,\n        label: 'deoxyadenosine',\n    },\n    {\n        idCode: 'fdu@@@LddTRtjTrSA\\\\dZpXuUUUUUUT@hJddmHGqHQRIQjOtR`N{FsP{lXlcnqdvN{F{D{lX]Qncf]vMVywXtXW]cMiMv\\\\in}m]vLFLwVuf{V\\\\wXwfzVBwTtV{f@',\n        coordinates: '!B?g~H?A|ZLPBH_Q}ebOuSYx`B?g~H_Xc}?g~H@hc}bGvH?@',\n        mf: 'C18H30',\n        mw: 246.43619999999999,\n        label: 'Estrane',\n    },\n    {\n        idCode: 'fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@ASRPdrJMbsDfuFMrYEnUZRfyFRwJsfyNZwH',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpCfaSyJO{~LozUDoh',\n        mf: 'C10H14N2O5',\n        mw: 242.23016,\n        label: 'deoxythymidine',\n    },\n    {\n        idCode: 'fdy@@@DjU^{yVg@qBBJj@@@@iIAMt\\\\in}mMv\\\\YnqkMulynioMvlEnyhmtm~LdG@@AwPDX@f@p{hAl@S@T]t@f@I`NNz@{@DpDg]@U`BXCSn`LpALAYwP@x@f@|{h@l@S@Y]tAN@I`H',\n        coordinates: String.raw `!B?g~H@k\\BbOvH?[_}b@K~_{\\BbOvw?_y?m?vH?_y??g~H?P`,\n        mf: 'C18H22',\n        mw: 238.37267999999997,\n        label: 'Dibenzylbutane',\n    },\n    {\n        idCode: 'fde@@@LdbbTRtVRKIBTFHQEDE@D@ARRX[o[c]cB[h{S][F[jZs]g^[mXK]sQ[i[|YHN@@Cn`FpALAawPDX@f@h{hBl@S@R]t@f@I`MNz@{@DpEg]@E`BXCKn`LpALAUwP@x@f@n{hB\\\\@S@P',\n        coordinates: '!B?`BH?[_}b@Jw@h`B?g~w@hc}m?vw?Xc}GvT_Foy??g~H?P',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Arylnaphthalene',\n    },\n    {\n        idCode: 'fde@@@LdbbbTRVQpcZ][t@DDDUA@ARR@[kYC]cX[mYc]S\\\\[oXS]KF[nZs]GA[l{|YHN@ACn`DpALAIwPDX@f@t{hCL@S@Y]t@v@I`Jnz@{@DpGW]@E`BXB{n`JpALA}wP@x@f@q{hB\\\\@S@P',\n        coordinates: '!B?g~[iBAzfyl`AWh`_?yzHGi__?yzWrAzfyl`AYndKwHoCP',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Dibenzocycloctane',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjj`@iE@TzCFCHavFMFIUjTYcFK\\\\npfLfeMeQ[TfLqlufMV]YoL[lEcM`',\n        coordinates: '!BbOvw?_x@?g~H@k\\\\B?g~w@k_}bOvH?_x@GvVH@a|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'steroid core',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjjj@TDaLadCz`HaBHYAhRJ@[lzG]cAdMt]cnqhqF{VhwXsN{FK\\\\[oXW]cIiMulinemMuL[nqlun{FkN[n[w]c]`}vLv@',\n        coordinates: '!BbGvw__x@?g~H@k\\\\B?g~w?K_}bOvH__x@GvVH?A|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'Gonane',\n    },\n    {\n        idCode: 'f`qQP@DX@ISoILrl{jsfcMUMMUT@G}MIBSHhvKLR[TXwIdVyUiJ[eiK\\\\cN[eYk\\\\`',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpT~Rc~?cK~eQKz',\n        mf: 'C9H12N2O5',\n        mw: 228.20328,\n        label: 'deoxyuridine',\n    },\n    {\n        idCode: 'f`qpP@DXxBSoYEDhihTdjBtYijjji`@iiHRYEfqQbQZdvXqnPjliS\\\\mI[dYs\\\\kM[d',\n        coordinates: '!B@yk~K@Ne@yhCfoy??bpCiYSz^bTT~Rc~?cK~eQKz',\n        mf: 'C9H13N3O4',\n        mw: 227.21921999999998,\n        label: 'deoxycytidine',\n    },\n    {\n        idCode: 'fhy@`@@BrJJJJIPy[`eV|EhJ`@@`@C~`d`wRvF{fhwZwFzfDwXtfzNTwVuf{vDRC`@H{h@l@c\\\\B]t@N@QnCNz@c@DpGW]@M`BXB[n`DpALA]wPEX@f@~{hCL@S@P}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw@h`Bb@K~_{\\\\BbGvw_[]}mpH',\n        mf: 'C15H12O2',\n        mw: 224.25827999999998,\n        label: 'Isoflavanone',\n    },\n    {\n        idCode: 'fhy@`@@JRYfYU_XhwgAZd@`@H@@hIHMtlanyjMuMqnueMvMinccMumyn}oqD`x@FNz@K@Hw@g]@Q`BXBsn`ApBMpEwPCX@f@r{hAL@S@[]tAV@I`Knz@s@DpDO]@E`BXB',\n        coordinates: '!B?`Bw@h`Bm?w~@Ox@bOw~_{\\\\Bb@JH@h`Bm?vw?Xc}mpH',\n        mf: 'C15H10O2',\n        mw: 222.24239999999998,\n        label: 'Isoflavone',\n    },\n    {\n        idCode: 'f`i@`@@VRYfYU]`eNMyh@`AB@@OzJRC]gT[l[c]GB{lXMIneeMuMinucMwlynyoMum~ILE@@QkhgBM|ZzApc\\\\fn`lHwX[hc@LHw@',\n        coordinates: '!B?g~w_Xa}?g~w@oy?b@JH_[]}mwvH_Xa}?g~w@h`B',\n        mf: 'C14H8O2',\n        mw: 208.21552,\n        label: 'Anthraquinone',\n    },\n    {\n        idCode: 'foQ@`@@BRYfYWvBUXsf`B@@`@C~bd`wYuF{FxwQpn{FCR[iYS]SZ[mXs]{V[nYs][_bSAP@DZzIpc_Fn`\\\\HwIkhKBMvFzHpCBMp',\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@JH?[_}m?vH?Xc}mpJH@`',\n        mf: 'C13H8O2',\n        mw: 196.20452,\n        label: 'Xanthone',\n    },\n    {\n        idCode: String.raw `foQA@@@YEEEEDdbrRkF\\t@D@D@@_tTdF{NhwXwFzNDwRtn{FCJ[j[S]kF[oZs]sN[k[|RXJ@@cWQND[xutCaFyM]AXQnpwQF@XQn`,\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@Jw?Xc}m?vH?Xc}mpJH@`',\n        mf: 'C14H10O',\n        mw: 194.23239999999998,\n        label: 'Anthrone',\n    },\n    {\n        idCode: 'dg|@@DjU_eZx{BAH@@BJozL`mvMK][JwTvmvl[]sVwRwxb`x@@]tAF@I`L]t@v@I`J]t@f@I`N]t@f@Y`I]tAV@I`M]tAf@I`K]tAF@Y`O]t@V@I`H',\n        coordinates: '!B?`Bw?Xc}mpJw?Hc|m?vH?_y?bOrH?Xc}b@H',\n        mf: 'C14H12',\n        mw: 180.24928,\n        label: 'Stilbene',\n    },\n    {\n        idCode: 'fgA@@@DjYU_VByHu`@@@@@@OzJQC]gX[lXg]cAjMtmqniiMwLincmMvlYn}kMum~ILE@@AkhgBMxZzBpc]fn`\\\\HwD[hc@LHw@',\n        coordinates: String.raw `!B?g~H@k\\BbOvw?Xc}m?vH@k\\Bb@JH?Xc}b@H`,\n        mf: 'C14H10',\n        mw: 178.2334,\n        label: 'Anthracene',\n    },\n    {\n        idCode: 'dclD@@UIfV][iuhFAH@OzBdMtmc]sTwZsMuMs]cBwQtmumk]{_bbB`@IwPVD[ewPND[`',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@h`B?`BH?P',\n        mf: 'C10H6O2',\n        mw: 158.15563999999998,\n        label: 'Naphtoquinone',\n    },\n    {\n        idCode: 'dmLD@@QIe[VfeVi@B@C~`iC]SHwXvMwMS]K\\\\wQpmvmK]{JwVp',\n        coordinates: '!Bb@JH?_x@b@JH@ox@bOvH@h`BbOt',\n        mf: 'C9H6O2',\n        mw: 146.14463999999998,\n        label: 'Coumarin',\n    },\n    {\n        idCode: 'dazH`Jx@aJ]nji`dG}JPGJQap|T\\\\MGGBaIppP',\n        coordinates: '!B?g~H@k_}?g~H?[_}?g|',\n        mf: 'C5H11NOS',\n        mw: 133.21434,\n        label: 'methionine',\n    },\n    {\n        idCode: 'detH@@rQQJHtpsPT@`APTAnqd[jXfzNinyf[i[f{VEn}i[k[|TPT@BNzApc_NzBpc\\\\',\n        coordinates: '!BbOvw?_y?b@K~_{_}bOvH?X`B',\n        mf: 'C9H8O',\n        mw: 132.16152,\n        label: '2H-Chromene',\n    },\n    {\n        idCode: 'daDD@@qJYnnjjh@htQcIkESUKM[]s@',\n        coordinates: '!Bm?vH?[_|?g?~_x`BbOt',\n        mf: 'C6H12O2',\n        mw: 116.15928000000001,\n        label: 'pyranose',\n    },\n    {\n        idCode: 'gOp`AdifMjj`OzVIcJVMM^Yzp',\n        coordinates: '!BTv]`YW?~KF_~_q`l',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'furanose',\n    },\n    {\n        idCode: 'gOp`Adigkjj`OzVIcKVMMYY|p',\n        coordinates: '!Bm?vH?[_|?g?~_xc}',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'pyranose core',\n    },\n    {\n        idCode: 'gFp`AdidvjhC~abXrecSWf@',\n        coordinates: '!BTv]`YW?~KF_~_p',\n        mf: 'C4H8O2',\n        mw: 88.10552,\n        label: 'furanose core',\n    },\n];\n//# sourceMappingURL=autoLabelDatabase.js.map","const MAX_R = 10;\n/**\n * Generate molecules and calculate predicted properties form a list of smiles and fragments\n * @param {string} coreSmiles\n * @param {Array} fragments - Array of {smiles,R1,R2,...}\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {object} [options={}] - Options\n * @param {Function} [options.onStep] - method to execute each new molecules\n * @param {boolean} [options.complexity] - returns only the number of molecules to evaluate\n * @returns {Promise<any>} promise that resolves to molecules or complexity as a number\n */\nexport async function combineSmiles(coreSmiles, fragments, OCL, options = {}) {\n    const { complexity = false } = options;\n    const core = getCore(coreSmiles);\n    const rGroups = getRGroups(core, fragments);\n    if (complexity) {\n        return getComplexity(rGroups);\n    }\n    return generate(core, rGroups, OCL, options);\n}\nfunction getComplexity(rGroups) {\n    let complexity = 1;\n    for (const rGroup of rGroups) {\n        complexity *= rGroup.smiles.length;\n    }\n    return complexity;\n}\nasync function generate(core, rGroups, OCL, options = {}) {\n    const { onStep } = options;\n    const molecules = {};\n    const sizes = new Array(rGroups.length);\n    const currents = new Array(rGroups.length);\n    for (let i = 0; i < rGroups.length; i++) {\n        sizes[i] = rGroups[i].smiles.length - 1;\n        currents[i] = 0;\n    }\n    let position = 0;\n    let counter = 0;\n    while (true) {\n        counter++;\n        while (position < currents.length) {\n            if (currents[position] < sizes[position]) {\n                if (onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await onStep(counter);\n                }\n                appendMolecule(molecules, core, rGroups, currents, OCL);\n                currents[position]++;\n                for (let i = 0; i < position; i++) {\n                    currents[i] = 0;\n                }\n                position = 0;\n            }\n            else {\n                position++;\n            }\n        }\n        if ((position = currents.length)) {\n            if (onStep) {\n                // eslint-disable-next-line no-await-in-loop\n                await onStep(counter);\n            }\n            appendMolecule(molecules, core, rGroups, currents, OCL);\n            break;\n        }\n    }\n    const mols = Object.values(molecules);\n    mols.sort((m1, m2) => m1.mw - m2.mw);\n    return mols;\n}\nfunction appendMolecule(molecules, core, rGroups, currents, OCL) {\n    let newSmiles = core.smiles;\n    for (let i = 0; i < currents.length; i++) {\n        newSmiles += `.${rGroups[i].smiles[currents[i]]}`;\n    }\n    const currentMol = OCL.Molecule.fromSmiles(newSmiles);\n    const idCode = currentMol.getIDCode();\n    if (!molecules[idCode]) {\n        const molecule = {};\n        molecules[idCode] = molecule;\n        molecule.smiles = currentMol.toIsomericSmiles();\n        molecule.combinedSmiles = newSmiles;\n        molecule.idCode = idCode;\n        molecule.molfile = currentMol.toMolfile();\n        const props = new OCL.MoleculeProperties(currentMol);\n        molecule.nbHAcceptor = props.acceptorCount;\n        molecule.nbHDonor = props.donorCount;\n        molecule.logP = props.logP;\n        molecule.logS = props.logS;\n        molecule.PSA = props.polarSurfaceArea;\n        molecule.nbRottable = props.rotatableBondCount;\n        molecule.nbStereoCenter = props.stereoCenterCount;\n        const mf = currentMol.getMolecularFormula();\n        molecule.mf = mf.formula;\n        molecule.mw = mf.relativeWeight;\n    }\n}\nfunction getCore(coreSmiles) {\n    const core = {\n        originalSmiles: coreSmiles,\n        smiles: updateRPosition(coreSmiles).replaceAll(/\\[R(?<group>[1-4])]/g, '%5$<group>'),\n    };\n    for (let i = 0; i < MAX_R; i++) {\n        if (core.originalSmiles.includes(`[R${i}]`))\n            core[`R${i}`] = true;\n    }\n    return core;\n}\nfunction getRGroups(core, fragments) {\n    const rGroups = {};\n    for (const fragment of fragments) {\n        if (fragment.smiles) {\n            const smiles = updateRPosition(fragment.smiles);\n            for (let i = 0; i < MAX_R; i++) {\n                if (core[`R${i}`] && // we only consider the R that are in the core\n                    fragment[`R${i}`]) {\n                    if (!rGroups[`R${i}`]) {\n                        rGroups[`R${i}`] = {\n                            group: `R${i}`,\n                            smiles: [],\n                        };\n                    }\n                    rGroups[`R${i}`].smiles.push(smiles.replace(/\\[R]/, `(%5${i})`));\n                }\n            }\n        }\n    }\n    return Object.keys(rGroups).map((key) => rGroups[key]);\n}\n/**\n * Repositions an R-group marker when it appears at the beginning of a SMILES string.\n * R-group markers (`[R]`, `[R1]`, `[R2]`, ..., `[R9]`) at position 0 are not valid in\n * SMILES notation, so this function moves them after the first atom at the top level\n * of the molecular graph.\n * @param {string} smiles - SMILES string potentially starting with an R-group marker\n * @returns {string} SMILES string with the R-group marker repositioned if needed\n */\nfunction updateRPosition(smiles) {\n    // Match R group at the beginning: [R], [R1], [R2], ..., [R9]\n    const match = smiles.match(/^\\[R\\d?]/);\n    if (!match)\n        return smiles;\n    const rGroup = match[0];\n    if (smiles.length === rGroup.length)\n        return `[H]${rGroup}`;\n    // we are in trouble ... we need to move the R\n    const newSmiles = smiles.slice(rGroup.length);\n    // we need to check where we should put the R group\n    let level = 0;\n    for (let j = 0; j < newSmiles.length; j++) {\n        const currentChar = newSmiles.charAt(j);\n        const currentSubstring = newSmiles.slice(j);\n        if (currentChar === '(') {\n            level++;\n        }\n        else if (currentChar === ')') {\n            level--;\n        }\n        else if (level === 0) {\n            if (currentSubstring.match(/^[a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z][a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 2))}(${rGroup})${newSmiles.slice(j + 2)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n        }\n    }\n    return smiles;\n}\n//# sourceMappingURL=combineSmiles.js.map","/**\n * Converts a string to camel case.\n * @param {string} name\n * @returns {string}\n */\nexport function getCamelCase(name) {\n    return name.replaceAll(/[ -][a-z]/g, (string) => string[1].toUpperCase());\n}\n//# sourceMappingURL=getCamelCase.js.map","export function parseColumnbProperties(lines) {\n    lines = lines.map((line) => {\n        const [key, value] = line.slice(1, -1).split('=');\n        return { key, value: value.slice(1, -1) };\n    });\n    const columnProperties = {};\n    let currentColumnName = '';\n    for (const line of lines) {\n        switch (line.key) {\n            case 'columnName':\n                currentColumnName = line.value;\n                columnProperties[currentColumnName] = {};\n                break;\n            case 'columnProperty': {\n                if (!currentColumnName) {\n                    throw new Error('This should not happen');\n                }\n                const [key, value] = line.value.split('\\t');\n                columnProperties[currentColumnName][key] = value;\n                break;\n            }\n            default:\n                throw new Error('This should not happen');\n        }\n    }\n    for (const key in columnProperties) {\n        const columnPropery = columnProperties[key];\n        if (columnProperties[key].parent) {\n            const target = columnProperties[columnPropery.parent];\n            if (!target) {\n                throw new Error('Parent column not found');\n            }\n            if (!target.related) {\n                target.related = {};\n            }\n            target.related[columnPropery.specialType] = key;\n        }\n    }\n    return columnProperties;\n}\n//# sourceMappingURL=parseColumnbProperties.js.map","export function parseData(lines, options = {}) {\n    lines = lines.filter((line) => !line.match(/^\\s*$/));\n    const { columnProperties = {} } = options;\n    const headers = lines\n        .shift()\n        .split('\\t')\n        .map((header) => {\n        if (columnProperties[header]) {\n            return { label: header, ...columnProperties[header] };\n        }\n        return { label: header };\n    });\n    const entries = [];\n    const rawEntries = [];\n    for (const line of lines) {\n        const fields = line.split('\\t');\n        const rawEntry = {};\n        for (const [index, header] of headers.entries()) {\n            rawEntry[header.label] = fields[index];\n        }\n        rawEntries.push(rawEntry);\n        const entry = {};\n        for (const header of headers) {\n            if (header.parent)\n                continue;\n            entry[header.label] = valueEhnhancer(header, rawEntry);\n        }\n        entries.push(entry);\n    }\n    return { entries, rawEntries };\n}\nfunction valueEhnhancer(header, rawEntry) {\n    if (header?.specialType === 'rxncode') {\n        return `${rawEntry[header.label]}#${rawEntry[header.related.atomMapping]}#${rawEntry[header.related.idcoordinates2D]}`;\n    }\n    return rawEntry[header.label];\n}\n/*\nentry.rxnCode =\n*/\n//# sourceMappingURL=parseData.js.map","import { ensureString } from 'ensure-string';\nimport { getParts } from './utils/getParts.js';\nimport { parseColumnbProperties } from './utils/parseColumnbProperties.js';\nimport { parseData } from './utils/parseData.js';\n/**\n * Convert a DataWarrior database into a JSON object\n * @param {string} text\n * @returns\n */\nexport function parseDwar(text) {\n    text = ensureString(text);\n    const parts = getParts(text);\n    improveParts(parts);\n    return parts;\n}\nfunction improveParts(parts) {\n    for (const key in parts) {\n        switch (key) {\n            case 'columnProperties':\n                parts[key] = parseColumnbProperties(parts[key]);\n                break;\n            case 'data':\n                break;\n            default:\n                parts[key] = parseDefault(parts[key]);\n        }\n    }\n    const data = parseData(parts.data, {\n        columnProperties: parts.columnProperties,\n    });\n    parts.data = data.entries;\n    parts.rawData = data.rawEntries;\n}\nfunction parseDefault(lines) {\n    const result = {};\n    for (const line of lines) {\n        const [key, value] = line.slice(1, -1).split('=');\n        result[key] = value.slice(1, -1);\n    }\n    return result;\n}\n//# sourceMappingURL=parseDwar.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Returns various information about atoms in the molecule\n * @param {import('openchemlib').Molecule} [molecule]\n */\nexport function getAtomsInfo(molecule) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperRings);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const results = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const result = {\n            oclID: diaIDs[i],\n            extra: {\n                singleBonds: 0,\n                doubleBonds: 0,\n                tripleBonds: 0,\n                aromaticBonds: 0,\n                cnoHybridation: 0, // should be 1 (sp), 2 (sp2) or 3 (sp3)\n            },\n        };\n        const extra = result.extra;\n        results.push(result);\n        result.abnormalValence = molecule.getAtomAbnormalValence(i); // -1 is normal otherwise specified\n        result.charge = molecule.getAtomCharge(i);\n        result.cipParity = molecule.getAtomCIPParity(i);\n        result.color = molecule.getAtomColor(i);\n        result.customLabel = molecule.getAtomCustomLabel(i);\n        //        result.esrGroup=molecule.getAtomESRGroup(i);\n        //        result.esrType=molecule.getAtomESRType(i);\n        result.atomicNo = molecule.getAtomicNo(i);\n        result.label = molecule.getAtomLabel(i);\n        //        result.list=molecule.getAtomList(i);\n        //        result.listString=molecule.getAtomListString(i);\n        //        result.mapNo=molecule.getAtomMapNo(i);\n        result.mass = molecule.getAtomMass(i);\n        //        result.parity=molecule.getAtomParity(i);\n        //        result.pi=molecule.getAtomPi(i);\n        //        result.preferredStereoBond=molecule.getAtomPreferredStereoBond(i);\n        //        result.queryFeatures=molecule.getAtomQueryFeatures(i);\n        result.radical = molecule.getAtomRadical(i);\n        result.ringBondCount = molecule.getAtomRingBondCount(i);\n        //        result.ringCount=molecule.getAtomRingCount(i);\n        result.ringSize = molecule.getAtomRingSize(i);\n        result.x = molecule.getAtomX(i);\n        result.y = molecule.getAtomY(i);\n        result.z = molecule.getAtomZ(i);\n        result.allHydrogens = molecule.getAllHydrogens(i);\n        result.connAtoms = molecule.getConnAtoms(i);\n        result.allConnAtoms = molecule.getAllConnAtoms(i);\n        result.implicitHydrogens =\n            result.allHydrogens + result.connAtoms - result.allConnAtoms;\n        result.isAromatic = molecule.isAromaticAtom(i);\n        result.isAllylic = molecule.isAllylicAtom(i);\n        result.isStereoCenter = molecule.isAtomStereoCenter(i);\n        result.isRing = molecule.isRingAtom(i);\n        result.isSmallRing = molecule.isSmallRingAtom(i);\n        result.isStabilized = molecule.isStabilizedAtom(i);\n        // todo HACK to circumvent bug in OCL that consider than an hydrogen is connected to itself\n        result.extra.singleBonds =\n            result.atomicNo === 1 ? 0 : result.implicitHydrogens;\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const bond = molecule.getConnBond(i, j);\n            const bondOrder = molecule.getBondOrder(bond);\n            if (molecule.isAromaticBond(bond)) {\n                extra.aromaticBonds++;\n            }\n            else if (bondOrder === 1) {\n                // not an hydrogen\n                extra.singleBonds++;\n            }\n            else if (bondOrder === 2) {\n                extra.doubleBonds++;\n            }\n            else if (bondOrder === 3) {\n                extra.tripleBonds++;\n            }\n        }\n        result.extra.totalBonds =\n            result.extra.singleBonds +\n                result.extra.doubleBonds +\n                result.extra.tripleBonds +\n                result.extra.aromaticBonds;\n        if (result.atomicNo === 6) {\n            result.extra.cnoHybridation = result.extra.totalBonds - 1;\n        }\n        else if (result.atomicNo === 7) {\n            result.extra.cnoHybridation = result.extra.totalBonds;\n        }\n        else if (result.atomicNo === 8) {\n            result.extra.cnoHybridation = result.extra.totalBonds + 1;\n        }\n        else if (result.atomicNo === 1) {\n            const connectedAtom = molecule.getAllConnAtoms(i) === 0\n                ? 0\n                : molecule.getAtomicNo(molecule.getConnAtom(i, 0));\n            result.extra.hydrogenOnAtomicNo = connectedAtom;\n            if (connectedAtom === 7 || connectedAtom === 8) {\n                result.extra.labileHydrogen = true;\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getAtomsInfo.js.map","import { atomSorter } from 'atom-sorter';\n/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {object}\n */\nexport function getMF(molecule) {\n    const entries = molecule.getFragments();\n    const result = {};\n    let parts = [];\n    const allAtoms = [];\n    for (const entry of entries) {\n        const mf = getFragmentMF(entry, allAtoms);\n        parts.push(mf);\n    }\n    const counts = {};\n    for (const part of parts) {\n        if (!counts[part])\n            counts[part] = 0;\n        counts[part]++;\n    }\n    parts = [];\n    const sortedKeys = Object.keys(counts);\n    sortedKeys.sort();\n    for (const key of sortedKeys) {\n        if (counts[key] > 1) {\n            parts.push(counts[key] + key);\n        }\n        else {\n            parts.push(key);\n        }\n    }\n    result.parts = parts;\n    result.mf = toMFString(allAtoms);\n    return result;\n}\nfunction getFragmentMF(molecule, allAtoms) {\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {\n            charge: molecule.getAtomCharge(i),\n            label: molecule.getAtomLabel(i),\n            mass: molecule.getAtomMass(i),\n            implicitHydrogens: molecule.getImplicitHydrogens(i),\n        };\n        if (atom.label === '?')\n            atom.label = 'R';\n        atoms.push(atom);\n        allAtoms.push(atom);\n    }\n    return toMFString(atoms);\n}\nfunction toMFString(atoms) {\n    let charge = 0;\n    const mfs = {};\n    for (const atom of atoms) {\n        let label = atom.label;\n        charge += atom.charge;\n        if (atom.mass) {\n            label = `[${atom.mass}${label}]`;\n        }\n        const mfAtom = mfs[label];\n        if (!mfAtom) {\n            mfs[label] = 0;\n        }\n        mfs[label] += 1;\n        if (atom.implicitHydrogens) {\n            if (!mfs.H)\n                mfs.H = 0;\n            mfs.H += atom.implicitHydrogens;\n        }\n    }\n    let mf = '';\n    const keys = Object.keys(mfs);\n    keys.sort(atomSorter);\n    for (const key of keys) {\n        mf += key;\n        if (mfs[key] > 1)\n            mf += mfs[key];\n    }\n    if (charge > 0) {\n        mf += `(+${charge > 1 ? charge : ''})`;\n    }\n    else if (charge < 0) {\n        mf += `(${charge < -1 ? charge : '-'})`;\n    }\n    return mf;\n}\n//# sourceMappingURL=getMF.js.map","const unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n};\n/**\n * Simplified version of the calculation in mf-parser\n * @param mf\n * @returns\n */\nexport function getUnsaturation(mf) {\n    // split a molecular formula into its elements\n    const elements = mf.match(/[A-Z][a-z]*\\d*/g);\n    if (!elements || elements.length === 0)\n        return undefined;\n    let unsaturation = 0;\n    for (const element of elements) {\n        const matches = element.match(/([A-Z][a-z]?)(\\d*)/);\n        const symbol = matches[1];\n        const count = matches[2] ? Number.parseInt(matches[2], 10) : 1;\n        const elementObject = unsaturationsObject[symbol];\n        if (elementObject === undefined) {\n            return undefined;\n        }\n        unsaturation += elementObject * count;\n    }\n    return unsaturation / 2 + 1;\n}\n//# sourceMappingURL=getUnsaturation.js.map","// this page allows to debug the hints: https://my.cheminfo.org/?viewURL=https%3A%2F%2Fmyviews.cheminfo.org%2Fdb%2Fvisualizer%2Fentry%2F108024089da99d0cb70a57724486d0c6%2Fview.json\nimport { TopicMolecule } from \"../topic/TopicMolecule.js\";\nimport { getUnsaturation } from \"./getUnsaturation.js\";\nconst defaultPossibleHints = [\n    {\n        idCode: String.raw `eF@Hp\\pcc`,\n        message: 'What about a non-aromatic ring?',\n    },\n    {\n        idCode: 'eF@HpZpk|X`',\n        message: 'You should consider an aromatic ring.',\n    },\n    {\n        idCode: 'gFp@DiTt@@B',\n        message: 'Did you think about benzene derivatives?',\n    },\n    {\n        idCode: 'eFHBLFLYpB@QVE_cD',\n        message: 'An aromatic cycle can be an heterocycle.',\n    },\n    {\n        idCode: 'eMHJN`q[N@PBGN@PBJhjU~JU@',\n        anyMatches: ['gFx@@eJf`@@P', 'gKP@Di\\\\YZ@qas`D@`'],\n        message: 'There could be more than one heteroatom in an aromatic cycle.',\n    },\n    {\n        idCode: 'gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX',\n        anyMatches: ['gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 5 and it is 6',\n    },\n    {\n        idCode: 'gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`',\n        anyMatches: ['gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 6 and it is 5',\n    },\n    {\n        idCode: 'gFx@@eJf`@@P',\n        message: 'Did you think about pyridine derivatives?',\n    },\n    {\n        idCode: 'gNp@LdbLjj@vdrpqSdm_qhXiKT',\n        message: 'I would consider bicyclo products.',\n        remarks: 'One atom bridge',\n    },\n    {\n        idCode: 'eFHBJD',\n        message: 'Adding a carbonyl could help.',\n    },\n    {\n        idCode: 'eMHAIhMi}EqfFBmN?vP',\n        message: 'You should consider an alcohol.',\n    },\n    {\n        idCode: 'eMB@HRZCBKSFXXJt{?Y@',\n        message: 'You should consider a thiol.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`sAUR]g_zlP',\n        message: 'You should consider an ether.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`r`q?EAcuX`',\n        anyMatches: ['gJQ@@eKU@[KFJtLAa`?uX`'],\n        message: 'An ether can be in a cycle.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLpUTgYw~kD',\n        message: 'You should consider a thioether.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLhL_qPX}VH',\n        anyMatches: ['gJPH@DIRuPFrqbmC@XXO}VH'],\n        message: 'A thioether can be in a cycle.',\n    },\n    {\n        idCode: 'eM`AIhLHmLYa`kSo}d',\n        message: 'You should consider a primary amine.',\n        remarks: 'primary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAUIv]?jq@',\n        message: 'You should consider a secondary amine.',\n        remarks: 'secondary',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppUv\\\\WUw~xu`',\n        message: 'You should consider a tertiary amine.',\n        remarks: 'tertiary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAeAcUIv]~JCGjq@',\n        anyMatches: ['gJX@@eKU@XPVVLUhXCCAfBjd{N?uX`'],\n        message: 'A secondary amine can be in a cycle.',\n        remarks: 'secondary cyclic amine',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppYPXuv\\\\WUwxhL^xu`',\n        anyMatches: ['gNx@@eRmUPFDElZxxppVFAppY`j{NKj{?\\\\Zp'],\n        message: 'A tertiary amine can be in a cycle.',\n        remarks: 'tertiary cyclic amine',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppUa]?ju@',\n        message: 'What about an ester?',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGP`@df]j`MekEZFBppUa]?ju@'],\n        message: 'An ester can be in a cycle.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppUa]?ju@',\n        message: 'There is an amide function in the molecule.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGY@DDf]j`MekEZFBppUa]?ju@@'],\n        message: 'An amide can be in a cycle.',\n    },\n    {\n        idCode: 'gCi@DDfZ@~btl',\n        message: 'There is a primary amide in the molecule.',\n    },\n    {\n        idCode: 'gC``@dfZ@~bl',\n        message: 'You should think about carboxylic acids. The OH signal may be very wide.',\n    },\n    {\n        idCode: String.raw `eF@Hh\\q@`,\n        message: 'What about having an olefin?',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CqB^JoV[m', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB^JoV[m'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gGP`@df]j`H',\n        anyMatches: ['gGP`@dfUj`H'],\n        message: 'You should check the orientation of the ester.',\n    },\n    {\n        idCode: String.raw `gOq@@drm\\@@Aa@`,\n        message: 'Alcohols on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: String.raw `gOx@@drm\\@@A}A@`,\n        message: 'NH on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: 'eFHBJGuP',\n        message: 'Hydrogens on a carbonyl have very high chemical shifts.',\n    },\n];\n/**\n *\n * @param correct\n * @param proposed\n * @param options\n * @returns\n */\nexport function getNMRHints(correct, proposed, options = {}) {\n    const hints = [\n        ...checkMF(correct, proposed),\n        ...checkUnsaturation(correct, proposed),\n        ...checkStereoAndTautomer(correct, proposed),\n    ];\n    const { possibleHints = defaultPossibleHints } = options;\n    const OCL = correct.getOCL();\n    const searcherCorrect = new OCL.SSSearcher();\n    searcherCorrect.setMolecule(correct);\n    const searcherAnswer = new OCL.SSSearcher();\n    searcherAnswer.setMolecule(proposed);\n    for (const possibleHint of possibleHints) {\n        const { anyMatches } = possibleHint;\n        if (anyMatches) {\n            // we filter the molecules so they match at least one of the anyMatches\n            let match = false;\n            for (const anyMatch of anyMatches) {\n                const matchFragment = OCL.Molecule.fromIDCode(anyMatch);\n                searcherAnswer.setFragment(matchFragment);\n                if (searcherAnswer.isFragmentInMolecule()) {\n                    match = true;\n                    break;\n                }\n            }\n            if (!match)\n                continue;\n        }\n        const { idCode } = possibleHint;\n        const fragment = OCL.Molecule.fromIDCode(idCode);\n        searcherCorrect.setFragment(fragment);\n        searcherAnswer.setFragment(fragment);\n        if (searcherCorrect.isFragmentInMolecule() &&\n            !searcherAnswer.isFragmentInMolecule()) {\n            hints.push(possibleHint);\n        }\n    }\n    // we suggest symmetry only if MF is correct\n    if (isMFCorrect(correct, proposed)) {\n        hints.push(...checkSymmetry(correct, proposed));\n    }\n    return hints.map((hint) => ({\n        ...hint,\n        hash: getHash(JSON.stringify(hint)),\n    }));\n}\nfunction isMFCorrect(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    return mfCorrect === mfAnswer;\n}\nfunction checkMF(correct, answer) {\n    if (isMFCorrect(correct, answer))\n        return [];\n    return [\n        {\n            message: 'You should check the molecular formula.',\n        },\n    ];\n}\nfunction checkUnsaturation(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    if (mfCorrect !== mfAnswer) {\n        const unsaturationCorrect = getUnsaturation(mfCorrect);\n        const unsaturationAnswer = getUnsaturation(mfAnswer);\n        if (unsaturationCorrect === unsaturationAnswer ||\n            unsaturationAnswer === undefined ||\n            unsaturationCorrect === undefined) {\n            return [];\n        }\n        if (unsaturationCorrect > unsaturationAnswer) {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too low.',\n                },\n            ];\n        }\n        else {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too high.',\n                },\n            ];\n        }\n    }\n    return [];\n}\nfunction checkStereoAndTautomer(correct, answer) {\n    if (correct.getIDCode() === answer.getIDCode())\n        return [];\n    if (getNoStereoIDCode(correct) === getNoStereoIDCode(answer)) {\n        return [\n            {\n                message: 'There is only a problem with stereochemistry.',\n            },\n        ];\n    }\n    if (getTautomerIDCode(correct) === getTautomerIDCode(answer)) {\n        return [\n            {\n                message: \"Weird, you didn't draw the expected tautomer.\",\n            },\n        ];\n    }\n    return [];\n}\nfunction checkSymmetry(correct, answer) {\n    const nbCorrectRanks = Object.keys(new TopicMolecule(correct).getDiaIDsObject()).length;\n    const nbAnswerRanks = Object.keys(new TopicMolecule(answer).getDiaIDsObject()).length;\n    if (nbCorrectRanks === nbAnswerRanks)\n        return [];\n    if (nbCorrectRanks > nbAnswerRanks) {\n        return [\n            {\n                message: 'The proposed molecule is too symmetric.',\n            },\n        ];\n    }\n    else {\n        return [\n            {\n                message: 'The proposed molecule is not symmetric enough.',\n            },\n        ];\n    }\n}\nfunction getTautomerIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.TAUTOMER);\n}\nfunction getNoStereoIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.NOSTEREO);\n}\n/*\n    https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js\n    cyrb53a (c) 2023 bryc (github.com/bryc)\n    License: Public domain. Attribution appreciated.\n    The original cyrb53 has a slight mixing bias in the low bits of h1.\n    This shouldn't be a huge problem, but I want to try to improve it.\n    This new version should have improved avalanche behavior, but\n    it is not quite final, I may still find improvements.\n    So don't expect it to always produce the same output.\n*/\nfunction getHash(str, seed = 0) {\n    let h1 = 0xdeadbeef ^ seed;\n    let h2 = 0x41c6ce57 ^ seed;\n    for (let i = 0, ch; i < str.length; i++) {\n        ch = str.codePointAt(i);\n        h1 = Math.imul(h1 ^ ch, 0x85ebca77);\n        h2 = Math.imul(h2 ^ ch, 0xc2b2ae3d);\n    }\n    h1 ^= Math.imul(h1 ^ (h2 >>> 15), 0x735a2d97);\n    h2 ^= Math.imul(h2 ^ (h1 >>> 15), 0xcaf649a9);\n    h1 ^= h2 >>> 16;\n    h2 ^= h1 >>> 16;\n    return 2097152 * (h2 >>> 0) + (h1 >>> 11);\n}\n//# sourceMappingURL=getNMRHints.js.map","let toxicityPredictor;\nlet druglikenessPredictor;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.includeToxicities=false]\n * @param {boolean} [options.includeDruglikeness=false]\n */\nexport function getProperties(molecule, options = {}) {\n    const { includeToxicities = false, includeDruglikeness = false } = options;\n    const OCL = molecule.getOCL();\n    if (!OCL.MoleculeProperties) {\n        throw new Error('OCL.MoleculeProperties is not defined');\n    }\n    const props = new OCL.MoleculeProperties(molecule);\n    const moleculeFormula = molecule.getMolecularFormula();\n    const result = {\n        acceptorCount: props.acceptorCount,\n        donorCount: props.donorCount,\n        logP: props.logP,\n        logS: props.logS,\n        polarSurfaceArea: props.polarSurfaceArea,\n        rotatableBondCount: props.rotatableBondCount,\n        stereoCenterCount: props.stereoCenterCount,\n        mw: moleculeFormula.relativeWeight,\n        mf: moleculeFormula.formula,\n    };\n    if (includeToxicities) {\n        const { ToxicityPredictor } = molecule.getOCL();\n        if (!ToxicityPredictor) {\n            throw new Error('OCL.ToxicityPredictor is not defined');\n        }\n        if (!toxicityPredictor) {\n            toxicityPredictor = new ToxicityPredictor();\n        }\n        result.mutagenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_MUTAGENIC);\n        result.tumorigenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_TUMORIGENIC);\n        result.irritant = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_IRRITANT);\n        result.reproductiveEffective = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_REPRODUCTIVE_EFFECTIVE);\n    }\n    if (includeDruglikeness) {\n        const { DruglikenessPredictor } = molecule.getOCL();\n        if (!DruglikenessPredictor) {\n            throw new Error('OCL.DruglikenessPredictor is not defined');\n        }\n        if (!druglikenessPredictor) {\n            druglikenessPredictor = new DruglikenessPredictor();\n        }\n        result.drugLikeness = druglikenessPredictor.assessDruglikeness(molecule);\n    }\n    if (result.drugLikeness !== undefined && result.mutagenic !== undefined) {\n        result.drugScore = OCL.DrugScoreCalculator.calculate(result.logP, result.polarSurfaceArea, result.mw, result.drugLikeness, [\n            result.mutagenic,\n            result.tumurogenic,\n            result.irritant,\n            result.reproductiveEffective,\n        ]);\n    }\n    return result;\n}\n//# sourceMappingURL=getProperties.js.map","import { getHoseCodesForPath } from '../hose/getHoseCodesForPath.js';\nimport { getAtomsInfo } from '../util/getAtomsInfo.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getPathAndTorsion } from './getPathAndTorsion.js';\nlet fragment;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.minLength=1]\n * @param {number} [options.maxLength=4]\n * @param {boolean} [options.withHOSES=false]\n */\nexport function getPathsInfo(molecule, options = {}) {\n    const { fromLabel = 'H', toLabel = 'H', minLength = 1, maxLength = 4, withHOSES = false, } = options;\n    const OCL = molecule.getOCL();\n    if (!fragment) {\n        fragment = new OCL.Molecule(0, 0);\n    }\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    // we need to find all the atoms 'fromLabel' and 'toLabel'\n    const atomsInfo = getAtomsInfo(molecule);\n    const pathLengthMatrix = getConnectivityMatrix(molecule, {\n        pathLength: true,\n    });\n    for (let from = 0; from < molecule.getAllAtoms(); from++) {\n        atomsInfo[from].paths = [];\n        for (let to = 0; to < molecule.getAllAtoms(); to++) {\n            if (from !== to &&\n                molecule.getAtomicNo(from) === fromAtomicNumber &&\n                molecule.getAtomicNo(to) === toAtomicNumber) {\n                const pathLength = pathLengthMatrix[from][to];\n                if (pathLength >= minLength && pathLength <= maxLength) {\n                    if (withHOSES) {\n                        atomsInfo[from].paths.push(getHoseCodesForPath(molecule, from, to, pathLength));\n                    }\n                    else {\n                        atomsInfo[from].paths.push(getPathAndTorsion(molecule, from, to, pathLength));\n                    }\n                }\n            }\n        }\n    }\n    return atomsInfo;\n}\n//# sourceMappingURL=getPathsInfo.js.map","/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {OCL.Molecule} [molecule] - an instance of OCL.Molecule\n * @returns {}\n */\nexport function getAtoms(molecule) {\n    const entries = molecule.getFragments();\n    const atoms = {};\n    const result = { atoms, parts: [] };\n    for (const entry of entries) {\n        const part = {};\n        result.parts.push(part);\n        appendAtomPart(entry, atoms, part);\n    }\n    return result;\n}\nfunction appendAtomPart(molecule, atoms, part) {\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const label = molecule.getAtomLabel(i);\n        if (!atoms[label]) {\n            atoms[label] = 0;\n        }\n        atoms[label] += 1;\n        if (!part[label]) {\n            part[label] = 0;\n        }\n        part[label] += 1;\n        const implicitHydrogens = molecule.getImplicitHydrogens(i);\n        if (implicitHydrogens) {\n            if (!atoms.H) {\n                atoms.H = 0;\n            }\n            atoms.H += implicitHydrogens;\n            if (!part.H) {\n                part.H = 0;\n            }\n            part.H += implicitHydrogens;\n        }\n    }\n}\n//# sourceMappingURL=getAtoms.js.map","/**\n * Calculates the path between 2 atoms\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} from - index of the first atom\n * @param {number} to - index of the end atom\n * @param {number} maxLength - maximal length of the path\n */\nexport function getPathAndTorsion(molecule, from, to, maxLength) {\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    return {\n        atoms: originalAtoms,\n        from,\n        to,\n        torsion,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getPathAndTorsion.js.map","/* @license\nPapa Parse\nv5.5.4\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function P(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&q(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(q(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!q(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){q(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){e=P(e),q(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}q(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?q(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=q(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,q(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(U(t)+\"([^]*?)\"+U(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function U(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=q(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(U(j)+U(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=P(s[r]);if(a[i=q(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(q(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else q(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];q(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function b(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function q(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;q(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!q(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=P(e),i=new(t.download?f:c)(t)):!0===e.readable&&q(e.read)&&q(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=q(t.step),t.chunk=q(t.chunk),t.complete=q(t.complete),t.error=q(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var s=!1,_=!0,m=\",\",y=\"\\r\\n\",a='\"',o=a+a,i=!1,r=null,h=!1,u=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(s=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(a=t.quoteChar,o=a+a),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(o=t.escapeChar+a),t.escapeFormulae instanceof RegExp?h=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(h=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(U(a),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return n(null,e,i);if(\"object\"==typeof e[0])return n(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),n(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function n(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r,n;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(n=!1,h&&\"string\"==typeof e&&h.test(e)&&(e=\"'\"+e,n=!0),r=(i=e.toString()).replace(u,o),(n=n||!0===s||\"function\"==typeof s&&s(e,t)||Array.isArray(s)&&s[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(r,v.BAD_DELIMITERS)||-1<r.indexOf(m)||-1<i.indexOf(a)||\" \"===r.charAt(0)||\" \"===r.charAt(r.length-1))?a+r+a:r)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)q(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(q(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(q(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){q(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","export default function getMoleculeCreators(OCL) {\n    const fields = new Map([\n        ['oclid', OCL.Molecule.fromIDCode],\n        ['idcode', OCL.Molecule.fromIDCode],\n        ['smiles', OCL.Molecule.fromSmiles],\n        ['molfile', OCL.Molecule.fromMolfile],\n        [\n            'smarts',\n            (smarts) => {\n                const smilesParser = new OCL.SmilesParser({ smartsMode: 'smarts' });\n                return smilesParser.parseMolecule(smarts);\n            },\n        ],\n    ]);\n    return fields;\n}\n//# sourceMappingURL=getMoleculeCreators.js.map","import { ensureString } from 'ensure-string';\nimport Papa from 'papaparse';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nconst defaultCSVOptions = {\n    header: true,\n    dynamicTyping: true,\n    skipEmptyLines: true,\n};\nexport default async function appendCSV(moleculesDB, csv, options = {}) {\n    const { onStep } = options;\n    csv = ensureString(csv);\n    const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n    if (typeof csv !== 'string') {\n        throw new TypeError('csv must be a string');\n    }\n    options = { ...defaultCSVOptions, ...options };\n    const parsed = Papa.parse(csv, options);\n    const fields = parsed.meta.fields;\n    const stats = new Array(fields.length);\n    const firstElement = parsed.data[0];\n    let moleculeCreator, moleculeField;\n    for (let i = 0; i < fields.length; i++) {\n        stats[i] = {\n            label: fields[i],\n            isNumeric: typeof firstElement[fields[i]] === 'number',\n        };\n        const lowerField = fields[i].toLowerCase();\n        if (moleculeCreators.has(lowerField)) {\n            moleculeCreator = moleculeCreators.get(lowerField);\n            moleculeField = fields[i];\n        }\n    }\n    if (!moleculeCreator) {\n        throw new Error('this document does not contain any molecule field');\n    }\n    for (let i = 0; i < parsed.data.length; i++) {\n        moleculesDB.pushEntry(moleculeCreator(parsed.data[i][moleculeField]), parsed.data[i]);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.data.length);\n        }\n    }\n}\n//# sourceMappingURL=appendCSV.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// index.ts\nvar isObject = /* @__PURE__ */ __name((v) => v !== null && typeof v === \"object\", \"isObject\");\nvar join = /* @__PURE__ */ __name((segs, joinChar, options) => {\n  if (typeof options.join === \"function\") {\n    return options.join(segs);\n  }\n  return segs[0] + joinChar + segs[1];\n}, \"join\");\nvar split = /* @__PURE__ */ __name((path, splitChar, options) => {\n  if (typeof options.split === \"function\") {\n    return options.split(path);\n  }\n  return path.split(splitChar);\n}, \"split\");\nvar isValid = /* @__PURE__ */ __name((key, target = {}, options) => {\n  if (typeof options?.isValid === \"function\") {\n    return options.isValid(key, target);\n  }\n  return true;\n}, \"isValid\");\nvar isValidObject = /* @__PURE__ */ __name((v) => {\n  return isObject(v) || typeof v === \"function\";\n}, \"isValidObject\");\nvar getValue = /* @__PURE__ */ __name((target, path, options = {}) => {\n  if (!isObject(options)) {\n    options = { default: options };\n  }\n  if (!isValidObject(target)) {\n    return typeof options.default !== \"undefined\" ? options.default : target;\n  }\n  if (typeof path === \"number\") {\n    path = String(path);\n  }\n  const pathIsArray = Array.isArray(path);\n  const pathIsString = typeof path === \"string\";\n  const splitChar = options.separator || \".\";\n  const joinChar = options.joinChar || (typeof splitChar === \"string\" ? splitChar : \".\");\n  if (!pathIsString && !pathIsArray) {\n    return target;\n  }\n  let value = target[path];\n  if (value === void 0 && typeof target.get === \"function\") {\n    value = target.get(path);\n  }\n  if (value !== void 0) {\n    return isValid(path, target, options) ? value : options.default;\n  }\n  const segs = pathIsArray ? path : split(path, splitChar, options);\n  const len = segs.length;\n  let idx = 0;\n  do {\n    let prop = segs[idx];\n    if (typeof prop !== \"string\") {\n      prop = String(prop);\n    }\n    while (prop && prop.slice(-1) === \"\\\\\") {\n      prop = join([prop.slice(0, -1), segs[++idx] || \"\"], joinChar, options);\n    }\n    value = target[prop];\n    if (value === void 0 && typeof target.get === \"function\") {\n      value = target.get(prop);\n    }\n    if (value !== void 0) {\n      if (!isValid(prop, target, options)) {\n        return options.default;\n      }\n      target = value;\n    } else {\n      let hasProp = false;\n      let n = idx + 1;\n      while (n < len) {\n        prop = join([prop, segs[n++]], joinChar, options);\n        value = target[prop];\n        if (value === void 0 && typeof target.get === \"function\") {\n          value = target.get(prop);\n        }\n        if (hasProp = value !== void 0) {\n          if (!isValid(prop, target, options)) {\n            return options.default;\n          }\n          target = value;\n          idx = n - 1;\n          break;\n        }\n      }\n      if (!hasProp) {\n        return options.default;\n      }\n    }\n  } while (++idx < len && isValidObject(target));\n  if (idx === len) {\n    return target;\n  }\n  return options.default;\n}, \"getValue\");\nvar index_default = getValue;\nexport {\n  index_default as default,\n  getValue\n};\n/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n//# sourceMappingURL=index.mjs.map","/**\n * Parse a single SDF entry string into a molecule object.\n * @param sdfPart - A single SDF record (everything before the `$$$$` line).\n * @param labels - Shared label tracking object, mutated in place.\n * @param currentLabels - Array to collect label names found in this entry.\n * @param options - Resolved parse options.\n * @returns The molecule object, or `undefined` if the entry is too short.\n */\nexport function getMolecule(sdfPart, labels, currentLabels, options) {\n    const { eol, dynamicTyping, include, exclude, modifiers, forEach } = options;\n    const parts = sdfPart.split(`${eol}>`);\n    if (parts.length === 0 || parts[0].length <= 5)\n        return undefined;\n    const molecule = { molfile: parts[0] + eol };\n    for (let j = 1; j < parts.length; j++) {\n        const lines = parts[j].split(eol);\n        const from = lines[0].indexOf('<');\n        const to = lines[0].indexOf('>');\n        const label = lines[0].slice(from + 1, to);\n        currentLabels.push(label);\n        if (!labels[label]) {\n            labels[label] = {\n                counter: 0,\n                isNumeric: dynamicTyping,\n                keep: false,\n            };\n            if (!exclude?.includes(label) && (!include || include.includes(label))) {\n                labels[label].keep = true;\n                if (modifiers[label])\n                    labels[label].modifier = modifiers[label];\n                if (forEach[label])\n                    labels[label].forEach = forEach[label];\n            }\n        }\n        if (labels[label].keep) {\n            for (let k = 1; k < lines.length - 1; k++) {\n                if (molecule[label]) {\n                    molecule[label] = `${molecule[label]}${eol}${lines[k]}`;\n                }\n                else {\n                    molecule[label] = lines[k];\n                }\n            }\n            if (labels[label].modifier) {\n                const modifiedValue = labels[label].modifier(molecule[label]);\n                if (modifiedValue === undefined || modifiedValue === null) {\n                    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                    delete molecule[label];\n                }\n                else {\n                    molecule[label] = modifiedValue;\n                }\n            }\n            if (labels[label].isNumeric &&\n                (!Number.isFinite(+molecule[label]) ||\n                    molecule[label].match(/^0[0-9]/))) {\n                labels[label].isNumeric = false;\n            }\n        }\n    }\n    return molecule;\n}\n//# sourceMappingURL=getMolecule.js.map","import { ensureString } from 'ensure-string';\nimport { parse } from 'sdf-parser';\nexport default async function appendSDF(moleculesDB, sdf, options = {}) {\n    const { onStep, dynamicTyping, mixedEOL = true, eol } = options;\n    sdf = ensureString(sdf);\n    if (typeof sdf !== 'string') {\n        throw new TypeError('sdf must be a string');\n    }\n    const parsed = parse(sdf, { dynamicTyping, mixedEOL, eol });\n    for (let i = 0; i < parsed.molecules.length; i++) {\n        const molecule = parsed.molecules[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromMolfile(molecule.molfile), molecule);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.molecules.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSDF.js.map","import { ensureString } from 'ensure-string';\nimport { getEntriesBoundaries } from \"./getEntriesBoundaries.js\";\nimport { getMolecule } from \"./util/getMolecule.js\";\n/**\n * Synchronously parse an SDF file into an array of molecule objects.\n * @param sdf - The SDF content as a string, `ArrayBuffer`, or `ArrayBufferView`.\n * @param options - Parsing options.\n * @returns A {@link ParseResult} containing molecules and statistics.\n * @example\n * ```ts\n * import { readFileSync } from 'node:fs';\n * import { parse } from 'sdf-parser';\n *\n * const sdf = readFileSync('compounds.sdf', 'utf8');\n * const { molecules, statistics } = parse(sdf);\n * ```\n */\nexport function parse(sdf, options = {}) {\n    options = { ...options };\n    if (options.modifiers === undefined)\n        options.modifiers = {};\n    if (options.forEach === undefined)\n        options.forEach = {};\n    if (options.dynamicTyping === undefined)\n        options.dynamicTyping = true;\n    // ensureString converts ArrayBuffer/ArrayBufferView to string\n    const sdfString = ensureString(sdf);\n    if (typeof sdfString !== 'string') {\n        throw new TypeError('Parameter \"sdf\" must be a string');\n    }\n    if (options.eol === undefined) {\n        options.eol = '\\n';\n        if (!options.mixedEOL && sdfString.slice(0, 1000).includes('\\r\\n')) {\n            options.eol = '\\r\\n';\n        }\n    }\n    let workingSdf = sdfString;\n    if (options.mixedEOL) {\n        workingSdf = workingSdf.replaceAll('\\r\\n', '\\n');\n    }\n    const eol = options.eol;\n    const modifiers = options.modifiers;\n    const forEachMap = options.forEach;\n    const dynamicTyping = options.dynamicTyping;\n    const entriesBoundaries = getEntriesBoundaries(workingSdf, `${eol}$$$$`, eol);\n    const molecules = [];\n    const labels = {};\n    const start = Date.now();\n    for (const boundary of entriesBoundaries) {\n        const sdfPart = workingSdf.slice(...boundary);\n        if (sdfPart.length < 40)\n            continue;\n        const currentLabels = [];\n        const molecule = getMolecule(sdfPart, labels, currentLabels, {\n            eol,\n            dynamicTyping,\n            modifiers,\n            forEach: forEachMap,\n            include: options.include,\n            exclude: options.exclude,\n        });\n        if (!molecule)\n            continue;\n        if (!options.filter || options.filter(molecule)) {\n            molecules.push(molecule);\n            for (const label of currentLabels) {\n                labels[label].counter++;\n            }\n        }\n    }\n    // Convert all numeric fields and compute min/max\n    for (const label in labels) {\n        const currentLabel = labels[label];\n        if (currentLabel.isNumeric) {\n            currentLabel.minValue = Infinity;\n            currentLabel.maxValue = -Infinity;\n            for (const molecule of molecules) {\n                if (molecule[label]) {\n                    const value = Number.parseFloat(molecule[label]);\n                    molecule[label] = value;\n                    if (value > (currentLabel.maxValue ?? -Infinity)) {\n                        currentLabel.maxValue = value;\n                    }\n                    if (value < (currentLabel.minValue ?? Infinity)) {\n                        currentLabel.minValue = value;\n                    }\n                }\n            }\n        }\n    }\n    for (const key in labels) {\n        labels[key].always = labels[key].counter === molecules.length;\n    }\n    const statistics = [];\n    for (const key in labels) {\n        const info = labels[key];\n        statistics.push({\n            label: key,\n            counter: info.counter,\n            isNumeric: info.isNumeric,\n            keep: info.keep,\n            minValue: info.minValue,\n            maxValue: info.maxValue,\n            always: info.always ?? false,\n        });\n    }\n    return {\n        time: Date.now() - start,\n        molecules,\n        labels: Object.keys(labels),\n        statistics,\n    };\n}\n//# sourceMappingURL=parse.js.map","/**\n * Get the [start, end] boundaries of each SDF entry in a string.\n *\n * Uses `indexOf` for fast splitting without regex overhead.\n * @param string - The full SDF string.\n * @param substring - The delimiter to search for (e.g. `'\\n$$$$'`).\n * @param eol - The end-of-line character used to skip past the delimiter line.\n * @returns An array of `[start, end]` index pairs, one per SDF entry.\n */\nexport function getEntriesBoundaries(string, substring, eol) {\n    const res = [];\n    let previous = 0;\n    let next = 0;\n    while (next !== -1) {\n        next = string.indexOf(substring, previous);\n        if (next !== -1) {\n            res.push([previous, next]);\n            const nextMatch = string.indexOf(eol, next + substring.length);\n            if (nextMatch === -1) {\n                next = -1;\n            }\n            else {\n                previous = nextMatch + eol.length;\n                next = previous;\n            }\n        }\n        else {\n            res.push([previous, string.length]);\n        }\n    }\n    return res;\n}\n//# sourceMappingURL=getEntriesBoundaries.js.map","/**\n *\n * @param {MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} data\n * @param {object} [moleculeInfo]\n * @param {string} [moleculeInfo.idCode]\n * @param {number[]} [moleculeInfo.index]\n */\nexport default function pushEntry(moleculesDB, molecule, data = {}, moleculeInfo = {}) {\n    // the following line could be the source of problems if the idCode version\n    // changes\n    const moleculeIDCode = getMoleculeIDCode(molecule, moleculeInfo);\n    const id = moleculeIDCode || crypto.randomUUID();\n    let entry = moleculesDB.db[id];\n    if (!entry) {\n        // a new molecule\n        // ensure helper arrays needed for substructure search\n        molecule.ensureHelperArrays(moleculesDB.OCL.Molecule.cHelperRings);\n        let index;\n        if (!moleculeInfo.index) {\n            index = molecule.getIndex();\n        }\n        else {\n            index = moleculeInfo.index;\n        }\n        const molecularFormula = molecule.getMolecularFormula();\n        entry = {\n            molecule,\n            properties: {\n                mw: molecularFormula.relativeWeight,\n                em: molecularFormula.absoluteWeight,\n                mf: molecularFormula.formula,\n            },\n            data: [],\n            idCode: moleculeIDCode,\n            index,\n        };\n        moleculesDB.db[id] = entry;\n        if (moleculesDB.computeProperties) {\n            const properties = new moleculesDB.OCL.MoleculeProperties(molecule);\n            entry.properties = {\n                ...entry.properties,\n                acceptorCount: properties.acceptorCount,\n                donorCount: properties.donorCount,\n                logP: properties.logP,\n                logS: properties.logS,\n                polarSurfaceArea: properties.polarSurfaceArea,\n                rotatableBondCount: properties.rotatableBondCount,\n                stereoCenterCount: properties.stereoCenterCount,\n            };\n        }\n        updateStatistics(moleculesDB.calculatedStatistics, entry.properties);\n    }\n    entry.data.push(data);\n    updateStatistics(moleculesDB.dataStatistics, data);\n}\nfunction updateStatistics(statistics, data) {\n    for (const key in data) {\n        const value = data[key];\n        if (!statistics.has(key)) {\n            statistics.set(key, {\n                counter: 0,\n                kind: typeof value,\n            });\n        }\n        const stat = statistics.get(key);\n        stat.counter++;\n        if (stat.kind !== typeof value) {\n            stat.kind = 'mixed';\n        }\n    }\n}\nfunction getMoleculeIDCode(molecule, moleculeInfo) {\n    let idCode = moleculeInfo.idCode;\n    if (!idCode) {\n        idCode = molecule.getIDCode();\n    }\n    if (idCode === 'd@')\n        return ''; // empty molecule\n    return idCode;\n}\n//# sourceMappingURL=pushEntry.js.map","export async function noWait() {\n    return new Promise((resolve) => {\n        if (typeof setImmediate === 'function') {\n            setImmediate(() => resolve());\n        }\n        else {\n            // didn't find a better way to do it in the browser\n            setTimeout(() => resolve(), 0);\n        }\n    });\n}\n//# sourceMappingURL=noWait.js.map","import { noWait } from '../../util/noWait.js';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nclass AbortError extends Error {\n    name = 'AbortError';\n    code = 20;\n}\nfunction getQuery(moleculesDB, query, options) {\n    const { format = 'idCode' } = options;\n    if (typeof query === 'string') {\n        const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n        query = moleculeCreators.get(format.toLowerCase())(query);\n    }\n    else if (!(query instanceof moleculesDB.OCL.Molecule)) {\n        throw new TypeError('toSearch must be a Molecule or string');\n    }\n    return query;\n}\n/**\n * Internal function to search in the database\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {string} query\n * @param {Record<string, any>} [options={}]\n * @param {'exact'|'substructure'|'substructureOR'|'similarity'} [options.mode='substructure']\n * @returns\n */\nexport function search(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = substructureSearch(moleculesDB, query);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\nexport async function searchAsync(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = await subStructureSearchAsync(moleculesDB, query, options);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\n/**\n * Search for an exact match in the database including stereochemistry\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction exactSearch(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    const queryIDCode = query.getIDCode();\n    const searchResult = moleculesDB.db[queryIDCode]\n        ? [moleculesDB.db[queryIDCode]]\n        : [];\n    return searchResult;\n}\n/**\n * Search for an exact match without stereo information\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule}  query\n * @returns\n */\nfunction exactSearchNoStereo(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    query.stripStereoInformation();\n    const queryIDCode = query.getIDCode();\n    // first filter by molecular weight\n    const mw = query.getMolecularFormula().relativeWeight;\n    const results = [];\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (mw !== entry.properties.mw) {\n            continue;\n        }\n        const candidateMolecule = entry.molecule.getCompactCopy();\n        candidateMolecule.stripStereoInformation();\n        const candidateIDCode = candidateMolecule.getIDCode();\n        if (candidateIDCode !== queryIDCode) {\n            continue;\n        }\n        results.push(entry);\n    }\n    return results;\n}\n/**\n * No atoms in the query, we return all the molecules\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchBegin(moleculesDB, query) {\n    const searchResult = [];\n    if (query.getAllAtoms() === 0) {\n        for (const idCode in moleculesDB.db) {\n            searchResult.push(moleculesDB.db[idCode]);\n        }\n    }\n    return { searchResult };\n}\nfunction substructureSearchEnd(searchResult, queryMW) {\n    searchResult.sort((a, b) => {\n        return (Math.abs(queryMW - a.properties.mw) - Math.abs(queryMW - b.properties.mw));\n    });\n    return searchResult;\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments all the fragments must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearch(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments only one fragment must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchOR(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queries = [];\n        for (const fragment of query.getFragments()) {\n            queries.push({\n                fragment,\n                queryIndex: fragment.getIndex(),\n            });\n        }\n        const searcher = moleculesDB.searcher;\n        molecule: for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            for (const { fragment, queryIndex } of queries) {\n                searcher.setFragment(fragment, queryIndex);\n                if (searcher.isFragmentInMolecule()) {\n                    searchResult.push(entry);\n                    continue molecule;\n                }\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nasync function subStructureSearchAsync(moleculesDB, query, options = {}) {\n    const queryMW = getMW(query); // we\n    query = query.getCompactCopy();\n    query.setFragment(true);\n    const { interval = 100, onStep, controller } = options;\n    let shouldAbort = false;\n    if (controller) {\n        const abortEventListener = () => {\n            shouldAbort = true;\n        };\n        controller.signal.addEventListener('abort', abortEventListener);\n    }\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    let begin = performance.now();\n    if (searchResult.length === 0) {\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        let index = 0;\n        const length = Object.keys(moleculesDB.db).length;\n        for (const idCode in moleculesDB.db) {\n            if (shouldAbort) {\n                throw new AbortError('Query aborted');\n            }\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n            if ((onStep || controller) && performance.now() - begin >= interval) {\n                begin = performance.now();\n                if (onStep) {\n                    onStep(index, length);\n                }\n                if (controller && !onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await noWait();\n                }\n            }\n            index++;\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nfunction similaritySearch(moleculesDB, query) {\n    const queryIndex = query.getIndex();\n    const queryMW = getMW(query);\n    const queryIdCode = query.getIDCode();\n    const searchResult = [];\n    let similarity;\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (entry.idCode === queryIdCode) {\n            similarity = Number.MAX_SAFE_INTEGER;\n        }\n        else {\n            similarity =\n                moleculesDB.OCL.SSSearcherWithIndex.getSimilarityTanimoto(queryIndex, entry.index) *\n                    1000000 -\n                    Math.abs(queryMW - entry.properties.mw) / 10000;\n        }\n        searchResult.push({ similarity, entry });\n    }\n    searchResult.sort((a, b) => {\n        return b.similarity - a.similarity;\n    });\n    return searchResult.map((entry) => entry.entry);\n}\nfunction getMW(query) {\n    const copy = query.getCompactCopy();\n    copy.setFragment(false);\n    return copy.getMolecularFormula().relativeWeight;\n}\nfunction processResult(entries, options = {}) {\n    const { flattenResult = true, keepMolecule = false, limit = Number.MAX_SAFE_INTEGER, } = options;\n    const results = [];\n    if (flattenResult) {\n        for (const entry of entries) {\n            for (const data of entry.data) {\n                const result = {\n                    data,\n                    idCode: entry.idCode,\n                    properties: entry.properties,\n                };\n                if (keepMolecule) {\n                    result.molecule = entry.molecule;\n                }\n                results.push(result);\n            }\n        }\n    }\n    else {\n        for (const entry of entries) {\n            results.push({\n                data: entry.data,\n                idCode: entry.idCode,\n                properties: entry.properties,\n                molecule: keepMolecule ? entry.molecule : undefined,\n            });\n        }\n    }\n    if (limit < results.length)\n        results.length = limit;\n    return results;\n}\n//# sourceMappingURL=search.js.map","let rAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getRAtomicNumber(molecule) {\n    if (!rAtomicNumber) {\n        const OCL = molecule.getOCL();\n        rAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('R', OCL.Molecule.cPseudoAtomR);\n    }\n    return rAtomicNumber;\n}\n//# sourceMappingURL=getRAtomicNumber.js.map","/**\n *\n * @param {*} processedMolecules\n * @param {import('openchemlib').Molecule|string} molecule\n * @param {*} options\n * @returns\n */\nexport function checkIfExistsOrAddInfo(processedMolecules, molecule, options) {\n    const { moleculeInfoCallback, asReagent, asProduct } = options;\n    const idCode = typeof molecule === 'string' ? idCode : molecule.getIDCode();\n    if (processedMolecules.has(idCode)) {\n        const entry = processedMolecules.get(idCode);\n        let exists = false;\n        if (asReagent) {\n            if (entry.asReagent) {\n                exists = true;\n            }\n            else {\n                entry.asReagent = true;\n            }\n        }\n        if (asProduct) {\n            if (entry.asProduct) {\n                exists = true;\n            }\n            else {\n                entry.asProduct = true;\n            }\n        }\n        return { exists, info: entry };\n    }\n    else {\n        let info = {\n            idCode,\n            asReagent,\n            asProduct,\n            info: {},\n        };\n        if (moleculeInfoCallback) {\n            info.info = moleculeInfoCallback(molecule);\n        }\n        processedMolecules.set(idCode, info);\n        return { exists: false, info };\n    }\n}\n//# sourceMappingURL=checkIfExistsOrAddInfo.js.map","import { checkIfExistsOrAddInfo } from './checkIfExistsOrAddInfo.js';\n/**\n * @description apply one reaction to one reactant\n * @param {import('openchemlib').Molecule[]} reactants\n * @param tree\n * @param {Array<object>} reactions - rxnCode of the reaction\n * @param {object} options - options to apply the reaction\n * @param {number} options.currentDepth - current depth of the recursion\n * @param {number} options.maxDepth - max depth of the recursion\n * @param {number} options.maxCurrentDepth - max depth of the recursion for this set of reactions\n * @param {number} options.limitReactions - limit the number of reactions\n * @param {object} options.stats - stats of the recursion\n * @param {number} options.stats.counter - number of reactions\n * @param {Map} options.processedMolecules - set of processed molecules\n * @param {Array} options.trees - array of trees of previous recursions\n * @param {object} options.OCL - OCL object\n * @returns {Array} array of results\n */\nexport function applyOneReactantReactions(tree, reactions, options) {\n    const { currentDepth, maxDepth, maxCurrentDepth, processedMolecules, OCL, logger, stats, limitReactions, } = options;\n    if (tree.molecules.length !== 1) {\n        logger?.warn('applyOneReactantReactions:tree.reactants.length!==1', tree.reactants.length);\n        return [];\n    }\n    const reactant = OCL.Molecule.fromIDCode(tree.molecules[0].idCode);\n    const todoNextDepth = [];\n    // if the current depth is greater than the max depth, we stop the recursion and return an empty array\n    if (currentDepth > maxCurrentDepth || tree.depth >= maxDepth) {\n        return [];\n    }\n    const existsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactant, {\n        ...options,\n        asReagent: true,\n    });\n    // check if the reactant has already been processed\n    if (existsAndInfo.exists) {\n        return [];\n    }\n    for (const reaction of reactions) {\n        if (stats.counter >= limitReactions) {\n            return [];\n        }\n        const reactor = new OCL.Reactor(reaction.oclReaction);\n        // isMatching is true if the reactant is matching the reaction else we continue to the next reaction\n        const isMatching = Boolean(reactor.setReactant(0, reactant));\n        if (isMatching) {\n            stats.counter++;\n            // get the products of the reaction\n            const oneReactionProducts = reactor.getProducts();\n            for (const oneReactionProduct of oneReactionProducts) {\n                for (const reactionProduct of oneReactionProduct) {\n                    // get the info of the product (idCode, mf)\n                    const productExistsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactionProduct, { ...options, asProduct: true });\n                    // if the product has not been processed yet, we add it to the list of products and we add it to the list of todoNextDepth\n                    if (!productExistsAndInfo.exists) {\n                        // eslint-disable-next-line no-unused-vars\n                        const { oclReaction, needToBeCharged, ...reactionWithoutOCL } = reaction;\n                        const oneReaction = {\n                            reaction: reactionWithoutOCL,\n                            depth: tree.depth + 1,\n                            isValid: true,\n                            currentDepth,\n                            molecules: [\n                                checkIfExistsOrAddInfo(processedMolecules, reactionProduct, options).info,\n                            ],\n                        };\n                        if (!tree.children)\n                            tree.children = [];\n                        tree.children.push(oneReaction);\n                        todoNextDepth.push(() => {\n                            return applyOneReactantReactions(oneReaction, reactions, {\n                                ...options,\n                                currentDepth: currentDepth + 1,\n                            });\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // by returning todoNextDepth, we make sure that the recursion will continue\n    return todoNextDepth;\n}\n//# sourceMappingURL=applyOneReactantReactions.js.map","export function getFilteredTrees(reactions, options = {}) {\n    const { filter = () => true } = options;\n    const nodesToKeep = reactions.getNodes().filter(filter);\n    const parentMap = reactions.getParentMap();\n    for (let currentNode of nodesToKeep) {\n        const parent = parentMap.get(currentNode);\n        if (parent && nodesToKeep.includes(parent) === false) {\n            nodesToKeep.push(parent);\n        }\n    }\n    return getValidChildren(reactions.trees, { nodesToKeep });\n}\nfunction getValidChildren(nodes, options) {\n    const { nodesToKeep } = options;\n    const validNodes = nodes\n        .filter((node) => nodesToKeep.includes(node))\n        .map((node) => ({ ...node }));\n    for (const node of validNodes) {\n        if (node.children) {\n            const validChildren = node.children.filter((child) => nodesToKeep.includes(child));\n            if (validChildren.length > 0) {\n                node.children = getValidChildren(validChildren, { nodesToKeep });\n            }\n            else {\n                delete node.children;\n            }\n        }\n    }\n    return validNodes;\n}\n//# sourceMappingURL=getFilteredTrees.js.map","export function getLeaves(trees) {\n    const leaves = [];\n    for (const tree of trees) {\n        appendLeavesSS(leaves, tree);\n    }\n    return leaves;\n}\nfunction appendLeavesSS(leaves, currentBranch) {\n    if (!currentBranch.children || currentBranch.children.length === 0) {\n        leaves.push(currentBranch);\n        return;\n    }\n    for (const child of currentBranch.children) {\n        appendLeavesSS(leaves, child);\n    }\n}\n//# sourceMappingURL=getLeaves.js.map","export function getNodes(trees) {\n    const nodes = [];\n    for (const tree of trees) {\n        getNodesSS(nodes, tree);\n    }\n    return nodes;\n}\nfunction getNodesSS(nodes, currentBranch) {\n    nodes.push(currentBranch);\n    for (const child of currentBranch?.children || []) {\n        getNodesSS(nodes, child);\n    }\n}\n//# sourceMappingURL=getNodes.js.map","import { appendOCLReaction } from './utils/appendOCLReaction.js';\nimport { applyOneReactantReactions } from './utils/applyOneReactantReactions.js';\nimport { checkIfExistsOrAddInfo } from './utils/checkIfExistsOrAddInfo.js';\nimport { getFilteredTrees } from './utils/getFilteredTrees.js';\nimport { getLeaves } from './utils/getLeaves.js';\nimport { getNodes } from './utils/getNodes.js';\nexport class Reactions {\n    /**\n     *\n     * @param OCL\n     * @param {object} [options={}]\n     * @param {import('cheminfo-types').Logger} logger\n     * @param {number} [options.maxDepth=5]\n     * @param {Function} [options.moleculeInfoCallback]\n     * @param {boolean} [options.skipProcessed=true]\n     */\n    constructor(OCL, options = {}) {\n        this.moleculeInfoCallback = options.moleculeInfoCallback;\n        this.maxDepth = options.maxDepth ?? 5;\n        this.limitReactions = options.limitReactions ?? 200;\n        this.skipProcessed = options.skipProcessed ?? true;\n        this.logger = options.logger;\n        this.processedMolecules = new Map();\n        this.OCL = OCL;\n        this.trees = [];\n        this.moleculeInfo = {}; // a cache containing molecule information like mw, etc.\n    }\n    /**\n     * We need to call this method for all the reactants on which we want to apply the reactions.\n     * If there is only one reactant, we call this method with an array of one reactant.\n     * If there are multiple reactants, we call this method with an array of the reactants.\n     * This method has to be called for all the reactants\n     * @param {import('openchemlib').Molecule[]|string[]} molecules\n     * @param moleculesOrIDCodes\n     */\n    appendHead(moleculesOrIDCodes) {\n        if (!Array.isArray(moleculesOrIDCodes)) {\n            throw new TypeError('reactants must be an array');\n        }\n        const molecules = moleculesOrIDCodes.map((molecule) => checkIfExistsOrAddInfo(this.processedMolecules, molecule, {\n            moleculeInfoCallback: this.moleculeInfoCallback,\n        }).info);\n        const tree = {\n            molecules,\n            depth: 0,\n            isValid: true, // this node could be implied in reactions\n        };\n        this.trees.push(tree);\n    }\n    /**\n     * Returns all the leaves of the trees\n     * @returns\n     */\n    getLeaves() {\n        return getLeaves(this.trees);\n    }\n    /**\n     * Returns all the nodes of the trees\n     * @returns\n     */\n    getNodes() {\n        return getNodes(this.trees);\n    }\n    getParentMap() {\n        const parentMap = new Map();\n        const nodes = this.getNodes();\n        for (const node of nodes) {\n            if (node.children) {\n                for (const child of node.children) {\n                    parentMap.set(child, node);\n                }\n            }\n        }\n        return parentMap;\n    }\n    /**\n     * When applying reactions some branches may be dead because it can not be implied in any reaction.\n     * This is the case when we specify a 'min' reaction depth.\n     * This will returno only the valid nodes\n     * @returns\n     */\n    getValidNodes() {\n        return this.getNodes().filter((node) => node.isValid);\n    }\n    /**\n     *\n     * @param {object} [options={}]\n     * @param {(object):boolean} [options.filter] - a function that will be called for each node and return true if the node should be kept\n     */\n    getFilteredReactions(options = {}) {\n        const filteredReactions = new Reactions();\n        filteredReactions.moleculeInfoCallback = this.moleculeInfoCallback;\n        filteredReactions.maxDepth = this.maxDepth;\n        filteredReactions.limitReactions = this.limitReactions;\n        filteredReactions.skipProcessed = this.skipProcessed;\n        filteredReactions.logger = this.logger;\n        filteredReactions.processedMolecules = this.processedMolecules;\n        filteredReactions.OCL = this.OCL;\n        filteredReactions.moleculeInfo = this.moleculeInfo; // a cache containing molecule information like mw, etc.\n        filteredReactions.trees = getFilteredTrees(this, options);\n        return filteredReactions;\n    }\n    /**\n     *\n     * @param {object[]} reactions - array of reactions that should be applied\n     * @param {object} [options={}]\n     * @param {number} [options.min=0] - min depth of the reaction\n     * @param {number} [options.max=3] - max depth of the reaction\n     */\n    applyOneReactantReactions(reactions, options = {}) {\n        const { min = 0, max = 3 } = options;\n        clearAsFromProcessedMolecules(this.processedMolecules);\n        const nodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of nodes) {\n            node.currentDepth = 0;\n        }\n        reactions = appendOCLReaction(reactions, this.OCL);\n        const stats = { counter: 0 };\n        // Start the recursion by applying the first level of reactions\n        for (const node of nodes) {\n            let todoCurrentLevel = applyOneReactantReactions(node, reactions, {\n                OCL: this.OCL,\n                currentDepth: 1,\n                processedMolecules: this.processedMolecules,\n                moleculeInfoCallback: this.moleculeInfoCallback,\n                maxDepth: this.maxDepth,\n                maxCurrentDepth: max,\n                stats,\n                limitReactions: this.limitReactions,\n            });\n            do {\n                const nexts = [];\n                for (const todo of todoCurrentLevel) {\n                    nexts.push(todo());\n                }\n                todoCurrentLevel = nexts.flat();\n            } while (todoCurrentLevel.length > 0);\n        }\n        const newNodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of newNodes) {\n            if (node.currentDepth < min || node.currentDepth > max) {\n                node.isValid = false;\n            }\n            delete node.currentDepth;\n        }\n    }\n}\nfunction clearAsFromProcessedMolecules(processedMolecules) {\n    for (const [, value] of processedMolecules) {\n        if (value.asReagent) {\n            value.asReagent = false;\n        }\n        if (value.asProduct) {\n            value.asProduct = false;\n        }\n    }\n}\n//# sourceMappingURL=Reactions.js.map","/**\n * @description Append the OCL reaction to the reaction object\n * @param {Array} reactions - array of reactions objects with rxnCode and label\n * @param {typeof import('openchemlib')} OCL - OCL object\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns {Array} array of reactions objects with rxnCode, label and oclReaction (a decoded version of rxnCode reaction)\n */\nexport function appendOCLReaction(reactions, OCL, options = {}) {\n    const { logger } = options;\n    const newReactions = [];\n    for (const reaction of reactions) {\n        if (reaction.rxnCode) {\n            newReactions.push({\n                ...reaction,\n                oclReaction: OCL.ReactionEncoder.decode(reaction.rxnCode),\n            });\n        }\n        else if (logger) {\n            logger.warn(reaction, 'Reaction without rxnCode');\n        }\n    }\n    return newReactions;\n}\n//# sourceMappingURL=appendOCLReaction.js.map","import appendCSV from './utils/appendCSV.js';\nimport appendColor from './utils/appendColor.js';\nimport appendEntries from './utils/appendEntries.js';\nimport appendSDF from './utils/appendSDF.js';\nimport appendSmilesList from './utils/appendSmilesList.js';\nimport pushEntry from './utils/pushEntry.js';\nimport pushMoleculeInfo from './utils/pushMoleculeInfo.js';\nimport { search, searchAsync } from './utils/search.js';\n/*\n * @typedef {object} InternalStatistics\n * @property {number} counter - number of entries\n * @property {'number'|'boolean'|'string'|'object'|'mixed'} kind - kind of value\n */\n/**\n * this.db is an object with properties 'oclID' that has as value\n * an object that contains the following properties:\n * molecule: an OCL molecule instance\n * index: OCL index used for substructure searching\n * properties: all the calculates properties\n * data: array containing free data associated with this molecule\n */\nexport class MoleculesDB {\n    /**\n     * Creates an instance of MoleculesDB.\n     * @param {typeof import('openchemlib')} OCL - openchemlib library\n     * @param {object} [options={}] - Options.\n     * @param {boolean} [options.computeProperties=false]\n     * @param {boolean} [options.keepEmptyMolecules=false]\n     */\n    constructor(OCL, options = {}) {\n        const { computeProperties = false, keepEmptyMolecules = false } = options;\n        this.OCL = OCL;\n        this.db = {};\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.dataStatistics = new Map();\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.calculatedStatistics = new Map();\n        this.computeProperties = computeProperties;\n        this.keepEmptyMolecules = keepEmptyMolecules;\n        this.searcher = new OCL.SSSearcherWithIndex();\n    }\n    clear() {\n        this.db = {};\n        this.dataStatistics.clear();\n        this.calculatedStatistics.clear();\n    }\n    get nbMolecules() {\n        return Object.keys(this.db).length;\n    }\n    get nbData() {\n        let number = 0;\n        for (const entry of Object.values(this.db)) {\n            number += entry.data.length;\n        }\n        return number;\n    }\n    get statistics() {\n        const nbData = this.nbData;\n        const nbMolecules = this.nbMolecules;\n        const statistics = {\n            data: [],\n            calculated: [],\n        };\n        for (const [key, value] of this.dataStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbData,\n                isNumber: false,\n            };\n            statistics.data.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    for (const data of entry.data) {\n                        if (data[key] < statistic.minValue) {\n                            statistic.minValue = data[key];\n                        }\n                        if (data[key] > statistic.maxValue) {\n                            statistic.maxValue = data[key];\n                        }\n                    }\n                }\n            }\n        }\n        for (const [key, value] of this.calculatedStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbMolecules,\n                isNumeric: false,\n            };\n            statistics.calculated.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    if (entry.properties[key] < statistic.minValue) {\n                        statistic.minValue = entry.properties[key];\n                    }\n                    if (entry.properties[key] > statistic.maxValue) {\n                        statistic.maxValue = entry.properties[key];\n                    }\n                }\n            }\n        }\n        return statistics;\n    }\n    /**\n     * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n     * @param {*} moleculesDB\n     * @param {object[]} entries\n     * @param {object} [options={}]\n     * @param {string} [options.idCodePath='ocl.idCode']\n     * @param {string} [options.indexPath='ocl.index']\n     * @param {string} [options.coordinatesPath='ocl.coordinates']\n     * @param {string} [options.mwPath='mw']\n     * @param {string} [options.smilesPath]\n     * @param {string} [options.molfilePath]\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendEntries(entries, options) {\n        return appendEntries(this, entries, {\n            computeProperties: this.computeProperties,\n            ...options,\n        });\n    }\n    /**\n     * append to the current database a CSV file\n     * @param {string|ArrayBuffer} csv - text file containing the comma separated value file\n     * @param {object} [options={}] - options.\n     * @param {boolean} [options.header=true] - if the first line of the file is a header\n     * @param {boolean} [options.dynamicTyping=true] - dynamically type the data (convert values to number of boolean if possible)\n     * @param {boolean} [options.skipEmptyLines=true] - skip empty lines\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendCSV(csv, options) {\n        return appendCSV(this, csv, options);\n    }\n    /**\n     * Append a SDF to the current database\n     * @param {string|ArrayBuffer} sdf - text file containing the sdf\n     * @param {object} [options={}] - options\n     * @param {Function} [options.onStep] - callback to execute after each molecule\n     * @param {boolean} [options.dynamicTyping=true] - Dynamically type the data\n     * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n     * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n     * @returns {Promise<void>}\n     */\n    appendSDF(sdf, options) {\n        return appendSDF(this, sdf, options);\n    }\n    /**\n     * Append a list of SMILES to the current database.\n     * @param {string|ArrayBuffer} smiles - text file containing a list of smiles\n     * @param {object} [options={}] - Options\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendSmilesList(smiles, options) {\n        return appendSmilesList(this, smiles, options);\n    }\n    /**\n     * Add a molecule to the current database.\n     * @param {import('openchemlib').Molecule} molecule - The molecule to append.\n     * @param {object} [data={}] - Options.\n     * @param {object} [moleculeInfo={}] - May contain precalculated index and mw.\n     */\n    pushEntry(molecule, data, moleculeInfo) {\n        pushEntry(this, molecule, data, moleculeInfo);\n    }\n    /**\n     * Add an entry in the database.\n     * @param {object} moleculeInfo - a molecule as a JSON that may contain the following properties: molfile, smiles, idCode, mf, index\n     * @param {object} [data={}]\n     */\n    pushMoleculeInfo(moleculeInfo, data) {\n        return pushMoleculeInfo(this, moleculeInfo, data);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idlCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @returns {Array} array of object of the type {(molecule), idCode, data, properties}\n     */\n    search(query, options) {\n        return search(this, query, options);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options.\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @param {number} [options.interval=100] - interval in ms to call the onStep callback\n     * @param {Function} [options.onStep] - callback to execute after each interval\n     * @param {AbortController} [options.controler] - callback to execute to check if the search should be aborted\n     * @returns {Promise<Array>} array of object of the type {(molecule), idCode, data, properties}\n     */\n    searchAsync(query, options) {\n        return searchAsync(this, query, options);\n    }\n    /**\n     * Returns an array with the current database\n     * @returns\n     */\n    getDB() {\n        return Object.keys(this.db).map((key) => this.db[key]);\n    }\n    /**\n     * Append the property `data.color` to each entry based on a data or property label\n     * {object} [options={}]\n     * {string} [options.dataLabel] name of the property from `data` to use\n     * {string} [options.propertyLabel] name of the property from `properties` to use\n     * {number} [options.colorLabel='color'] name of the property to add in data that will contain the color\n     * {number} [options.minValue]\n     * {number} [options.maxValue]\n     * {number} [options.minHue=0]\n     * {number} [options.maxHue=360]\n     * {number} [options.saturation=65] percent of color saturation\n     * {number} [options.lightness=65] percent of color lightness\n     * @param options\n     */\n    appendColor(options) {\n        appendColor(this, options);\n    }\n}\n//# sourceMappingURL=MoleculesDB.js.map","import get from 'get-value';\n/**\n * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n * @param {*} moleculesDB\n * @param {object[]} entries\n * @param {object} [options={}]\n * @param {string} [options.idCodePath='ocl.idCode']\n * @param {string} [options.indexPath='ocl.index']\n * @param {string} [options.coordinatesPath='ocl.coordinates']\n * @param {string} [options.mwPath='mw']\n * @param {string} [options.smilesPath]\n * @param {string} [options.molfilePath]\n * @param {Function} [options.onStep] - call back to execute after each molecule\n * @returns\n */\nexport default async function appendEntries(moleculesDB, entries, options = {}) {\n    const { onStep, idCodePath = 'ocl.idCode', indexPath = 'ocl.index', coordinatesPath = 'ocl.coordinates', mwPath = 'mw', smilesPath, molfilePath, } = options;\n    const Molecule = moleculesDB.OCL.Molecule;\n    for (let i = 0; i < entries.length; i++) {\n        let idCode;\n        const entry = entries[i];\n        let molecule;\n        if (smilesPath) {\n            molecule = Molecule.fromSmiles(get(entry, smilesPath));\n        }\n        if (molfilePath && !molecule) {\n            molecule = Molecule.fromMolfile(get(entry, molfilePath));\n        }\n        if (!molecule) {\n            idCode = get(entry, idCodePath);\n            if (idCode) {\n                const coordinates = get(entry, coordinatesPath);\n                molecule = Molecule.fromIDCode(idCode, coordinates || false);\n            }\n        }\n        const index = get(entry, indexPath);\n        const mw = get(entry, mwPath);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, entries.length);\n        }\n        if (!moleculesDB.keepEmptyMolecules &&\n            (!molecule || molecule.getAllAtoms() === 0)) {\n            continue;\n        }\n        else if (!molecule) {\n            molecule = new moleculesDB.OCL.Molecule(0, 0);\n        }\n        if (molecule) {\n            moleculesDB.pushEntry(molecule, entry, { index, mw });\n        }\n    }\n}\n//# sourceMappingURL=appendEntries.js.map","import { ensureString } from 'ensure-string';\nexport default async function appendSmilesList(moleculesDB, text, options = {}) {\n    const { onStep } = options;\n    text = ensureString(text);\n    if (typeof text !== 'string') {\n        throw new TypeError('text must be a string');\n    }\n    const smilesArray = text\n        .split(/\\r?\\n/)\n        .map((line) => line.trim())\n        .filter(Boolean);\n    for (let i = 0; i < smilesArray.length; i++) {\n        const oneSmiles = smilesArray[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromSmiles(oneSmiles));\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, smilesArray.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSmilesList.js.map","export default function pushMoleculeInfo(moleculesDB, moleculeInfo, data = {}) {\n    if (typeof moleculeInfo !== 'object') {\n        throw new Error('pushMoleculeInfo requires an object as first parameter');\n    }\n    const Molecule = moleculesDB.OCL.Molecule;\n    let molecule;\n    if (moleculeInfo.molfile) {\n        molecule = Molecule.fromMolfile(moleculeInfo.molfile);\n    }\n    if (moleculeInfo.smiles)\n        molecule = Molecule.fromSmiles(moleculeInfo.smiles);\n    if (moleculeInfo.idCode) {\n        if (moleculesDB.db[moleculeInfo.idCode]) {\n            molecule = moleculesDB.db[moleculeInfo.idCode].molecule;\n        }\n        else {\n            molecule = Molecule.fromIDCode(moleculeInfo.idCode, moleculeInfo.coordinates || false);\n        }\n    }\n    if (molecule) {\n        moleculesDB.pushEntry(molecule, data, moleculeInfo);\n    }\n}\n//# sourceMappingURL=pushMoleculeInfo.js.map","export default function appendColor(moleculesDB, options = {}) {\n    const { dataLabel, propertyLabel, minValue, maxValue, minHue = 0, maxHue = 360, saturation = 65, lightness = 65, colorLabel = 'color', } = options;\n    const db = moleculesDB.getDB();\n    let values;\n    if (dataLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: datum[dataLabel], data: datum })));\n    }\n    else if (propertyLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({\n            value: result.properties[propertyLabel],\n            data: datum,\n        })));\n    }\n    else {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: undefined, data: datum })));\n    }\n    if (minValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value < minValue) {\n                value.value = minValue;\n            }\n        }\n    }\n    if (maxValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value > maxValue) {\n                value.value = maxValue;\n            }\n        }\n    }\n    const definedValues = values.filter((value) => value.value !== undefined);\n    const min = Math.min(...definedValues.map((value) => value.value));\n    const max = Math.max(...definedValues.map((value) => value.value));\n    for (const value of values) {\n        if (value.value !== undefined) {\n            value.data[colorLabel] = `hsl(${Math.floor(((value.value - min) / (max - min)) * (maxHue - minHue) + minHue)},${saturation}%,${lightness}%)`;\n        }\n        else {\n            value.data.color = 'black';\n        }\n    }\n}\n//# sourceMappingURL=appendColor.js.map","import { applyFragmentLabels } from \"./applyFragmentLabels.js\";\nimport { autoLabelDatabase } from './autoLabelDatabase.js';\n/**\n * In place modification of the molecule to add auto labels to its atoms based on\n * a database of common substructures.\n * @param molecule\n */\nexport function autoLabel(molecule) {\n    const { Molecule } = molecule.getOCL();\n    for (const entry of autoLabelDatabase) {\n        const fragment = Molecule.fromIDCode(entry.idCode);\n        const result = applyFragmentLabels(molecule, fragment, {\n            algorithm: 'separated',\n        });\n        if (result > 0)\n            return;\n    }\n}\n//# sourceMappingURL=autoLabel.js.map","import { getMF } from '../util/getMF.js';\nimport { getRAtomicNumber } from '../util/getRAtomicNumber.js';\nexport function fragmentAcyclicSingleBonds(molecule) {\n    const OCL = molecule.getOCL();\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = []; // we will store connected atoms of broken bonds\n    }\n    const bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        const bond = {};\n        bonds.push(bond);\n        bond.i = i;\n        bond.order = molecule.getBondOrder(i);\n        bond.atom1 = molecule.getBondAtom(0, i);\n        bond.atom2 = molecule.getBondAtom(1, i);\n        bond.type = molecule.getBondType(i);\n        bond.isAromatic = molecule.isAromaticBond(i);\n        bond.isRingBond = molecule.isRingBond(i);\n        if (!bond.isAromatic && (bond.type & 0b11) === 1 && !bond.isRingBond) {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n    }\n    const brokenMolecule = molecule.getCompactCopy();\n    for (const bond of bonds) {\n        if (bond.selected) {\n            brokenMolecule.markBondForDeletion(bond.i);\n        }\n    }\n    brokenMolecule.deleteMarkedAtomsAndBonds();\n    const fragmentMap = [];\n    const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n    const results = [];\n    for (let i = 0; i < nbFragments; i++) {\n        const result = { atomMap: [] };\n        const includeAtom = fragmentMap.map((id) => {\n            return id === i;\n        });\n        const fragment = new OCL.Molecule(0, 0);\n        const atomMap = [];\n        brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n        // we will add some R groups at the level of the broken bonds\n        for (let j = 0; j < atomMap.length; j++) {\n            if (atomMap[j] > -1) {\n                result.atomMap.push(j);\n                if (atoms[j].links.length > 0) {\n                    for (let k = 0; k < atoms[j].links.length; k++) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(getRAtomicNumber(brokenMolecule)), 1);\n                    }\n                }\n            }\n        }\n        fragment.setFragment(false);\n        result.idCode = fragment.getIDCode();\n        result.mf = getMF(fragment).mf.replace(/R[1-9]?/, '');\n        results.push(result);\n    }\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicSingleBonds.js.map","import { makeRacemic } from '../util/makeRacemic.js';\nexport function getAtomFeatures(originalMolecule, options = {}) {\n    const OCL = originalMolecule.getOCL();\n    const { sphere = 1 } = options;\n    const fragment = new OCL.Molecule(0, 0);\n    const results = [];\n    for (let rootAtom = 0; rootAtom < originalMolecule.getAllAtoms(); rootAtom++) {\n        let min = 0;\n        let max = 0;\n        const atomMask = new Array(originalMolecule.getAtoms());\n        const atomList = new Array(originalMolecule.getAtoms());\n        const molecule = originalMolecule.getCompactCopy();\n        for (let currentSphere = 0; currentSphere <= sphere; currentSphere++) {\n            if (max === 0) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n            else {\n                let newMax = max;\n                for (let i = min; i < max; i++) {\n                    const atom = atomList[i];\n                    for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                        const connAtom = molecule.getConnAtom(atom, j);\n                        if (!atomMask[connAtom]) {\n                            atomMask[connAtom] = true;\n                            atomList[newMax++] = connAtom;\n                        }\n                    }\n                }\n                min = max;\n                max = newMax;\n            }\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, null);\n            if (currentSphere === sphere) {\n                makeRacemic(fragment);\n                results.push(fragment.getCanonizedIDCode());\n            }\n        }\n    }\n    const atoms = {};\n    for (const result of results) {\n        if (!atoms[result]) {\n            atoms[result] = 1;\n        }\n        else {\n            atoms[result]++;\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=getAtomFeatures.js.map","/**\n * Returns the charge of a molecule\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {number}\n */\nexport function getCharge(molecule) {\n    let charge = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        charge += molecule.getAtomCharge(i);\n    }\n    return charge;\n}\n//# sourceMappingURL=getCharge.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Parse a molfile and returns an object containing the molecule, the map and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} molfile\n * @returns\n */\nexport function getDiastereotopicAtomIDsFromMolfile(OCL, molfile) {\n    const { map, molecule } = OCL.Molecule.fromMolfileWithAtomMap(molfile);\n    const diaIDsArray = getDiastereotopicAtomIDsAndH(molecule);\n    const diaIDs = {};\n    for (let i = 0; i < map.length; i++) {\n        diaIDs[map[i]] = { source: map[i], destination: i, ...diaIDsArray[i] };\n    }\n    return { map: diaIDs, molecule, diaIDs: diaIDsArray };\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsFromMolfile.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\nimport { groupDiastereotopicAtomIDs } from './groupDiastereotopicAtomIDs.js';\n/**\n * This function groups the diasterotopic atomIds of the molecule based on equivalence of atoms. The output object contains\n * a set of chemically equivalent atoms(element.atoms) and the groups of magnetically equivalent atoms (element.magneticGroups)\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.atomLabel] - Select atoms of the given atomLabel. By default it returns all the explicit atoms in the molecule\n * @returns {Array}\n */\nexport function getGroupedDiastereotopicAtomIDs(molecule, options = {}) {\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    return groupDiastereotopicAtomIDs(diaIDs, molecule, options);\n}\n//# sourceMappingURL=getGroupedDiastereotopicAtomIDs.js.map","export function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || molecule.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    atoms: [],\n                    oclID: diaID,\n                    atomLabel: molecule.getAtomLabel(i),\n                };\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\n//# sourceMappingURL=groupDiastereotopicAtomIDs.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns the hose codes for all atoms in the molecule\n * @param {*} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodes(molecule, options = {}) {\n    const { atomLabels, minSphereSize, maxSphereSize } = options;\n    const { Molecule } = molecule.getOCL();\n    const atomicNumbers = atomLabels?.map((label) => Molecule.getAtomicNoFromLabel(label));\n    const internalMolecule = getCompactCopyWithoutCustomLabels(molecule);\n    internalMolecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(internalMolecule);\n    const hoses = [];\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        if (atomicNumbers &&\n            !atomicNumbers.includes(internalMolecule.getAtomicNo(i))) {\n            hoses.push(undefined);\n        }\n        else {\n            const tempMolecule = internalMolecule.getCompactCopy();\n            tagAtom(tempMolecule, i);\n            hoses.push(getHoseCodesForAtomsAsStrings(tempMolecule, {\n                minSphereSize,\n                maxSphereSize,\n            }));\n        }\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodes.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an object containing a molfile, molfile with hydrogens, hoses codes and optionally the diaIDs\n * and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {boolean} [options.calculateDiastereotopicIDs=true]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodesAndInfo(molecule, options = {}) {\n    const { minSphereSize, maxSphereSize, calculateDiastereotopicIDs = true, } = options;\n    const { Molecule } = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    // this will force reordering of the hydrogens to the end, just to have the same order as in the molfile\n    molecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    const newMolfile = molecule.toMolfile();\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const newMolfileWithH = molecule.toMolfile();\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const cache = {};\n    const hoses = [];\n    const diaIDs = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const rank = symmetryRanks[i];\n        if (rank && cache[rank]) {\n            diaIDs.push(cache[rank].diaID);\n            hoses.push(cache[rank].hose);\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, i);\n        let diaID;\n        if (calculateDiastereotopicIDs) {\n            makeRacemic(tempMolecule);\n            diaID = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n            diaIDs.push(diaID);\n        }\n        const hose = getHoseCodesForAtomsAsStrings(tempMolecule, {\n            minSphereSize,\n            maxSphereSize,\n        });\n        hoses.push(hose);\n        cache[rank] = { diaID, hose };\n    }\n    const distanceMatrix = getConnectivityMatrix(molecule, { pathLength: true });\n    return {\n        molfile: newMolfile,\n        molfileWithH: newMolfileWithH,\n        hoses,\n        diaIDs: calculateDiastereotopicIDs ? diaIDs : undefined,\n        moleculeWithHydrogens: molecule,\n        distanceMatrix,\n    };\n}\n//# sourceMappingURL=getHoseCodesAndInfo.js.map","import { getHoseCodesForAtoms } from './getHoseCodesForAtoms.js';\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} originalMolecule\n * @param {number} rootAtom\n * @param {object} [options={}]\n * @param {boolean} [options.isTagged] - Specify is the atom is already tagged\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtom(originalMolecule, rootAtom, options = {}) {\n    return getHoseCodesForAtoms(originalMolecule, [rootAtom], options);\n}\n//# sourceMappingURL=getHoseCodesForAtom.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * This method ensure implicity hydrogens and possible missing chiral bonds.\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to process.\n * @param {object} options - Options for generating hose codes.\n * @param {string[]} [options.allowedCustomLabels] - Array of the custom labels that are considered as root atoms. By default all atoms having a customLabel\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n *  @param {number[]} [options.rootAtoms=[]] - Array of atom from which we should start to create the HOSE. By default we will used the taggedAtoms\n * @param {number[]} [options.tagAtoms=[]] - Array of atom indices to tag as root atoms\n * @param {Function} [options.tagAtomFct=tagAtom] - Function to tag an atom as root atom. By default it is defined internal\n * @returns {Array} - An array of hose code fragments.\n */\nexport function getHoseCodesFromDiastereotopicID(molecule, options = {}) {\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    return getHoseCodesForAtomsAsStrings(molecule, options);\n}\n//# sourceMappingURL=getHoseCodesFromDiastereotopicID.js.map","export function getImplicitHydrogensCount(molecule, atomID) {\n    return molecule.getImplicitHydrogens(atomID);\n}\n//# sourceMappingURL=getImplicitHydrogensCount.js.map","/**\n * We have 2 molfiles and we would like to map the atom number from one to the other.\n * We expect that both molfiles contain the same atoms that can be in a different order.\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} from\n * @param {string} to\n * @returns {{fromTo: number[], toFrom: number[]}} - fromTo is an array of the same length as the number of atoms in the from molfile. Each element is the index of the corresponding atom in the to molfile. toFrom is the opposite.\n */\nexport function getMolfilesMapping(OCL, from, to) {\n    const { Molecule } = OCL;\n    const fromF = from.replaceAll(' H ', ' X ');\n    const toF = to.replaceAll(' H ', ' X ');\n    // we may ignore mapping because we should not have hydrogens anymore\n    const fromMoleculeF = Molecule.fromMolfile(fromF);\n    const toMoleculeF = Molecule.fromMolfile(toF);\n    if (fromMoleculeF.getIDCode() !== toMoleculeF.getIDCode()) {\n        // only a problem of hydrogens ?\n        const fromMolecule = Molecule.fromMolfile(from);\n        const toMolecule = Molecule.fromMolfile(to);\n        if (fromMolecule.getIDCode() === toMolecule.getIDCode()) {\n            throw new Error('Molecules do not have the same explicit hydrogens');\n        }\n        else {\n            throw new Error('Molecules are different');\n        }\n    }\n    const fromFinalRanks = [...fromMoleculeF.getFinalRanks()];\n    const toFinalRanks = [...toMoleculeF.getFinalRanks()];\n    // need now to create the mapping\n    const fromTo = [];\n    const toFrom = [];\n    for (let i = 0; i < fromFinalRanks.length; i++) {\n        const fromRank = fromFinalRanks[i];\n        const toRank = toFinalRanks.indexOf(fromRank);\n        if (toRank === -1) {\n            throw new Error('Rank not found. This should never happen.');\n        }\n        fromTo[i] = toRank;\n        toFrom[toRank] = i;\n    }\n    return { fromTo, toFrom };\n}\n//# sourceMappingURL=getMolfilesMapping.js.map","import { getNMRHints } from \"./getNMRHints.js\";\n/**\n *\n * @param correct\n * @param proposed\n * @param providedHints\n */\nexport function getNextNMRHint(correct, proposed, providedHints) {\n    const hints = getNMRHints(correct, proposed);\n    const possibleHints = hints.filter((possibleHint) => !providedHints.some((providedHint) => possibleHint.hash === providedHint.hash));\n    if (possibleHints.length === 0)\n        return undefined;\n    return {\n        ...possibleHints[0],\n        idCode: proposed.getIDCode(),\n    };\n}\n//# sourceMappingURL=getNextNMRHint.js.map","/**\n * Returns the custom labels that are shared by more than one atom.\n * Atoms without a custom label are ignored, so a molecule with no custom labels,\n * or with only unique ones, yields an empty array.\n * @param molecule - The molecule whose atom custom labels should be checked.\n * @returns The deduplicated list of non-unique custom labels, in first-seen\n * order. Empty when every custom label is unique.\n */\nexport function getNonUniqueCustomLabels(molecule) {\n    const counts = new Map();\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const customLabel = molecule.getAtomCustomLabel(i)?.replace(/^\\]/, '');\n        if (!customLabel)\n            continue;\n        counts.set(customLabel, (counts.get(customLabel) ?? 0) + 1);\n    }\n    const nonUniqueCustomLabels = [];\n    for (const [customLabel, count] of counts) {\n        if (count > 1)\n            nonUniqueCustomLabels.push(customLabel);\n    }\n    return nonUniqueCustomLabels;\n}\n//# sourceMappingURL=getNonUniqueCustomLabels.js.map","/**\n * Get the shortest path between each pair of atoms in the molecule\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.maxLength=4]\n * @returns {Array<Array>} A matrix containing on each cell (i,j) the shortest path from atom i to atom j\n */\nexport function getShortestPaths(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { fromLabel = '', toLabel = '', maxLength = 3 } = options;\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    const nbAtoms = molecule.getAllAtoms();\n    const allShortestPaths = new Array(nbAtoms);\n    for (let i = 0; i < nbAtoms; i++) {\n        allShortestPaths[i] = new Array(nbAtoms);\n    }\n    for (let from = 0; from < nbAtoms; from++) {\n        allShortestPaths[from][from] = [from];\n        for (let to = from + 1; to < nbAtoms; to++) {\n            if ((fromAtomicNumber === 0 ||\n                molecule.getAtomicNo(from) === fromAtomicNumber) &&\n                (toAtomicNumber === 0 || molecule.getAtomicNo(to) === toAtomicNumber)) {\n                const path = [];\n                molecule.getPath(path, from, to, maxLength);\n                if (path.length > 0) {\n                    allShortestPaths[from][to] = path.slice();\n                    allShortestPaths[to][from] = path.toReversed();\n                }\n                else {\n                    allShortestPaths[from][to] = null;\n                    allShortestPaths[to][from] = null;\n                }\n            }\n            else {\n                allShortestPaths[from][to] = null;\n                allShortestPaths[to][from] = null;\n            }\n        }\n    }\n    return allShortestPaths;\n}\n//# sourceMappingURL=getShortestPaths.js.map","/**\n * Return the number of Carbonyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carbonyl groups'\n */\nexport function nbCHO(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        // if there is not at least one hydrogen in the carbon atom there can not be a carbonyl group\n        if (molecule.getAtomicNo(i) === 6 && molecule.getAllHydrogens(i) > 0) {\n            let carbonyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl group on the same carbon atom they are not counted as carbonyl groups\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carbonyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCHO.js.map","/**\n * Return the number of Nitrile groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Nitrile groups'\n */\nexport function nbCN(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let cn = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 3) {\n                    // If there is more than one Nitrile group in the same carbon atome they are not counted as Nitrile groups\n                    if (cn) {\n                        cn = false;\n                        break;\n                    }\n                    cn = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Nitrile group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (cn && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCN.js.map","/**\n * Return the number of Carboxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carboxyl groups'\n */\nexport function nbCOOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atom it is not couted as Carboxyl group\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl in the same carbon atom it is not count as Carboxyl group\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carboxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCOOH.js.map","/**\n * Return the number of labile protons being either on O, N, Br, Cl, F, I or S\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {Array<number>} [options.atomicNumbers=[7, 8, 9, 16, 17, 35, 53]] - atomic numbers of the labile protons\n * @returns {number} 'Number of labile protons'\n */\nexport function nbLabileH(molecule, options = {}) {\n    const { atomicNumbers = [7, 8, 9, 16, 17, 35, 53] } = options;\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (atomicNumbers.includes(molecule.getAtomicNo(i))) {\n            counter += molecule.getAllHydrogens(i);\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbLabileH.js.map","/**\n * Return the number of Primary amine groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Primary amine groups'\n */\nexport function nbNH2(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let amine = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 1 &&\n                    molecule.getAllHydrogens(neighbourAtom) > 1) {\n                    // If there is more than a Primary amine in the same carbon atom they are not couted as Primary amines groups\n                    if (amine) {\n                        amine = false;\n                        break;\n                    }\n                    amine = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Primary amine group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (amine && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbNH2.js.map","/**\n * Return the number of Hydroxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Hydroxyl groups'\n */\nexport function nbOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atome they are not couted as Hydroxyl groups\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is Carbonyl group on the same carbon atom it is not couted as Hydroxyl group\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Hydroxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (!carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbOH.js.map","import { getCamelCase } from './getCamelCase.js';\nexport function getParts(text) {\n    const lines = text.split(/\\r?\\n/);\n    const parts = { data: [] };\n    let currentPart = parts.data;\n    let currentLabel = '';\n    for (const line of lines) {\n        if (line.startsWith('</')) {\n            // close existing part\n            if (currentLabel !== line.slice(2, -1)) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = '';\n            currentPart = parts.data;\n        }\n        else if (line.startsWith('<') && !line.includes('=')) {\n            // open new part\n            if (currentLabel) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = line.slice(1, -1);\n            const target = getCamelCase(currentLabel);\n            parts[target] = [];\n            currentPart = parts[target];\n        }\n        else if (currentLabel) {\n            // add line to current part\n            currentPart.push(line);\n        }\n        else {\n            //data lines\n            currentPart.push(line);\n        }\n    }\n    return parts;\n}\n//# sourceMappingURL=getParts.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Returns a SVG\n * @param {*} molecule\n * @param {*} [options={}]\n */\nexport function toDiastereotopicSVG(molecule, options = {}) {\n    const { width = 300, height = 200, prefix = 'ocl', heavyAtomHydrogen = false, } = options;\n    let svg = options.svg;\n    let diaIDs = [];\n    const hydrogenInfo = {};\n    for (const line of getDiastereotopicAtomIDsAndH(molecule)) {\n        hydrogenInfo[line.oclID] = line;\n    }\n    if (heavyAtomHydrogen) {\n        for (let i = 0; i < molecule.getAtoms(); i++) {\n            diaIDs.push([]);\n        }\n        const groupedDiaIDs = molecule.getGroupedDiastereotopicAtomIDs();\n        for (const diaID of groupedDiaIDs) {\n            if (hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const atom of diaID.atoms) {\n                    for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                        if (!diaIDs[atom * 1].includes(id))\n                            diaIDs[atom].push(id);\n                    }\n                }\n            }\n        }\n    }\n    else {\n        diaIDs = molecule.getDiastereotopicAtomIDs().map((a) => [a]);\n    }\n    if (!svg)\n        svg = molecule.toSVG(width, height, prefix);\n    svg = svg.replaceAll(/Atom:\\d+\"/g, (value) => {\n        const atom = value.replaceAll(/\\D/g, '');\n        return `${value} data-diaid=\"${diaIDs[atom].join(',')}\"`;\n    });\n    return svg;\n}\n//# sourceMappingURL=toDiastereotopicSVG.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Convert a molecule to a molfile object compatible with the visualizer.\n * @param {import('openchemlib').Molecule} molecule - The molecule to convert.\n * @param {object} [options={}] - Options to control atom highlighting and grouping.\n * @param {boolean} [options.diastereotopic] - If true, group atoms by diastereotopic IDs.\n * @param {boolean} [options.atomMapNo] - If true, group atoms by their atom map number. Atoms with no map number (0) are excluded from highlighting.\n * @param {boolean} [options.customAtomLabel] - If true, group atoms by their custom atom label. Atoms with no custom label are excluded from highlighting.\n * @param {boolean} [options.heavyAtomHydrogen] - If true, copy each hydrogen's highlight label to its parent heavy atom. When used with diastereotopic, implicit hydrogens are added internally to compute their diastereotopic IDs.\n * @param {boolean} [options.collapseHydrogens] - If true, remove explicit hydrogens from the molfile. Implies heavyAtomHydrogen.\n * @returns {{ type: string, value: string, _highlight: Array, _atoms: object }} A molfile object with highlight and atom mapping information.\n */\nexport function toVisualizerMolfile(molecule, options = {}) {\n    const { diastereotopic, atomMapNo, customAtomLabel, heavyAtomHydrogen, collapseHydrogens, } = options;\n    const copyH = heavyAtomHydrogen || collapseHydrogens;\n    // Work on a copy to avoid mutating the original molecule.\n    // When heavyAtomHydrogen is used with diastereotopic, add implicit H\n    // so we can compute their diastereotopic IDs.\n    let labelMolecule = molecule.getCompactCopy();\n    const { Molecule } = labelMolecule.getOCL();\n    if (heavyAtomHydrogen && diastereotopic) {\n        labelMolecule.addImplicitHydrogens();\n    }\n    labelMolecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // Phase 1: Label all atoms based on the chosen mode\n    // Build groups: label → [atomIndices]\n    const groups = {};\n    if (diastereotopic) {\n        const diaIDs = getDiastereotopicAtomIDs(labelMolecule);\n        for (let i = 0; i < diaIDs.length; i++) {\n            const label = diaIDs[i];\n            if (!groups[label]) {\n                groups[label] = [];\n            }\n            if (!groups[label].includes(i)) {\n                groups[label].push(i);\n            }\n        }\n    }\n    else if (customAtomLabel) {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            const label = labelMolecule.getAtomCustomLabel(i);\n            if (!label)\n                continue;\n            if (!groups[label]) {\n                groups[label] = [];\n            }\n            groups[label].push(i);\n        }\n    }\n    else if (atomMapNo) {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            const mapNo = labelMolecule.getAtomMapNo(i);\n            if (mapNo === 0)\n                continue;\n            if (!groups[mapNo]) {\n                groups[mapNo] = [];\n            }\n            groups[mapNo].push(i);\n        }\n    }\n    else {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            groups[i] = [i];\n        }\n    }\n    // Phase 2: If heavyAtomHydrogen or collapseHydrogens, copy each hydrogen's\n    // label entries to its parent heavy atom\n    if (copyH) {\n        for (const atomIndices of Object.values(groups)) {\n            for (const atomIndex of atomIndices) {\n                if (labelMolecule.getAtomicNo(atomIndex) !== 1)\n                    continue;\n                if (labelMolecule.getAllConnAtoms(atomIndex) === 0)\n                    continue;\n                const heavyAtom = labelMolecule.getConnAtom(atomIndex, 0);\n                if (!atomIndices.includes(heavyAtom)) {\n                    atomIndices.push(heavyAtom);\n                }\n            }\n        }\n    }\n    // Phase 3: Remove H atoms from groups and remap indices.\n    // This runs when collapseHydrogens is set, or when we internally added H\n    // for heavyAtomHydrogen with diastereotopic (to restore the original atom count).\n    const shouldCollapse = collapseHydrogens || (heavyAtomHydrogen && diastereotopic);\n    if (shouldCollapse) {\n        const totalAtoms = labelMolecule.getAllAtoms();\n        const isHydrogen = new Array(totalAtoms).fill(false);\n        const atomsToDelete = [];\n        for (let i = 0; i < totalAtoms; i++) {\n            if (labelMolecule.getAtomicNo(i) === 1) {\n                isHydrogen[i] = true;\n                atomsToDelete.push(i);\n            }\n        }\n        // Build index remap: old index → new index for non-H atoms\n        const indexRemap = new Map();\n        let newIdx = 0;\n        for (let i = 0; i < totalAtoms; i++) {\n            if (!isHydrogen[i]) {\n                indexRemap.set(i, newIdx++);\n            }\n        }\n        // Remap atom indices in groups: remove H, remap heavy atoms\n        for (const label of Object.keys(groups)) {\n            groups[label] = groups[label]\n                .filter((i) => !isHydrogen[i])\n                .map((i) => indexRemap.get(i));\n            if (groups[label].length === 0) {\n                delete groups[label];\n            }\n        }\n        if (collapseHydrogens) {\n            labelMolecule.deleteAtoms(atomsToDelete);\n        }\n    }\n    // Build highlight and atoms from groups\n    const highlight = [];\n    const atoms = {};\n    for (const label of Object.keys(groups)) {\n        highlight.push(atomMapNo ? Number(label) : label);\n        atoms[label] = groups[label];\n    }\n    // Use the original molecule for the molfile unless we collapsed H\n    const outputMolecule = collapseHydrogens ? labelMolecule : molecule;\n    return {\n        type: 'mol2d',\n        value: outputMolecule.toMolfile(),\n        _highlight: highlight,\n        _atoms: atoms,\n    };\n}\n//# sourceMappingURL=toVisualizerMolfile.js.map","/**\n * Toggle presence of implicity hydrogens on/off\n * @param molecule\n * @param atomID\n */\nexport function toggleHydrogens(molecule, atomID) {\n    if (molecule.getImplicitHydrogens(atomID) === 0) {\n        const atomsToDelete = [];\n        for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n            const connectedAtom = molecule.getConnAtom(atomID, i);\n            if (molecule.getAtomicNo(connectedAtom) === 1) {\n                atomsToDelete.push(connectedAtom);\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n    }\n    else {\n        molecule.addImplicitHydrogens(atomID);\n    }\n}\n//# sourceMappingURL=toggleHydrogens.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentAcyclicBonds = fragmentAcyclicBonds;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\n/**\n * The function performs the fragmentation of all single linear bonds\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns Results fragmentation of acyclic bonds\n */\nfunction fragmentAcyclicBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    let atoms = [];\n    // Prepare object with lenght equal to number of atoms\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        let atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = [];\n    }\n    let bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        let bond = {\n            index: i,\n            order: molecule.getBondOrder(i),\n            atom1: molecule.getBondAtom(0, i),\n            atom2: molecule.getBondAtom(1, i),\n            type: molecule.getBondType(i),\n            isAromatic: molecule.isAromaticBond(i),\n            isRingBond: molecule.isRingBond(i),\n            selected: false,\n        };\n        // Mapping of bonds to be fragmented, only if they are single bond not aromatic and cyclic the mapping occurs\n        if (bond.isAromatic ||\n            bond.type > 1 ||\n            bond.isRingBond ||\n            bond.order !== 1) {\n            continue;\n        }\n        else {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n        bonds.push(bond);\n    }\n    let brokenMolecule = {};\n    let fragmentMap = [];\n    let nbFragments = 0;\n    let results = [];\n    for (let bond of bonds) {\n        if (bond.selected) {\n            // if bond.selected is true (line 46) the molecule will be fragmented\n            brokenMolecule[bond.index] = molecule.getCompactCopy(); // get a copy of the molecule\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom2, '*');\n            brokenMolecule[bond.index].markBondForDeletion(bond.index); //mark bond to be deleted\n            // the function returns an array of map\n            brokenMolecule[bond.index].deleteMarkedAtomsAndBonds(); // delete marked bonds\n        }\n        nbFragments = brokenMolecule[bond.index].getFragmentNumbers(fragmentMap);\n        // only if there are 2 fragments code can continue\n        if (nbFragments === 2) {\n            for (let i = 0; i < nbFragments; i++) {\n                const result = {};\n                if (calculateHoseCodes) {\n                    result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, [\n                        bond.atom1,\n                        bond.atom2,\n                    ]);\n                }\n                result.atomMap = [];\n                // assign fragment id to index of for loop\n                let includeAtom = fragmentMap.map((id) => {\n                    return id === i;\n                });\n                let fragment = new Molecule(100, 100);\n                let atomMap = [];\n                brokenMolecule[bond.index].copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n                for (let j = 0; j < atomMap.length; j++) {\n                    if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                        result.atomMap.push(j);\n                        if (atoms[j].links.length > 0) {\n                            fragment.addBond(atomMap[j], fragment.addAtom(154));\n                        }\n                    }\n                }\n                fragment.removeAtomCustomLabels();\n                fragment.setFragment(false);\n                result.idCode = fragment.getIDCode();\n                result.parentIDCode = parentIDCode;\n                result.cleavedBonds = [\n                    {\n                        index: bond.index,\n                        order: bond.order,\n                        atom1: bond.atom1,\n                        atom2: bond.atom2,\n                    },\n                ];\n                result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n                result.fragmentType = 'acyclic';\n                results.push(result);\n            }\n        }\n    }\n    // sort result in order fragment 1-2; 3-4; ...\n    results = results.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicBonds.js.map","\"use strict\";\n/**\n * This function returns ringBond, and object that contains information about the bonds of each ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns Information of ring bonds for each ring in the molecule\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRingsInfo = getRingsInfo;\nfunction getRingsInfo(molecule) {\n    const ringSet = molecule.getRingSet();\n    let ringBonds = [];\n    // create a new array with the length of the number of bonds in the molecule and fills it with 0\n    let nbRingForBonds = new Array(molecule.getAllBonds()).fill(0);\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        for (let bond of ringSet.getRingBonds(i)) {\n            nbRingForBonds[bond]++;\n        }\n    }\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        ringBonds.push({\n            bonds: ringSet.getRingBonds(i).map((bondIndex) => ({\n                index: bondIndex,\n                ringIndex: i,\n                nbRings: nbRingForBonds[bondIndex], // in how many rings this bond is included\n                order: molecule.getBondOrder(bondIndex),\n                isAromatic: ringSet.isAromatic(i),\n                atom1: molecule.getBondAtom(0, bondIndex),\n                atom2: molecule.getBondAtom(1, bondIndex),\n            })),\n        });\n    }\n    return ringBonds;\n}\n//# sourceMappingURL=getRingsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentableRings = getFragmentableRings;\nconst getRingsInfo_js_1 = require(\"./getRingsInfo.js\");\n/**\n * This function returns an array of objects with all combination of 2 bonds who can be fragmented in the same ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns All combination of 2 bonds who can be fragmented in the same ring\n */\nfunction getFragmentableRings(molecule) {\n    let ringsInfo = (0, getRingsInfo_js_1.getRingsInfo)(molecule);\n    let fragmentableRingBonds = [];\n    for (let ring = 0; ring < ringsInfo.length; ring++) {\n        let bonds = ringsInfo[ring].bonds;\n        // we prevent to consecutive bonds to be cleaved\n        for (let first = 0; first < bonds.length; first++) {\n            let end = first === 0 ? bonds.length - 1 : bonds.length;\n            for (let second = first + 2; second < end; second++) {\n                if (bonds[first].order === 1 &&\n                    bonds[second].order === 1 &&\n                    !bonds[first].isAromatic &&\n                    !bonds[second].isAromatic &&\n                    bonds[first].nbRings < 2 &&\n                    bonds[second].nbRings < 2) {\n                    fragmentableRingBonds.push({ bonds: [bonds[first], bonds[second]] });\n                }\n            }\n        }\n    }\n    return fragmentableRingBonds;\n}\n//# sourceMappingURL=getFragmentableRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentRings = fragmentRings;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getFragmentableRings_js_1 = require(\"./utils/getFragmentableRings.js\");\n/**\n * The function performs the fragmentation of all single ring bonds not belonging to aromatic rings\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns  Array with results for the fragmentation of ring bonds\n */\nfunction fragmentRings(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    const fragmentableRingBonds = (0, getFragmentableRings_js_1.getFragmentableRings)(molecule);\n    let fragmentationResults = [];\n    for (let ringBonds of fragmentableRingBonds) {\n        const brokenMolecule = molecule.getCompactCopy();\n        let fragmentMap = [];\n        let atoms = [];\n        let rLinks = {};\n        for (let bond of ringBonds.bonds) {\n            brokenMolecule.markBondForDeletion(bond.index);\n            brokenMolecule.setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule.setAtomCustomLabel(bond.atom2, '*');\n            atoms.push(bond.atom1, bond.atom2);\n            rLinks[bond.atom1] = bond.atom2;\n            rLinks[bond.atom2] = bond.atom1;\n        }\n        brokenMolecule.deleteMarkedAtomsAndBonds();\n        const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n        for (let i = 0; i < nbFragments; i++) {\n            const result = {};\n            if (calculateHoseCodes) {\n                result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, atoms);\n            }\n            result.atomMap = [];\n            let includeAtom = fragmentMap.map((id) => {\n                return id === i;\n            });\n            let fragment = new Molecule(0, 0);\n            let atomMap = [];\n            brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n            // if includeAtom has more then 3 true all true should become false and all false should become true\n            for (let j = 0; j < atomMap.length; j++) {\n                if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                    result.atomMap.push(j);\n                    if (rLinks[j] !== undefined) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(154));\n                    }\n                }\n            }\n            fragment.removeAtomCustomLabels();\n            fragment.setFragment(false);\n            //      console.log(fragment.getIDCode(), getMF(fragment).mf);\n            result.idCode = fragment.getIDCode();\n            result.parentIDCode = parentIDCode;\n            result.cleavedBonds = ringBonds.bonds;\n            result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n            result.fragmentType = 'cyclic';\n            fragmentationResults.push(result);\n        }\n    }\n    fragmentationResults = fragmentationResults.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return fragmentationResults;\n}\n//# sourceMappingURL=fragmentRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragment = fragment;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst fragmentAcyclicBonds_js_1 = require(\"./fragmentAcyclicBonds.js\");\nconst fragmentRings_js_1 = require(\"./fragmentRings.js\");\n/**\n * This function fragment both acyclic and cyclic bonds of the molecule\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {boolean} [options.cyclic=true] - calculate cyclic fragmentation\n * @param {boolean} [options.acyclic=true] - calculate acyclic fragmentation\n * @param {boolean} [options.full=true] - calculate the molecular formula of the full molecule\n * @returns {object} In-Silico fragmentation results\n */\nfunction fragment(molecule, options = {}) {\n    const { cyclic = true, acyclic = true, full = true, calculateHoseCodes = false, } = options;\n    const parentIDCode = molecule.getIDCode();\n    let molecularIon = full\n        ? [\n            {\n                idCode: parentIDCode,\n                parentIDCode,\n                mfInfo: new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(molecule).mf).getInfo(),\n                fragmentType: 'molecule',\n            },\n        ]\n        : [];\n    let acyclicBonds = acyclic\n        ? (0, fragmentAcyclicBonds_js_1.fragmentAcyclicBonds)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let cyclicBonds = cyclic\n        ? (0, fragmentRings_js_1.fragmentRings)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let result = [...molecularIon, ...acyclicBonds, ...cyclicBonds];\n    return result.toSorted((a, b) => a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass);\n}\n//# sourceMappingURL=fragment.js.map","var ql=class{copyMolecule(Z){let vt=Z.getIDCodeAndCoordinates();navigator.clipboard.writeText(`${vt.idCode} ${vt.coordinates}`)}pasteMolecule(){return null}};var ZS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",ao=new Uint8Array(256);for(let w=0;w<ZS.length;w++)ao[ZS.charCodeAt(w)]=w;function WS(w){let Z=w.length*.75,vt=w.length,ot,kt=0,C1,jt,T1,u1;w.at(-1)===\"=\"&&(Z--,w.at(-2)===\"=\"&&Z--);let h1=new ArrayBuffer(Z),s1=new Uint8Array(h1);for(ot=0;ot<vt;ot+=4)C1=ao[w.charCodeAt(ot)],jt=ao[w.charCodeAt(ot+1)],T1=ao[w.charCodeAt(ot+2)],u1=ao[w.charCodeAt(ot+3)],s1[kt++]=C1<<2|jt>>4,s1[kt++]=(jt&15)<<4|T1>>2,s1[kt++]=(T1&3)<<6|u1&63;return h1}function zl(w){return w.toString(16).padStart(2,\"0\")}var R9=globalThis.devicePixelRatio||1;var $2=class{constructor(Z){this.ctx=Z,this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\",this.currentFontSize=12,this.currentFont=\"12px sans-serif\",this.ctx.font=this.currentFont,this.currentColor=\"#000000\",this.currentLineWidth=1,this.canvasCache=new Map}clearRect(Z,vt,ot,kt){this.ctx.clearRect(Z,vt,ot,kt)}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}getSelectionBackgroundRGB(){return 12310268}getLineWidth(){return this.currentLineWidth}setRGB(Z){let vt=Z>>>16&255,ot=Z>>>8&255,kt=Z>>>0&255;this.currentColor=`#${zl(vt)}${zl(ot)}${zl(kt)}`,this.ctx.fillStyle=this.currentColor,this.ctx.strokeStyle=this.currentColor}setFont(Z,vt,ot){this.currentFontSize=Z,this.currentFont=`${vt?\"bold\":\"\"} ${ot?\"italic\":\"\"} ${Z}px sans-serif`,this.ctx.font=this.currentFont}getFontSize(){return this.currentFontSize}getBounds(Z){let vt=this.ctx.measureText(Z);return{x:vt.actualBoundingBoxLeft,y:vt.actualBoundingBoxAscent,width:vt.actualBoundingBoxRight,height:vt.actualBoundingBoxAscent}}drawString(Z,vt,ot){this.ctx.fillText(ot,Z,vt)}drawCenteredString(Z,vt,ot){this.ctx.textAlign=\"center\",this.ctx.textBaseline=\"middle\",this.ctx.fillText(ot,Z,vt),this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\"}setLineWidth(Z){this.currentLineWidth=Z,this.ctx.lineWidth=Z}fillRectangle(Z,vt,ot,kt){this.ctx.fillRect(Z,vt,ot,kt)}fillCircle(Z,vt,ot){let kt=ot/2;this.ctx.beginPath(),this.ctx.arc(Z+kt,vt+kt,kt,0,2*Math.PI),this.ctx.fill()}drawLine(Z,vt,ot,kt){this.ctx.beginPath(),this.ctx.moveTo(Z,vt),this.ctx.lineTo(ot,kt),this.ctx.stroke()}drawPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let vt=1;vt<Z.getSize();vt++)this.ctx.lineTo(Z.getX(vt),Z.getY(vt));this.ctx.stroke()}drawRectangle(Z,vt,ot,kt){this.ctx.strokeRect(Z,vt,ot,kt)}fillPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let vt=1;vt<Z.getSize();vt++)this.ctx.lineTo(Z.getX(vt),Z.getY(vt));this.ctx.fill()}drawImage(Z,vt,ot,kt,C1,jt,T1,u1,h1){if(arguments.length!==9)throw new Error(`drawImage call with ${arguments.length} arguments unimplemented`);let s1=this.canvasCache.get(Z);if(!s1){s1=document.createElement(\"canvas\");let r0=Z.imageData;s1.width=r0.width,s1.height=r0.height;let K0=s1.getContext(\"2d\");K0.globalAlpha=0,K0.putImageData(r0,0,0),this.canvasCache.set(Z,s1)}this.ctx.drawImage(s1,vt,ot,kt,C1,jt,T1,u1,h1)}isDarkBackground(){return!1}};var Kl=class{constructor(Z,vt){this.canvasElement=Z,this.changeListener=vt,this.drawContext=new $2(this.canvasElement.getContext(\"2d\"))}getBackgroundRGB(){return 16777215}getCanvasWidth(){return this.canvasElement.width}getCanvasHeight(){return this.canvasElement.height}getDrawContext(){return this.drawContext}onChange(Z,vt){this.changeListener?.({what:Z,isUserEvent:vt})}getClipboardHandler(){return new ql}};var Z8t=`\n/* We can customize editor styles here. */\n`,Qw;function _S(){if(Qw)return Qw;let w=new CSSStyleSheet;return w.replaceSync(Z8t),Qw=w,w}function ow(w,Z,vt){let ot=-1;function kt(jt,T1,u1=0){T1.button>0||Z.fireMouseEvent(jt,T1.button+1,u1,Math.round(T1.offsetX*R9),Math.round(T1.offsetY*R9),T1.shiftKey,T1.ctrlKey,T1.altKey,T1.button===2)}w.addEventListener(\"pointerdown\",jt=>{ot===-1&&(ot=jt.pointerId,kt(vt.MOUSE_EVENT_PRESSED,jt))});function C1(jt){ot===jt.pointerId&&(ot=-1,kt(vt.MOUSE_EVENT_RELEASED,jt))}return document.addEventListener(\"pointerup\",C1),w.addEventListener(\"click\",jt=>{kt(vt.MOUSE_EVENT_CLICKED,jt,jt.detail)}),w.addEventListener(\"pointerenter\",jt=>{kt(vt.MOUSE_EVENT_ENTERED,jt)}),w.addEventListener(\"pointerleave\",jt=>{kt(vt.MOUSE_EVENT_EXITED,jt)}),w.addEventListener(\"pointermove\",jt=>{ot!==-1?ot===jt.pointerId&&kt(vt.MOUSE_EVENT_DRAGGED,jt):kt(vt.MOUSE_EVENT_MOVED,jt)}),()=>{document.removeEventListener(\"pointerup\",C1)}}function $S(w,Z,vt,ot,kt){let C1=typeof navigator<\"u\"&&navigator.platform===\"MacIntel\",jt=u1=>C1&&u1.metaKey||!C1&&u1.ctrlKey;function T1(u1,h1){let s1=W8t(h1,ot);s1!==null&&vt.fireKeyEvent(u1,s1,h1.altKey,h1.ctrlKey,h1.shiftKey,jt(h1))}Z.addEventListener(\"keydown\",u1=>{jt(u1)&&u1.key===\"c\"||jt(u1)&&u1.key===\"v\"||T1(ot.KEY_EVENT_PRESSED,u1)}),Z.addEventListener(\"keyup\",u1=>{T1(ot.KEY_EVENT_RELEASED,u1)}),w.addEventListener(\"paste\",u1=>{let h1=u1.clipboardData.getData(\"text\"),s1=kt.fromText(h1);s1&&s1.getAllAtoms()>0&&vt.addPastedOrDropped(s1)})}function W8t(w,Z){switch(w.key){case\"Control\":return Z.KEY_CTRL;case\"Alt\":return Z.KEY_ALT;case\"Shift\":return Z.KEY_SHIFT;case\"Delete\":case\"Backspace\":return Z.KEY_DELETE;case\"F1\":return Z.KEY_HELP;case\"Escape\":return Z.KEY_ESCAPE;case\"Enter\":return Z.KEY_ENTER;default:return w.key.length===1?w.key.codePointAt(0):null}}var Jl=class{constructor(Z){this.canvasElement=Z,this.drawContext=new $2(this.canvasElement.getContext(\"2d\"))}setDimensions(Z,vt){this.canvasElement.width=Z,this.canvasElement.style.width=`${Z/R9}px`,this.canvasElement.height=vt,this.canvasElement.style.height=`${vt/R9}px`}getDrawContext(){return this.drawContext}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}};var aS={\"chain.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB2UlEQVR4XmNgGJmAkYGJgQULZGXAhCygIGICQg4GdjTIARRDh5xAEQwNKYzXeK4xY1Oez3SNfz8TmoYUxq+6m9bfqLjDI4tmfhzLff9VR17FoWhwZXpkOm2v1C+79+cbD4gga8lneuhrfdv6/+ItSBpSGB+bTDos9IfzP9N/k3cX6+7wwByWz/TWR/E1w/+kO+8j4BpSGL9rz9wh+Efs14TF3heY/tu/vlF2hxtkSxzLY2/FVyz/om69jT0G8kM6QyNDM9MT41nbZX9y/J/ct1/4iU7aIYb/9q8uVx0UbmF64mV7i/1/0s0HSVM5dRgYrjB84/8U+bh80iH+34z/17Xc51ZhUGX8qpkK1GL6+krltyClVyz/c+69C57CwQsK1v+Sl9rdvgr8Z/7P9WvKxNs8fsD44ABqeWLkdYHhv9sL8e+s/xJuv4k4yajEAI6H/+6llxn+g6DUh75gSXhgugEdmXIUJB5150HSFA59oHKIBteGSyBhpv+q9wsVQaZDICdDKuNnneRjCY9exU3l5AUrh2gQelAQ/8Tgve2Tb25NjIgYBkmnMl5Sumi+hQmiGKqhgaGB57Pts4Bfek0sjkjmIxQhs8BpiZFBh0EPCLGlTnQxcGod8gAAp9es6fCW8G8AAAAASUVORK5CYII=)\",\"eraser.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAC1UlEQVR4XnWU309SYRjHn8OYTTM3zTmjC8NFFBR10dJu27wx11VX/QNdeGebTsvua93mRbUmLhURzYgKRZRJUJLibLPpRDCZC3/b1AMc4Tw97+EAR2e8FzD4fr7v53nPOQDCDkT/s2KAKiwROOXvFP8JLnDDGHhgArzgg28wCQGYgiDMw6E+1pY2rsECLEIIIrAC1O2CV/AWzPAOLGCFQbDDJ/hC+CQktU5bXWJoMGlaVv0iPAy/GeCmeBf0QB/YYECKO6kkzAl6Z/+t+BmsSJotgmmN4lFYZcA4tfdQez+1D8Fnio+S1oHe5TAcFuJHVBNit4nGLYrHGOCBbin+ntodMEzxKMkMWy8LpfgSEUN4niC7TTBtqzYYMCG3Z9xHadgD/bC1hi+U4uw1TkhFsqs3adpngJdGHSAZB8VHYAZ4vdt+RSjED3KcvYWYWMJuFY0E+MjdQe5MZgYE7YhFL8soCJzDU1iKwdcE+HOjBoG/NNJbq5DJI40EPNiIPCLgO/Wzk4lS3D2kPyaTQe5hETZsLDfxRRQLkLuLDjJd7u8wJs/mRs22J7CR4re3Qq3xIpENPUUHG+biuqX2UVsVX41epTp9ZjINm0ttqTIEZECQboK0ztd/Ya951t+nRi2GFYgksxluSlO7BMTYLVblMVcmOOTEZ9N+i4YvkREmAySz2JaNE4CqtM5jvrZHcbbE5lmLU8NrJTEmc3drsT1VlmmXdsCbgTdSu7wKUi2zPqsaq7GWZCjeJBZnwxlAN9dRyecBtsvzH/4+DV+MNdsLT4/GJSU0jHde3T2KtMxYnA8X5tvT5cp2eehDLnVxrPPoLgWpx4Hd+8Lp/Zx7boYoe/g40eDtViIF6Se+xPX8qPl96DqECImrRMOY2fg3e1atwd16UX1cR75wEXr4VmGdxL52atbpX2HnxfTenfiJcelKr9CjvQp/IMWJ57AO62ndOKk7890/iSWBU4XaZc0AAAAASUVORK5CYII=)\",\"fist.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAABj0lEQVR4Xu2S3yuDYRTHz7IZsfdCUrYLG4VCpJV6d0mS/A1zg79ArRArP4q5s4ulVousFCn/gX/g5WK7wkZMzIXMxjZ793XeMdn7vpM/wDn1PD1P53PO95znIfq3rwmYyU5tZPr7PJYoTjGaZ8xB1t+xZQqyP60iAEeWsThFGKpqbiE9CRECrnCHLnTAj17QbLV4E3mFXALbcOAGSXRiClnMgZLkZR/QYg0UEpDBDuxI4IHzT6OADdRiEK2gE12gBWmWE8Yj7weQIGOT650zaoiqAVtjDx2KeEWR8xZ4lUt+jEWkWJxJBYgkWa7NLy5WXWl5FilzhfoKwEAzzkwYI3DhTQUoVYpYR10FYCTPaDbJ2heQUwGfR0kFELmt6Utu9Jmz6dmFpmmR7v141w1XBiCBNFNacyKmCxT59kgHGBIQ4g7UkpRzESuwaCoQ+YZxqwGUGaUwrvvStqazLeRLj/bTZUTQB5rQfg1jjac9e8qAzFgZKbDMALpj1Kz3Z0WKjiGIfex++x6H98PgK4d/APiDpdwStyBoAAAAAElFTkSuQmCC)\",\"hand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB50lEQVR4Xq2TwUsUcRzF3yy52TboHiKVLBCElb1479g5kgKPCkKs4ME6eAiiP0GELileStew6NLJq5Sihw6BG2VlECymB2PVXd10Zl7vN+OuOjNLl35fZhiY+fzee9/vb4D/tAow9fafu90BsqrvnXzNBwSTTBAZ2I3BkSbeYBMzLHNRn9/nEFHCvYZAutDHDfb5wDvanOVnoozBhkBzIUeHOQEHfO8DW0QV0xjC3VjoUh2onAC/ZPAme4giemMQo+BKoaeusCmdSa41MmYL8HxLgUKe27q/UKLzSSxcwUOMwk7VgTKX6sBz7oeA61hJHSUP8ST1raZQA7Z8hb0QkO1WE+d5lZdlx+UbTsjSR95i0bc0E7GUzfIHdziouRqFPzwU5ii4IzOP+SFiqe3i8jyP1A1bgKPyVGa5/M2S7iaDdWZ8KUwNe1Uus923FHx8ujwZPA9YGO48+CK/Ywp4un8N8SIZgG78fCTvFV1n9w+ePe6GFMzMJ7u4zuOInQDYYaKcDB3Ba63FGQWPLk8mt2MAWKv96kk0sKM2TBFfkQ4fvkx6fyHSH9NalwO0PkXPaktirt8rhRpqelblbV6IASzkmivP9NrEdE9AM/FXbCPG4v+6p+3VcZ2ql5zTZSqv+XcQ6+gKgL8a/RiIJPdySgAAAABJRU5ErkJggg==)\",\"handPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACAUlEQVR4Xq2Tz0sUcRjGn1lytW2wPUQamSAIK3vp7kk6i1LgMUGIFTqUBw9BiPsPhNAlpUtuKhpdOnVUKqlDh6CNsh+CsJQdjC13ddOZeXq+M7uTzu7SpXmZLwvzfr7P8/5Y4D89eZh48s/bhoC04nMXH/EmwThjRAp2c/B6C7vZwhRLXFP6NY4RRVxpCiTzw/zCYR94RpsP+Z4oYbQp0JbP0GFGwB6f+8A2UcF9jOFyQ+hkCJSrwDcZ7GcfUcDFBohRcKXQFyp8lc4s3zYzZgvwfEuBwgK/65xXRccrsXAGE7gBOxECJb4IgQfcjQAX8DJxEN/HVOJTTaEGbPsKvyJAuldNXOZZnpIdl485I0tveIkF31KuzlI6zU3ucFRzNQq/uS/MUeGOzNzm6zpLHa3ryzxQN2wBjsIT4JE6f7Co09RgHRlfAnPjXoXr7PQtmdSsNqn2eDJ4HLAw3rX3QX4nVaC534sA0bYCvdi6Je9lveb+mkLw2+PPiIKZ+WwPN3ioj9MyczQMsMNYKR5ZwfOnCzkVTq7KTpYDgrKCp5XuyGw9AOvViHoSmPhryaS7nCM+IhldvlRy92nYmaBLQWtdXqX1rn5X22OLI16xihhjBjA9q3CQJxoAFjJt5Xv6bBLdKmgmvsIOYrLxv+5uZ+WOtmqJi3pNLGj+54gN9ATAH0reBFwT+FQbAAAAAElFTkSuQmCC)\",\"invisible.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACjUlEQVR4XnWTS09TURSF178wMUExvhIfiY+0Q6MThwwEHYk6MODAqHHgzD9gHDgWYhQBAUWMqY/SogSkCGJJNAiFUiyV2qqURkFa7cPvnJZiBXMH7Tl3rbXX2ntf5bWgyH+emPI8v8reAn8nj3r0Qr3qU78GNKghDWtEfk3ot2LKKq6AphTUjGYF26ObuqU7alabOvRQj/VEz6APKS23jvI/rY/6AD2ksCH0AG9Sq9r1QJ0W/hyREFbcOqQNcqiL/3FuIpozhJeot6J+H/VHegrci60lSA7t0VVtlRNqTvPAY4bQqxYL70LdxSsvd2l164B2qVHLVN4L0U2VhL4aQl9RveDdS9gl4IcBNWpRUShNUJxUT3OG0E/UTo4u4N0a1U9SHdRu3QOQIOw8N+0Yc/A2ZwgDeHfh3ZgZpbBH+zDTAPy7Jok6qU/K0Jht2k91CL5SVD9aHh1BvYHiCxYe1nV9w9h5bVcdk4DwGn3TmYg1Y9Rb8P2FQYVQbOM+qjPaDDwMguMw3j00Mst0narUDaUgBICPI5VgAhe5rUVguZBhhMaGOEzrrU6pQpfpdoqeB8k2hvoF7UB9mhxmsyD4WYIs0c/ifEKnoVxSEsptQke5rdQ5vGdRt4SYXTEf2lWq1l1s1GojlDiAgpmTLN4KHEKegw+NKvsco8oglApd0XtoOzEzhZmCuq2QJ7RRX3lqmO84xjaxGltUj/dVcJEwhuIqwVRptsZMZwL/wG2FPIHryijVVBnUNdJlS1ZKlmJEzkApr1JDj5KsyeJaQsR+fDlW8G/KCWyl1tgpziEIxczwVcnYcT6p5LpwO7gZ5jzH7mT0hmbW0+IO/UBixXX5L4RZlmpOn8u6vT7Y3P4BKLGmkBK1qvgAAAAASUVORK5CYII=)\",\"lasso.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADg0lEQVR4Xk2UXWxTZRjHn7XYfWhh4DKlIFLRdlucImbGr2gEwYwsAjGRXXihRlTOFrOoF0RcdWwhEVnQdgOmbgzoliEhAZJlvZwdMQg6No/U2IYOWVrK1q1d19q1Pef8fU7bsy3/nIvznv/ved/n47xEZKDivNpK8RoE6XC4J9gX7A/2hXukwxCwta1UcxhUu4PcLFHnqZnaf+/E0FhTqDpiiaqqjjSFhsbvnZja76kRdarLQRzbTSjAuozgczaHVoJYhShX1krlSmH2bSWaQz5nRsA6MJQDrHMtx0Y3y4QS7Eo0eTpG3K5rP7tdHSNNnl2JNQxtlo+NzrXAmgXEDcnWA/5ihbAtOeyKtKf3wmIvs6+2l8GS3hv51u3aliQUKwf8yVZxA2GNIvSIBCNaJmPt/jrR6KZfyL6omQdQF2tvmTTyPt2iIhDq/f1mth/1LtjCVTa9QAIN8dEl8tK8mgJBj6oF21GvEWb4+wlft08Sds+FHbPmDl2A/mOl2Ran7SQylkV0MIcdu+cI7J3utUb0aL2q1DZSlDiRvObpKdpCZymVf1dqW6/qYY1QsM8SXYULw3jcq8XLWlSghOrJpYUwXxpeDUuUZn6smNWheUx6l7uxGD8HrKXz9A2doQidJnnPoWt6VEQItm4/4aX0LSd2wLCEqMB6+otmqYt8K1LVd3+oTRA6/yXUTXe+mCHsjE048QbWw8R6EHoNAMlGbA+d/PSOAZXKZC9tKbr19m+DFZztc/E/B2/3jp//x5logyC/8oyBd9DBIjeODj4/X8hTcO4PZZ/a6RKpYfBKWb6CuTQ+i41elD5A5cLHga7jPjOvWDIDv6e/EE25WXo49N0mPmF21OR3wm/FTahMf3/dNtLoe4GPa1LeC9y4xGUxacNnvHnykfTG+IWxJzOlyhnPzHH7bUJRvgINiSuu+CE8i2Jw8NwORq/jidRDktMz4COU46twnVyEx+brwxfFQDc+weu4P0drQFHq/Z+uP73UZq7vh8FAV6oeL2OTZl4OFMCUaZw4NXDjyNTBWENylaLDwXFpH+5Tm5mku4sN1XZQFwrkR+OvyjvxpvT5kTuEHcmpDh5i/qIQ/1l5LQd4RifUOS1A1XTnRq76r5dhzRlTPBxx7vlSDstmiA0r8NGXUcLZm6jJARkGZvnJAtqtod4JmhJbT/9tiZ4bS9QsX83dGv8DIrFVpnd+f4UAAAAASUVORK5CYII=)\",\"lassoPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADiklEQVR4XlVUbWxTVRh+12K3oYWBy9SCSAHbbXGRaGb8SoygmJFFICayH/5AIyrdYhb1BxFXHWswQRa03WVM3RzYjaEhYcZl/Tk6QhB0bN62xjV0yNJStm7tutbetvfex3N7e3XmyUnuOXme9+O8zz1EZKDyIhwVeBE28VisLzIQGYwMxPrEY7Bhh6NCYxgUuou8DLwuUD936G736GRrtC5uSSioi7dGR6fuds8dCtTzOoXlIhbbSyjBhrwt6G6LrgExlKJKfkiskksLuzVoiwbdeRs2gIlUgXWp/eTEdomwGnvSrYGuca/n2g9eT9d4a2BPej0TbZdOTiy1w1oQ8JsyHYdD5TJhZ2bME+/M7YfFWelc56yEJbc//oXXszNDKJcPhzId/CbCetnWxxOMaJ9NdoYaeaOXLpHg8HOCw0lOWrgPjcnO9lkjy9PLyzZCU2jQzOgnpgV7rNaut5GNRsnPEXzcstICQY9awX5i2ggzQoOEzzpnCXuXYq5Fc5cuTH8z5IoCnkRVooM55tq7RGDc+X5rXI+Oq3JDCyVILhTj54bPEYbPKV+CoyAhuaHjqh7WOEUGLIm1uDCGbdOFeEoxK+Hjilvz8Ng6WBK08E31og5tk+IBNg3GFBw+zlfMoHwJjrMUpzMk7Tt6TY/qOMHeGyI8l7vpxi4YtOBq0xvJR4vUQ8FV2bo7XzekCdxfhMZ57tk8YXdyxo1XsBEmhvv93ZoAJBnxcvT0B7cNqJFn++mJspuv/zJSzcb2VOr3kVv9Uz/+6U47BI/vZ+FzlkEHi9QyMfL0cilzwfnf5IPKpFeLzSOXK4s3qDb8YXLiovg2aoT3wj2ngmZ2YskP/Zr7mDepXnow+uVWVmHBatIbsddSJtTkvrpuH28JPsPKNclvhm8Ms2sxaeYz+k8/nNucujD5WL5CPhtYOOW8RSgr3kBz+rIndRRPohwsuJrBOO16NPuA6A4MBQlV+DTWKJVhy3JT7CIf7sX7eAn3qmpNUJZ969vrj7PGNRjwTiTck23C89iqkVcKSmDKt8x8N3Tj+NyRZHNmrazDkSnxIO5RhpmhO/9G0jIoByXSI6kXpN14Vfzo+G3CrsxcFzOx4iJif1YRKwXMozNssZi189xmdutXfoJVJWaZOVJs5v/18H+/rcK7nyQI3/tRrwryTLDIVkGgvRrKm6AhvePMH5bE+cl0/cpT9dX4B08ibwJFFp9KAAAAAElFTkSuQmCC)\",\"pointingHand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADe0lEQVR4Xq2V+yvrYRzHnWwuaaUst9mY21iyHcVySghxJJLLDy7L2Y9S4geHThx+5ISc0vCDf0AS6fj1rPxkRJ2dJjvtjNolt1y+NMY+5/N5yonZbIunvm179nyf1/N+fy5PSMgLo6OjwxAWFgaxsbHQ2NhonJiYELy0Pqj/CgoKPqSmpjoGBgZgfHwciouLna2tre+D2uSlxXK5XJ2UlMTt7e2B2WyGjIwMiImJ+fhmADy9OjMzk7PZbHB0dAT4HXp6en6+GSA5OVktk8k4u90Ox8fHTEF3d/fvNwNIpVKm4AFACgYHB//Mzc0pUZ3o1SBPgEKhgKysLFd5ebkdlekTExMLUKUU56VVVVVhQQM9AdnZ2dDe3g5bW1tQU1MDKSkpNrTtr0qlsvT3939/NSA9PR2mp6fh7u4OhoaGWG2gXdDZ2Qnx8fFWBH3CR4P1IvMFe4feqoqKir7k5OQoSQEF2Wq1siwiwMzMDLjdbhgeHoa8vDw4OztjiiIiIqCyshLq6uoA39mRSCSKZ5DQ0FAxnuQXeutG+Yb8/Hwt1gIDHB4eMsDs7Czc399TsAFPCxzHwe7uLojFYlhdXQWDwQBKpZLDfdTeVMhra2vBaDRCV1cX2zAtLQ0IcHp6yuYWFxeZRfPz89DX18cAVIgYbNje3oaTkxPAJODwsN4BLS0tTPbGxgagTBCJRECFdnt7C+fn53B9fc0UXF1dweXlJbhcLnA4HAxmsVhYvVRUVHA8Hu85IDIyUl5SUgImk4mduKmp6T+ANiXvHz+Ag+ZJEYHpkxTgHt4VCIVCCTY009TUFNzc3MDk5CTlPRwcHLCN/A2CE6C0tNQ7IDw8nI8Z8LWhoeGWFGxubkJvby+THSyAz+d7jUEIpp46ISGB0+l0zHeKh9PpDAhACimd0QUuKirKO4BSC3uOTqPRwMXFBQvig/+BWER9C+8RLjo62jcAPayhvqPX6xmAgkf++hu0huKF2cdhivsGjIyMCAsLC81jY2PMHgIEMgiwvr4OcXFxHNaCbwDZ1NbW9q2srAz29/fZ6QOB0LrR0VHAdPd/ZwgEAhF6uaPVap/EwbMOHpTRPGUbKgfsBv5vPawJXn19/WfsR04qPMoozzg8hlEirK2tMUBzc3Pg93Zubq6uurqa9aCVlZUnz/LyMvu9tLQECwsLgPVD1f/Ds8n9AyubuM4FiwqZAAAAAElFTkSuQmCC)\",\"rect.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACc0lEQVR4Xo2UT0hUURTGf7uipMy8GbUwigx0WbiwpCgQKmgl1CYj3Plahtg/eguFUIoamNxUCEFCGlIgEhSORmQRNeVMSkhpWcSU1KSOQ9i8vvfmpiMZOB8Xzjv3fPPd8+dertPHQICX/OAVnTRTz1GOaNXL7pQvSdTG9KHwCVJMyzlMFw1UsJFC8lmtVSi7Qr4u7SUVk1KsmCkyZtJETchUmTKh3NSYk6ZBq0a276nSXtRMGc+kfMIkiRY3shQkWiZ9wjjxMN5SEAuPQ5qegBALe07a+eiMCj9lxZ0ZJ+N483A9oQf6qbWED6rITW4IcQGaGJuT/Y0f7rm1cJliS+jnLjNkAviEDXTwVbZ/2gwjobLESKgY6iiwhI5gyw/N/T2zKtljF0CN6p39SAZbCVyhTpwVLKOUM8wGmn4lEy35yGH+Jp1TKF9nrRp3mzbOMcp9m0MhtLPrvwRDr/6/mwda6cZ4ON24Hd5z1RISfGNIAdmDnWabtHtlzxLjtY1pgucM2o8rPOUhj+UZY0qDWGEJad5y0ca8mO90LLyKA+yjkirN6QWeaO0kwjvucZw8m0MwGinLzmelUi1nP3vYQrUCH3GNY5Qp+UpbpelcQjNnWcchVWRQhc2jiPWsYTl7aZRetvTBtP5VaJW7la0c5g4npFbCbk5xSzlNKPGRUKk6vYCwScIH2ax2lagH1VJ6wxdbNVUumKUFhGFNaMxiyEk4v3Jn1VmE4LluBK804W/5zdDA/+OxCtk58dzeNjcS7vYJ/v1bzGMJnm7rPDLmkzlvdph2E5/zRs13M2BS/p3OvhoLkVSBi7jE5zn/VPCy+K/GH86K+gV5WsL6AAAAAElFTkSuQmCC)\",\"rectPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACi0lEQVR4Xo2UT0hUQRzHP6c2KmrTnYoKjCAP+45FB0uKAqECT0FdMsKbr2OIUdE76EUpamHzUmoEGWmIgUnQn9UOWURp7ksJKSuLeCW1qesStq/fvB11lzr4vgzM/Ob3md+b3/xmuEYfA4Fe8ZMhOmmklmMclVYr/U6xpRg0Pn2I+yRpZsQ4Shd1lLGJCGHWSItIv0xsXTKXEp+0+AqZJqum1KCKqQpliXaqKnVK1Umrkr62VMjcoJpWvkprYAqvyUksRV7TlAYmcOP4S1EyPgEZegMgGfftjP3JHhf9kp5rz9pZ21+U44t6oZ9qA3yUjNygReSKoIEPC2H/oN19pxouUWKAfrqZJRtIAxvp4Jv09d9mGYtZ3lisBGooMkBHMKVd5QsRlSbfcxMl99tFUCX5zg1SwZSHI6qJ4q+wNHWGuSCmzqTXFEYMan7TeYlyBSi2ItymjXOMc9/sIQLt7C4AMiE36ka7K/HDlUXR1uh0qIcH9JCpd+OZ+u3wnisG8PjOCEOydr6S1hxJXhufBnjBsBlc5hkPeRS6bt2zbuUiWK1WJpThLReMz8vFk07GV3OQ/ZRTIXWqN11t7SLBO+5yglVmD0FppA0dZqWkcScH2MtmAVqsJ1zlOJZUbbnJ0kw+0MhZ1lEpGRnGCS2zVGgDa1nOPup5ahYNqnU+QrOYm9nGEe5wUqKVsofT3JRdTspZjMWictIFwBYJfIitcsClFHNYIr3hq7iapAW1VACMSoUmjUZsz/6dX6t2rvgKAN9xEvhRT0/oZaXg/7EYIFcnvvO4zUnEezSg79//LAbw5bYuKqs+q/Nqh2pX7oJ1UP1QAyqt73Tu1ShUShK8not8WbBPBy+LfjX+AjC0Avv8MQHTAAAAAElFTkSuQmCC)\",\"zoom.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACiUlEQVR4XpVTTUgUYRh+nJWCxUsNevBiYGm7UjAnFyoI9ORKSxt4a71Ei9I10EPg0VO7hOE1ikQSofXiYv6QRX9bkTAjbbM/B2mz8id3Z2f/ZvbtndR0NYn9XuYbPuZ55n3f730efMQCZjCLOX4/xyJe4BXe4C3e4QNi0JDCBu8JRPkURxIMm8BjjOMJJvEUU8jadUn36D79Zs5X8JhSyb6AX/iBzxxfLMIMwx/gIcYwXRMTNa86Mhrp23QXOwx3sW9zNKKOaF5NzAlrnCWBFXAx43jE8PeC0b4U9KstJmh/tJh+dSlotJeEDYZ/Bea5GAtudoZDkm5jcCP1poejd+XhaG+6kc82kvRwiDpLwha+A1RX8K4OaDfCU038UTQGk/GA2qO4lDbFpfbEA4NJ0QA1UThktOeFDBPOLd+/qF9PtOZBDi30LNU91FBfgz+rvmaoIdUVmnZo4CxLQU3cYsLJ7G1HebvqC7nIhHJ6G7y7mmsNKTQtGjbyq5p3Dnzv2au31i24QK35cEhpriQAzbUp92AS1GKqI7odL5F1jM9bzV7KzoyVLvfbDhKAoYZ4wGp/NFKU8Br6scS9VrM7Fw8a56/8A271ovb0pkF9m2UPy2AWGd/k4sYdpal/7+fH4cTxvaPsGo6C3EXysWYWQafIR2cqSnFyV237CM6ADOowyM8Si+xkkCsztB2RIYZCFT2QB1mYVdwSSSza/N85nD1qDl27cyA76EQ1k6bqtESiRagrXFsdyBxQq+ySnfIhtbJ6gHX2bBprQvmAHwKH/GDBmRCDyibP4Od/HLcNZ0KcCSnkmLQsKEd4mmvfgTMhybGCb0zI4RPb1bSbUtnDUvHz4yGJ7BUWx2+5Iu7Rc33AhQAAAABJRU5ErkJggg==)\"};var Uw=Object.create(null),tI=3/4,Yl=class{constructor(Z){this.HOTSPOT_32=Z.HOTSPOT_32,this.IMAGE_NAME_32=Z.IMAGE_NAME_32,this.cPointerCursor=Z.cPointerCursor,this.cTextCursor=Z.cTextCursor}getCursor(Z){if(Uw[Z])return Uw[Z];if(this.IMAGE_NAME_32[Z])return this.buildCursor(Z);switch(Z){case this.cPointerCursor:return\"default\";case this.cTextCursor:return\"text\";default:throw new Error(`Unknown cursor: ${Z}`)}}buildCursor(Z){let vt=this.IMAGE_NAME_32[Z],kt=`${aS[vt]} ${this.HOTSPOT_32[Z*2]*tI} ${this.HOTSPOT_32[Z*2+1]*tI}, default`;return Uw[Z]=kt,kt}};var Xl=class{constructor(Z,vt){this.title=Z,this.rootElement=vt,this.elements=[],this.dialogElement=null}setLayout(Z,vt){this.hLayout=eI(Z),this.vLayout=`${eI(vt)} auto`}add(Z,vt,ot,kt,C1){this.elements.push({component:Z,x:vt,y:ot,x2:kt,y2:C1})}createTextField(Z,vt){return new sw(Z,vt)}createLabel(Z){return new Lw(Z)}createComboBox(){return new yw}createCheckBox(Z){return new lw(Z)}setEventConsumer(Z){this.consumer=Z}showMessage(Z){window.alert(Z)}showDialog(Z){let vt=document.createElement(\"dialog\"),ot=this.rootElement.getBoundingClientRect();Object.assign(vt.style,{position:\"absolute\",marginBlock:0,left:`${ot.left}px`,right:`${document.body.parentElement.clientWidth-ot.right}px`,top:`${this.rootElement.offsetTop+30}px`}),this.dialogElement=vt,this.rootElement.getRootNode().append(vt);let kt=document.createElement(\"form\");kt.style.display=\"grid\",kt.style.gridTemplateColumns=this.hLayout,kt.style.gridTemplateRows=this.vLayout,kt.addEventListener(\"submit\",u1=>{u1.preventDefault(),this.consumer.fireOk(),Z()}),vt.append(kt);for(let{component:u1,x:h1,y:s1,x2:r0,y2:K0}of this.elements){let x0=document.createElement(\"div\");r0===void 0?(x0.style.gridColumn=`${h1+1} / ${h1+2}`,x0.style.gridRow=`${s1+1} / ${s1+2}`):(x0.style.gridColumn=`${h1+1} / ${r0+2}`,x0.style.gridRow=`${s1+1} / ${K0+2}`),x0.append(u1.getElement()),kt.append(x0)}let C1=document.createElement(\"div\");Object.assign(C1.style,{display:\"flex\",flexDirection:\"row-reverse\",gap:\"15px\",gridColumn:\"1 / -1\",gridRow:\"-1\"}),kt.append(C1);let jt=document.createElement(\"button\");jt.type=\"submit\",jt.textContent=\"OK\",C1.append(jt);let T1=document.createElement(\"button\");T1.type=\"button\",T1.textContent=\"Cancel\",T1.addEventListener(\"click\",()=>{this.consumer.fireCancel(),Z()}),C1.append(T1),vt.showModal(),vt.addEventListener(\"cancel\",()=>{this.consumer.fireCancel(),Z()})}disposeDialog(){this.dialogElement!==null&&(this.dialogElement.remove(),this.dialogElement=null)}},a2=class{setEventHandler(Z){this.eventHandler=Z}fireEvent(Z,vt){this.eventHandler(Z,vt)}},Lw=class extends a2{constructor(Z){super(),this.element=document.createElement(\"label\"),this.setText(Z)}setText(Z){this.element.textContent=Z}getElement(){return this.element}},sw=class extends a2{constructor(){super(),this.element=document.createElement(\"input\"),this.element.type=\"text\"}setText(Z){this.element.value=Z}getText(){return this.element.value}getElement(){return this.element}},yw=class extends a2{constructor(){super(),this.element=document.createElement(\"select\"),this.element.addEventListener(\"change\",()=>{this.fireEvent(2,this.element.selectedIndex)})}setEnabled(Z){this.element.disabled=!Z}addItem(Z){let vt=document.createElement(\"option\");vt.textContent=Z,this.element.append(vt)}getSelectedIndex(){return this.element.selectedIndex}setSelectedIndex(Z){this.element.selectedIndex=Z}setSelectedItem(Z){let vt=this.element.options;for(let ot=0;ot<vt.length;ot++)vt[ot].textContent===Z&&(this.element.selectedIndex=ot)}getSelectedItem(){return this.element.options[this.element.selectedIndex].textContent}removeAllItems(){this.element.innerHTML=\"\"}setEditable(){}getElement(){return this.element}},lw=class extends a2{constructor(Z){super();let vt=document.createElement(\"label\"),ot=document.createElement(\"input\");ot.type=\"checkbox\",ot.addEventListener(\"change\",()=>{this.fireEvent(3,ot.checked?1:0)}),vt.append(ot),vt.append(Z),this.element=vt,this.checkBox=ot}setEnabled(Z){this.checkBox.disabled=!Z}isSelected(){return this.checkBox.checked}setSelected(Z){this.checkBox.checked=Z}getElement(){return this.element}};function eI(w){return w.map(Z=>Z>0?`${Z}px`:\"auto\").join(\" \")}var tU=class{constructor(Z){this.imageData=Z,this.dataView=new DataView(Z.data.buffer)}getWidth(){return this.imageData.width}getHeight(){return this.imageData.height}getRGB(Z,vt){let ot=this.dataView.getInt32((vt*this.imageData.width+Z)*4,!1);return(ot&255)<<24|ot>>>8}setRGB(Z,vt,ot){let kt=ot>>>24&255,C1=ot<<8|kt;this.dataView.setInt32((vt*this.imageData.width+Z)*4,C1,!1)}toDataURL(){let Z=document.createElement(\"canvas\"),vt=Z.getContext(\"2d\");return Z.width=this.imageData.width,Z.height=this.imageData.height,vt.putImageData(this.imageData,0,0),Z.toDataURL(\"image/png\")}};var Zl=class{constructor(Z,vt,ot){this.canvasElement=Z,this.dialogRoot=vt,this.JavaEditorArea=ot}register(Z){this.javaUiHelper=Z,this.cursorManager=new Yl(this.JavaEditorArea,Z)}grabFocus(){this.canvasElement.focus({preventScroll:!0})}setCursor(Z){this.canvasElement.style.cursor=this.cursorManager.getCursor(Z)}showHelpDialog(){}createImage(Z,vt){let ot=new ImageData(Z,vt);return new tU(ot)}createImageFromBase64(Z,vt,ot){ot=ot.replaceAll(/%\\d+%/g,T1=>\"A\".repeat(Number(T1.slice(1,-1))));let kt=WS(ot),C1=new Uint8ClampedArray(kt),jt=new ImageData(C1,Z,vt);return new tU(jt)}createDialog(Z){return new Xl(Z,this.dialogRoot)}runLater(Z){typeof requestAnimationFrame==\"function\"?requestAnimationFrame(Z):typeof setImmediate==\"function\"?setImmediate(Z):setTimeout(Z,0)}};function AI(w,Z,vt,ot,kt,C1,jt,T1){let{readOnly:u1=!1,initialMode:h1=\"molecule\",initialFragment:s1=!1}=Z,r0=document.createElement(\"div\");r0.dataset.openchemlibCanvasEditor=\"true\",Object.assign(r0.style,{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"row\",alignItems:\"start\",backgroundColor:\"white\",touchAction:\"none\",userSelect:\"none\",webkitUserSelect:\"none\"});let K0=r0.attachShadow({mode:\"open\"});K0.adoptedStyleSheets=[_S()];let x0=null;u1||(x0=document.createElement(\"canvas\"),K0.append(x0));let qe=document.createElement(\"div\");Object.assign(qe.style,{width:\"100%\",height:\"100%\"}),K0.append(qe);let N0=document.createElement(\"canvas\");N0.tabIndex=0,Object.assign(N0.style,{outline:\"none\"}),qe.append(N0),w.append(r0);let S8=new C1(new Zl(N0,qe,ot)),JP=new ot(_8t(h1,ot),new Kl(N0,vt),S8);if(s1)if(h1===\"molecule\"){let we=new jt(0,0);we.setFragment(!0),JP.setMolecule(we)}else{let we=T1.create();we.setFragment(!0),JP.setReaction(we)}S8.setEditorArea(JP);let tu=u1?null:new kt(JP,new Jl(x0),S8);function eu(we){N0.style.width=`${we.width}px`,N0.width=Math.floor(we.width*R9),N0.style.height=`${we.height}px`,N0.height=Math.floor(we.height*R9),we.width>0&&we.height>0&&JP.repaint()}let eU=qe.getBoundingClientRect();eu(eU);let Au=new ResizeObserver(([we])=>{eu(we.contentRect)});Au.observe(qe);let nu=null,Pu=null,ru=null;u1||(nu=ow(N0,JP,ot),Pu=$S(qe,N0,JP,ot,jt),ru=ow(x0,tu,ot));function AU(){r0.remove(),Au.disconnect(),nu?.(),Pu?.(),ru?.()}return{editorArea:JP,toolbar:tu,uiHelper:S8,destroy:AU}}function _8t(w,Z){switch(w){case\"molecule\":return 0;case\"reaction\":return Z.MODE_REACTION|Z.MODE_MULTIPLE_FRAGMENTS;default:throw new Error(`Invalid initial mode: ${w}`)}}function nI(w,Z,vt,ot,kt){class C1{#t;#e;#P;#n;#f;#r;constructor(T1,u1={}){let{editorArea:h1,toolbar:s1,uiHelper:r0,destroy:K0}=AI(T1,u1,x0=>this.#i(x0),w,Z,vt,ot,kt);this.#t=h1,this.#e=s1,this.#P=r0,this.#n=null,this.#f={[w.EDITOR_EVENT_MOLECULE_CHANGED]:\"molecule\",[w.EDITOR_EVENT_SELECTION_CHANGED]:\"selection\",[w.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED]:\"highlight-atom\",[w.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED]:\"highlight-bond\"},this.#r=K0}getMode(){return this.#A(),this.#t.getMode()&w.MODE_REACTION!==0?\"reaction\":\"molecule\"}setMolecule(T1){this.#A(),this.#t.setMolecule(T1)}getMolecule(){return this.#A(),this.#t.getMolecule()}setReaction(T1){this.#A(),this.#t.setReaction(T1)}getReaction(){return this.#A(),this.#t.getReaction()}setOnChangeListener(T1){this.#A(),this.#n=T1}removeOnChangeListener(){this.#A(),this.#n=null}clearAll(){this.#A(),this.#t.clearAll()}destroy(){this.#A(),this.#r(),this.#t=null,this.#e=null,this.#P=null,this.#n=null,this.#r=null}get isDestroyed(){return!this.#t}moleculeChanged(){this.#A(),this.#t.moleculeChanged()}#A(){if(this.isDestroyed)throw new Error(\"CanvasEditor has been destroyed\")}#i(T1){if(!this.#n)return;let{what:u1,isUserEvent:h1}=T1;this.#n({type:this.#f[u1],isUserEvent:h1})}}return C1}function PI(w,Z,vt,ot){class kt extends HTMLElement{static MODE=Object.freeze(Object.create({MOLECULE:\"molecule\",REACTION:\"reaction\"}));static observedAttributes=Object.freeze([\"idcode\",\"fragment\",\"mode\",\"readonly\"]);#t={idcode:\"\",fragment:!1,mode:kt.MODE_MOLECULE,readonly:!1};get idcode(){return this.#t.idcode}set idcode(jt){this.#t.idcode=String(jt),this.setAttribute(\"idcode\",this.#t.idcode)}get fragment(){return this.#t.fragment}set fragment(jt){this.#t.fragment=!!jt,this.#t.fragment?this.setAttribute(\"fragment\",\"\"):this.removeAttribute(\"fragment\")}get mode(){return this.#t.mode}set mode(jt){this.#t.mode=String(jt),this.setAttribute(\"mode\",this.#t.mode)}get readonly(){return this.#t.readonly}set readonly(jt){this.#t.readonly=!!jt,this.#t.readonly?this.setAttribute(\"readonly\",\"\"):this.removeAttribute(\"readonly\")}setMolecule(jt){this.fragment=jt.isFragment(),this.idcode=`${jt.getIDCode()} ${jt.getIDCoordinates()}`,this.#e.setMolecule(jt)}getMolecule(){return this.#e.getMolecule()}setReaction(jt){this.fragment=jt.isFragment(),this.idcode=ot.encode(jt,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER})??\"\",this.#e.setReaction(jt)}getReaction(){return this.#e.getReaction()}clearAll(){this.#e.clearAll(),this.idcode=\"\"}moleculeChanged(){this.#e.moleculeChanged()}#e;#P(){this.#e||(this.#e=new w(this,{readOnly:this.readonly,initialMode:this.mode}),this.#e.setOnChangeListener(this.#o),requestIdleCallback(()=>this.#n()))}#n(){switch(this.mode){case kt.MODE.MOLECULE:return this.#r();case kt.MODE.REACTION:return this.#A();default:throw new Error(`Mode ${this.mode} is not supported`)}}#f(jt){let T1=jt.indexOf(\" \");if(T1===-1)return Z.fromIDCode(jt);let u1=jt.slice(0,T1),h1=jt.slice(T1+1);return Z.fromIDCode(u1,h1)}#r(){let jt=this.#f(this.idcode);jt.setFragment(this.fragment),this.#e.setMolecule(jt)}#A(){let jt=ot.decode(this.idcode,{ensureCoordinates:!0})??vt.create();jt.setFragment(this.fragment),this.#e.setReaction(jt)}#i=!1;#Q(jt){this.#i=!0;try{jt()}finally{this.#i=!1}}#o=jt=>{let T1=this.idcode,u1=this.fragment;this.#Q(()=>{if(jt.type===\"molecule\")switch(this.mode){case kt.MODE.MOLECULE:{let s1=this.getMolecule();this.idcode=`${s1.getIDCode()} ${s1.getIDCoordinates()}`,this.fragment=s1.isFragment();break}case kt.MODE.REACTION:{let s1=this.getReaction();this.idcode=ot.encode(s1,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER}),this.fragment=s1.isFragment();break}default:throw new Error(`Unsupported mode ${this.mode}`)}});let h1=new CustomEvent(\"change\",{detail:jt,bubbles:!0});if(this.dispatchEvent(h1),jt.mode===\"molecule\"){if(this.idcode!==T1){let s1=new CustomEvent(\"idcode-changed\",{detail:this.idcode,bubbles:!0});this.dispatchEvent(s1)}if(this.fragment!==u1){let s1=new CustomEvent(\"fragment-changed\",{detail:this.fragment,bubbles:!0});this.dispatchEvent(s1)}}};#D(){this.#e&&(this.#e.destroy(),this.#e=void 0)}#u(){this.#D(),this.#P()}connectedCallback(){this.#t={idcode:this.getAttribute(\"idcode\")||\"\",fragment:this.hasAttribute(\"fragment\"),mode:this.getAttribute(\"mode\")||kt.MODE.MOLECULE,readonly:this.hasAttribute(\"readonly\")},this.#P()}disconnectedCallback(){this.#D()}adoptedCallback(){this.connectedCallback()}attributeChangedCallback(jt,T1,u1){if(!this.#e||this.#i)return;(()=>{switch(jt){case\"idcode\":return this.#t.idcode=String(u1),()=>this.#n();case\"fragment\":return this.#t.fragment=u1!==null,()=>this.#n();case\"mode\":return this.#t.mode=String(u1),()=>this.#u();case\"readonly\":return this.#t.readonly=u1!==null,()=>this.#u();default:throw new Error(\"unsupported attribute change\")}})()()}}return kt}function hw(w){let{GenericEditorArea:Z,GenericEditorToolbar:vt,GenericUIHelper:ot,Molecule:kt,Reaction:C1,ReactionEncoder:jt}=w,T1=nI(Z,vt,ot,kt,C1);function u1(){let h1=customElements.get(\"openchemlib-editor\");if(h1)return h1;let s1=PI(T1,kt,C1,jt);customElements.define(\"openchemlib-editor\",s1);let r0=document.createElement(\"style\");return r0.id=\"openchemlib-editor-default-style\",r0.innerHTML=`\n    /* dynamicaly added from openchemlib registerCustomElement with low priority */\n    openchemlib-editor:defined {\n      display: block;\n      height: 400px;\n      width: 600px;\n    }\n    `,document.head.prepend(r0),s1}w.CanvasEditor=T1,w.registerCustomElement=u1,delete w.GenericEditorArea,delete w.GenericEditorToolbar,delete w.GenericUIHelper}function rI(w){w.prototype.changeCustomLabelPosition=function(vt){switch(vt){case\"superscript\":for(let ot=0;ot<this.getAllAtoms();ot++){let kt=this.getAtomCustomLabel(ot);kt&&!kt.startsWith(\"]\")&&this.setAtomCustomLabel(ot,`]${kt}`)}break;case\"normal\":for(let ot=0;ot<this.getAllAtoms();ot++){let kt=this.getAtomCustomLabel(ot);kt?.startsWith(\"]\")&&this.setAtomCustomLabel(ot,kt.slice(1))}break;case\"auto\":for(let ot=0;ot<this.getAllAtoms();ot++){let kt=this.getAtomCustomLabel(ot);kt&&(this.getAtomLabel(ot)===\"C\"?kt.startsWith(\"]\")&&this.setAtomCustomLabel(ot,kt.slice(1)):kt.startsWith(\"]\")||this.setAtomCustomLabel(ot,`]${kt}`))}break;case void 0:break;default:break}}}function iI(w){w.prototype.getNextCustomAtomLabel=function(vt){let ot=vt||\"1\",kt=new Set;for(let jt=0;jt<this.getAllAtoms();jt++){let T1=this.getAtomCustomLabel(jt);T1&&kt.add(T1)}let C1=0;for(;kt.has(ot)&&C1++<100;)ot=$8t(ot);return ot}}function $8t(w){let Z=w.match(/(\\d+)/);if(Z){let ot=Number.parseInt(Z[1],10);return w.replace(/(\\d+)/,(ot+1).toString())}let vt=w.match(/([a-yA-Y])([^a-zA-Z]*)$/);if(vt){let ot=vt[1],kt=String.fromCodePoint(ot.codePointAt(0)+1);return kt===\"Z\"||kt===\"z\"?\"1\":w.replace(/([a-yA-Y])([^a-zA-Z]*)$/,`${kt}$2`)}return\"1\"}function fI(w){let Z=w.fromMolfile;w.fromMolfile=function(ot,kt={}){let{customLabelPosition:C1}=kt,jt=Z.call(this,ot),T1=ot.includes(`\\r\n`)?`\\r\n`:`\n`,u1=ot.split(T1);if(u1.length<4||!u1[3].includes(\"V2000\"))return jt;let h1=u1.slice(4+jt.getAllAtoms()+jt.getAllBonds());for(let s1=0;s1<h1.length;s1++){let r0=h1[s1];if(r0.startsWith(\"A  \")){let K0=Number(r0.slice(3)),x0=h1[s1+1]?.trim();s1++,!Number.isNaN(K0)&&K0<=jt.getAllAtoms()&&x0&&!jt.getAtomCustomLabel(K0-1)&&jt.setAtomCustomLabel(K0-1,x0)}if(r0.startsWith(\"V  \")){let K0=r0.split(\" \").filter(Boolean);if(K0.length>=3){let x0=Number(K0[1]),qe=K0.slice(2).join(\" \");!Number.isNaN(x0)&&x0<=jt.getAllAtoms()&&!jt.getAtomCustomLabel(x0-1)&&jt.setAtomCustomLabel(x0-1,qe)}}if(r0.startsWith(\"M  ZZC\")){let K0=Number(r0.slice(7,10).trim()),x0=r0.slice(10).trim();K0&&x0&&jt.setAtomCustomLabel(K0-1,x0)}}return jt.changeCustomLabelPosition(C1),jt}}var a8t=[\"M  STY\",\"M  SLB\",\"M  SAL\",\"M  SDT\",\"M  SDD\",\"M  SED\"];function DI(w){let Z=w.prototype.toMolfile;w.prototype.toMolfile=function(ot={}){let kt=this.getCompactCopy(),{includeCustomAtomLabelsAsALines:C1=!1,includeCustomAtomLabelsAsVLines:jt=!1,customLabelPosition:T1,removeCustomAtomLabels:u1=!1}=ot;kt.changeCustomLabelPosition(T1);let h1=Z.call(kt);if(!C1&&!jt&&!u1)return h1;let s1=h1.includes(`\\r\n`)?`\\r\n`:`\n`,r0=h1.split(s1);if(u1&&(r0=r0.filter(qe=>!a8t.some(N0=>qe.startsWith(N0)))),r0.length<4||!r0[3].includes(\"V2000\"))return h1;let K0=[];for(let qe=0;qe<kt.getAllAtoms();qe++){let N0=kt.getAtomCustomLabel(qe);if(N0){let S8=String(qe+1).padStart(3,\" \");C1&&K0.push(`A  ${S8}`,N0),jt&&K0.push(`V  ${S8} ${N0}`)}}let x0=r0.findIndex(qe=>qe.startsWith(\"M  END\"));return x0===-1?h1:(r0.splice(x0,0,...K0),r0.join(s1))}}function QI(w){let Z=w.prototype.toRxn,vt=w.prototype.toRxnV3;w.prototype.toRxn=function(kt={}){return uI(this,Z,kt)},w.prototype.toRxnV3=function(kt={}){return uI(this,vt,kt)}}function uI(w,Z,vt){let{programName:ot=\"\",keepIdCode:kt=!1}=vt,C1=Z.call(w,ot);return kt?C1:C1.replace(/^OCL_RXN_V1.0:.*$/m,\"\")}function oI(w){let Z=w.prototype.toSVG;w.prototype.toSVG=function(ot,kt,C1,jt){if(typeof ot!=\"number\"||typeof kt!=\"number\")throw new Error(\"Molecule#toSVG requires width and height to be specified\");jt=jt||{};let T1=jt.factorTextSize||1,u1=jt.autoCrop===!0,h1=jt.autoCropMargin===void 0?5:jt.autoCropMargin,s1=Z.call(this,ot,kt,T1,u1,h1,C1,jt),r0=/svg id=\"(.*)\" xmlns/.exec(s1)[1];return s1=s1.replace(\"<style>\",`<style> #${r0} text {font-family: sans-serif;}`),s1=s1.replace(\"line {\",`#${r0} line {`),s1=s1.replace(\"polygon {\",`#${r0} polygon {`),jt.fontWeight&&(s1=s1.replaceAll(\"font-size=\",`font-weight=\"${jt.fontWeight}\" font-size=`)),jt.strokeWidth&&(s1=s1.replaceAll(/stroke-width=\"[^\"]+\"/g,`stroke-width=\"${jt.strokeWidth}\"`)),s1}}function UI(w){let{ConformerGenerator:Z,ForceFieldMMFF94:vt,Molecule:ot,Reaction:kt}=w;Z.prototype.molecules=function*(){let h1;for(;(h1=this.getNextConformerAsMolecule())!==null;)yield h1};let C1={maxIts:4e3,gradTol:1e-4,funcTol:1e-6},jt=vt.prototype._minimise;delete vt.prototype._minimise,vt.prototype.minimise=function(h1){return h1={...C1,...h1},jt.call(this,h1.maxIts,h1.gradTol,h1.funcTol)},rI(ot),iI(ot),fI(ot),DI(ot),QI(kt,ot),oI(ot);function T1(u1){if(!u1)return null;if(u1.includes(\"V2000\")||u1.includes(\"V3000\"))return ot.fromMolfile(u1);try{return ot.fromSmiles(u1)}catch{}try{return ot.fromIDCode(u1)}catch{}return null}ot.fromText=function(h1){let s1=T1(h1);return s1&&s1.getAllAtoms()>0?s1:null},ot.prototype.getOCL=function(){return w}}function rD(){}function trt(w){let Z=w.document,vt={},ot={userAgent:\"webkit\"},kt=rD;kt.__moduleStartupDone=rD;let C1=rD,jt,T1;function u1(){}function h1(){}function s1(){}function r0(){}function K0(){}function x0(){}function qe(){}function N0(){}function S8(){}function JP(){}function tu(){}function eu(){}function eU(){}function Au(){}function nu(){}function Pu(){}function ru(){}function AU(){}function we(){}function iD(){}function Tw(){}function Wl(){}function cw(){}function ww(){}function gw(){}function dw(){}function _l(){}function fD(){}function Bw(){}function Prt(t){}function DD(){}function v1(){}function sI(){}function vw(){}function Fw(){}function kw(){}function ki(){}function $l(){}function Q0(){}function mw(){}function bw(){}function nU(){}function jw(){}function Rw(){}function PU(){}function al(){}function pw(){}function Mw(){}function Cw(){}function Hw(){}function Vw(){}function Ew(){}function Sw(){}function Iw(){}function xw(){}function Nw(){}function Gw(){}function Ow(){}function qw(){}function zw(){}function Kw(){}function Jw(){}function Yw(){}function Xw(){}function Zw(){}function Ww(){}function yI(t,e){t.G=e}function lI(t,e){t.d=e}function hI(t,e){t.f=e}function TI(t,e){t.i=e}function cI(t,e){t.i=e}function th(t,e){t.J=e}function wI(t,e){t.U=e}function gI(t,e){t.T=e}function dI(t,e){t.P=e}function iu(t,e){t.Q=e}function BI(t,e){t.f=e}function vI(t,e){t.n=e}function _w(t,e){t.p=e}function FI(t,e){t.b=e}function kI(t,e){t.e=e}function mI(t,e){t.r=e}function bI(t){t.a=t.b}function $w(t){this.a=t}function rU(t){this.a=t}function p9(t){this.j=t}function WA(t){this.b=t}function aw(t){this.e=t}function t7(t){this.e=t}function e7(t){this.a=t}function A7(t){this.a=t}function n7(t){this.a=t}function P7(t){this.a=t}function r7(t){this.a=t}function i7(t){this.a=t}function f7(t){this.a=t}function D7(t){this.a=t}function u7(t){this.a=t}function fu(t){this.a=t}function iU(t){this.a=t}function uD(t){this.a=t}function Q7(t){this.b=t}function Du(){this.i=0}function o7(){this.i=1}function U7(){this.a=-1}function eh(){this.b=-1}function mi(t){this.a=t}function uu(t){this.a=t}function Ah(t){this.a=t}function nh(t){this.a=t}function Ph(t){this.a=t}function QD(t){this.a=t}function rh(t){this.d=t}function ih(t){this.a=t}function fh(t){this.a=t}function oD(t){this.a=t}function UD(t){this.a=t}function br(t){this.a=t}function jr(t){this.a=t}function Dh(t){this.b=t}function fU(t){this.b=t}function L7(t){this.a=t}function s7(t){this.c=t}function Zt(t){this.c=t}function y7(t){this.a=t}function uh(t){this.a=t}function l7(t){this.c=t}function h7(t){this.a=t}function T7(t){this.a=t}function c7(t){this.a=t}function w7(t){this.a=t}function g7(t){this.a=t}function d7(t){this.a=t}function jI(t,e){t.a=e}function RI(t,e){t.a=e}function pI(t,e){t.d=e}function MI(t,e){t.e=e}function DU(t,e){t.n=e}function CI(t,e){t.U&=~e}function B7(t,e){t.D[e]=-1}function HI(t,e){f2(e,t.a)}function VI(t,e){II(e,t.B)}function EI(t,e){xI(e,t.v)}function SI(t,e){Vx(e,t.f)}function II(t,e){fq(t.a,e)}function xI(t,e){Dq(t.a,e)}function NI(t,e){DQ(t.a,e)}function Qh(t,e){Ft(t.a,e)}function oh(t,e){Ft(t.a,e)}function YP(t,e){Ft(t.a,e)}function GI(t,e){Ft(t.S,e)}function uU(t,e){cA(t.d,e)}function n1(){bD(this)}function Qu(){hU(this)}function Jn(){i8(this)}function Uh(t){DZ(this,t)}function QU(){n1.call(this)}function v7(){n1.call(this)}function F7(){S9.call(this)}function OI(t){return MX(t)}function qI(t){return IX(t)}function zI(){return++hE}function ou(){this.c=new n1}function LD(){this.a=new n1}function k7(){this.a=new n1}function m7(){this.a=new MU}function b7(){k7.call(this)}function Lh(){k7.call(this)}function sh(){S9.call(this)}function Rr(){S9.call(this)}function bi(t,e){t.length=e}function KI(t,e){t.I[e]=512}function hP(t,e){t.v[e]|=o0}function yh(t,e){t.G[e]|=q0}function JI(t,e,A){t.k[e]=A}function YI(t,e){t.r=e,t.U=0}function XI(t,e){t.s=e,t.U=0}function QA(t,e){Ni(t.a,e)}function ZI(t,e){Ft(t.c,e)}function w0(){w0=v1,_u()}function lh(){S9.call(this)}function j7(){S9.call(this)}function mA(){S9.call(this)}function hh(){S9.call(this)}function R7(){S9.call(this)}function p7(){dQ.call(this,0)}function WI(t){t.a>0&&--t.a}function _I(t){return ir(t)}function $I(t){return t>>>0}function aI(){return pf(),F9}function M7(){this.b=new Vr}function C7(){this.a=new n1}function Th(){this.a=new gD}function tx(t){this.a=t,Li(t)}function sD(t){this.a=ZK(t)}function ji(){this.a=new Jn}function oU(){this.a=new gk}function ch(){this.a=new cP}function H7(){this.a=new cP}function V7(){fM(),this.b=Et}function Ri(t){zL(t),t.d=null}function ex(t){kS=t,No=!0}function Ax(t){An(),J1(),Bn=t}function M9(t){H1.call(this,t)}function E7(){sh.call(this)}function nx(t,e){QA(e,t.a.a)}function UU(t,e,A){t.k[e].a=A}function LU(t,e,A){t.k[e].b=A}function sU(t,e,A){t.k[e].c=A}function Px(t,e){return t.o[e]}function rx(t,e){return t.X[e]}function ix(t,e){return t.Y[e]}function yD(t,e){return t.e[e]}function Ct(t,e){return t.e[e]}function e0(t,e){return t.p[e]}function O(t,e){return t.k[e]}function R1(t,e){return t.t[e]}function S7(t,e){return t.K[e]}function ge(t,e){return t.B[e]}function h0(t,e){return t.C[e]}function X(t,e){return t.D[e]}function fe(t,e){return t.H[e]}function c1(t,e){return t.I[e]}function fx(t,e){return t.d[e]}function wh(t,e){return t.e[e]}function Dx(t,e){return t.f[e]}function pr(t,e){return t.a[e]}function Z0(t,e){return t.k[e]}function Uu(t,e){return t.a[e]}function Lu(t,e){return t.b[e]}function lD(t,e){return t.e[e]}function ux(t,e){return t.a[e]}function I7(t,e){return t.b[e]}function x7(t,e){return t.c[e]}function Qx(t,e,A){f8(t.a,A,e)}function ox(t){MK(t.a,t.c,t.b)}function N7(t){M9.call(this,t)}function G7(t){PX.call(this,t)}function O7(t){Htt.call(this,t)}function q7(t){_U.call(this,t)}function z7(t){_U.call(this,t)}function K7(t){_U.call(this,t)}function J7(t){_U.call(this,t)}function XP(t){M9.call(this,t)}function Y7(t){M9.call(this,t)}function X7(t){ts.call(this,t)}function pi(t){return y1(t),t}function hD(t){return y1(t),t}function Ux(t){return fP*t*t}function Lx(t,e){return t.db[e]}function sx(t){return si(t),t.B}function yx(t){return si(t),t.H}function lx(t){return ys(t,t.i)}function hx(t,e){return cJ(t,e)}function Tx(t,e){return PK(t,e)}function TD(t,e){t.U|=248&(8|e)}function Z7(t,e){t.g=new $i(e)}function Mi(t){t.b=null,t.c=0}function I8(t){M9.call(this,t)}function ZP(t){M9.call(this,t)}function yU(t){M9.call(this,t)}function W7(t){M9.call(this,t)}function cD(t){M9.call(this,t)}function cx(t){nG(t,t.length)}function wx(t){aN(t,t.length)}function gx(t){tG(t,t.length)}function dx(t){PG(t,t.length)}function gh(t){xu(t,t.length)}function lU(t){y1(t),this.a=t}function dh(t){new n1,this.a=t}function _7(t){return 4e3*t*t}function Bx(t){return 8e3*t*t}function WP(t){return!!t&&t.b}function $7(t){return t.b==t.c}function Bh(t,e){return t.a[e]}function d(t,e){return uv(t,e)}function a7(t){return zu(t,t.jb)}function v0(t,e){return t.v[e]&3}function mt(t,e){return t.K[e].a}function Rt(t,e){return t.K[e].b}function oA(t,e){return t.K[e].c}function ze(t,e){return t.G[e]&3}function Fn(t,e){return t.A[e]<0}function wD(t,e,A){HD(t.k[e],A)}function bA(t){qA.call(this,t,0)}function tg(t){dD.call(this,t,0)}function vh(t){XP.call(this,t)}function _A(){J1(),i3.call(this)}function eg(t){this.b=t,this.a=1}function hU(t){t.a=0,t.b=0,t.c=1}function vx(t,e){t.c=e,t.U&=-144}function Mr(t,e){return t.k[e].a}function Cr(t,e){return t.k[e].b}function Hr(t,e){return t.k[e].c}function Fx(t){return t.c||bQ(t)}function kx(t){return An(),ii(t)}function mx(t){return An(),Pi(t)}function Ag(t){tx.call(this,t.a)}function ng(t){XP.call(this,t)}function _P(t){ZP.call(this,t)}function gD(){uu.call(this,\"\")}function su(){uu.call(this,\"\")}function C0(){uu.call(this,\"\")}function Vr(){uu.call(this,\"\")}function Fh(t){sD.call(this,t)}function TU(t){fU.call(this,t)}function Pg(t){NU.call(this,t)}function rg(t){TU.call(this,t)}function ig(t){XB.call(this,t)}function kh(t){x8.call(this,t)}function mh(t){w7.call(this,t)}function fg(t){xr.call(this,t)}function Ci(){Oh.call(this,null)}function Dg(){Dg=v1,p1=new Td}function ug(){ug=v1,cc=new u1}function bh(){bh=v1,wc=new Bw}function Hi(){Hi=v1,cl=new Jn}function Er(){Er=v1,jo=!1}function yu(t){return qU(t),t.n}function lu(t,e){return hF(t,e)}function bx(t,e){uN(t.b,t.a,e)}function cU(t,e){return t<e?t:t-e}function Z1(t,e){return e*t.c+t.b}function W1(t,e){return e*t.c+t.a}function jh(t,e){return G(t.j,e)}function Qg(t,e){return G(t.k,e)}function Rh(t,e){return Lx(t.d,e)}function jx(t,e){return Px(t.d,e)}function H0(t,e){return zU(t.d,e)}function Rx(t,e){return G(t.a,e)}function ph(t,e){return G(t.f,e)}function C9(t,e){return G(t.g,e)}function jA(t,e){return t.v[e]&48}function hu(t,e){return t.B[e]==0}function px(t,e){return Qf(t.d,e)}function Tu(t){return tj(t,u6(t))}function og(t){return t.l|t.m<<22}function kn(t){return ut(t,7),t.q}function Mx(t,e){return t.a+=e,t}function Mh(t,e){return t.a+=e,t}function b0(t,e,A){t.t[e]=A,t.U=0}function g0(t,e,A){t.I[e]=A,t.U=0}function Ug(t,e){Ft(t.f,e),t.d=-1}function Lg(t,e){Ft(t.g,e),t.d=-1}function Cx(){Go!=0&&(Go=0),Oo=-1}function Ch(){Ch=v1,tS=(w5(),Eo)}function x8(t){this.a=(y1(t),t)}function wU(t){this.a=new Ji(t)}function sg(t){this.a=new O7(t.a)}function Sr(t){this.b=t,this.a=0}function yg(){this.a=0,this.b=0}function dD(t,e){this.k=t,this.j=e}function u(t,e){this.b=t,this.a=e}function UA(t,e){return t.a[e]&d1}function TP(t,e){return t.c[e]&d1}function cu(t,e){return t.I[e]&127}function wu(t,e){return t.v[e]&448}function Hx(t,e){return t.D[e]==-1}function Vi(t,e){return a0[t.D[e]]}function gU(t,e){Ktt.call(this,t,e)}function BD(t){nZ.call(this,t,t.o)}function dU(){sq.call(this,new we)}function vD(t,e){gu.call(this,t,e)}function lg(t,e){this.b=t,this.a=e}function $P(t,e){this.a=t,this.b=e}function gu(t,e){this.a=t,this.b=e}function hg(t,e){this.a=t,this.b=e}function ae(t,e){this.a=t,this.b=e}function Tg(t,e){this.a=t,this.b=e}function cg(t,e){this.a=t,this.b=e}function wg(t,e){this.a=t,this.b=e}function BU(t,e){this.b=t,this.a=e}function FD(t,e){this.b=t,this.a=e}function gg(t,e){this.a=t,this.b=e}function dg(t,e){this.a=t,this.b=e}function vU(t,e){this.k=e,this.j=t}function Hh(t,e){this.a=t,this.b=e}function Ei(t,e){gu.call(this,t,e)}function Bg(t,e,A){GA(t,A),MA(t,e)}function Vx(t,e){sz(t.a,t.b,t.c,e)}function Ex(t,e){cL(t.c,new P7(e))}function Sx(){throw At(new mA)}function Vh(){throw At(new mA)}function q1(){q1=v1,k9=new kw}function FU(){FU=v1,Vl=new bw}function vg(){Ll==null&&(Ll=[])}function Fg(t){ID.call(this,t,0)}function kg(){XB.call(this,null)}function cP(){Ji.call(this,null)}function un(t){this.b=t,this.a=-2}function Ix(t){throw new Error(t)}function aP(t){return t.a.c+t.c.c}function mg(t,e){return Ft(t.a,e)}function bg(t,e){return Qf(t.a,e)}function xx(t,e){return t.exec(e)}function K(t,e,A){return t.F[e][A]}function _(t,e,A){return t.j[e][A]}function Nt(t,e,A){return t.n[e][A]}function EA(t,e,A){return t.o[e][A]}function Nx(t,e){return t.I[e]==512}function Eh(t,e){return G(t.a,e).a}function jg(t,e){return G(t.a,e).b}function Rg(t){return CA(t,1,t.c)>0}function Gx(t){return Array.from(t)}function Ox(){return new P8(new U8)}function pg(){Ch(),No||ML(),new lp}function Mg(t){eM(),P1t.call(this,t)}function Cg(){xr.call(this,null)}function Ir(t,e){gu.call(this,t,e)}function Hg(t,e){this.a=t,this.b=e}function qx(t,e){fG(t),t.b.bd(e)}function I1(t,e){return z(t,e)>0}function Si(t,e){return z(t,e)<0}function du(t,e){return Kr(t.a,e)}function Bu(t,e){return $g(e,t.a)}function Sh(t,e){return $g(e,t.a)}function H9(t){return t.b=Cv(t.a)}function kU(t,e){return JU(t.a,e)}function Vg(t,e){return t.a.get(e)}function mU(t,e){zr(t,t.length,e)}function vu(t,e){gu.call(this,t,e)}function bU(t,e){gu.call(this,t,e)}function Eg(t,e){this.a=t,this.b=e}function wP(t,e){this.a=t,this.b=e}function Sg(t,e){this.a=t,this.c=e}function jU(t,e){this.c=t,this.d=e}function Ig(t,e){this.b=t,this.a=e}function xg(t,e){this.b=t,this.a=e}function Ng(t,e){this.b=t,this.a=e}function zx(t){return t.B?t.B.t:1}function Fu(t){return typeof t===m2}function Ii(t){return typeof t===s9}function N8(t){return typeof t===Mf}function z1(t){return t??null}function Ih(t,e){return t==e-1?0:t+1}function Kx(t,e){j6.call(this,t,0,e)}function Jx(t){w.clearTimeout(t)}function Gg(t){this.b=t,this.c=!1}function Og(){No||ML(),this.a=new nm}function tA(t,e,A,n){t.A[e]=n?-A:A}function de(t,e,A){t.K[e].a=A,t.U&=7}function Ve(t,e,A){t.K[e].b=A,t.U&=7}function Yn(t,e,A){t.K[e].c=A,t.U&=7}function n0(t,e){return z(t,e)==0}function ku(t,e){return z(t,e)>=0}function qg(t,e){return z(t,e)<=0}function gt(t,e){return z(t,e)!=0}function Yx(t,e){return An(),Ze(t,e)}function Xx(t,e){return An(),zA(t,e)}function zg(t,e){return z1(t)===z1(e)}function xh(t,e,A){return t.e[e][A]}function Nh(t,e,A){return t.f[e][A]}function xi(t,e){return(t.v[e]&4)!=0}function RU(t,e){return(t.G[e]&4)!=0}function Le(t,e){return t.j[e].length}function Gh(t,e){return t.e[e]-t.k[e]}function pU(t,e){return(t.v[e]&8)!=0}function Kg(t){return parseInt(t)||-1}function Zx(t,e,A){f8(t.f,A,e),t.d=-1}function Wx(t,e,A){f8(t.g,A,e),t.d=-1}function Ni(t,e){return t.a+=\"\"+e,t}function Jg(t,e){return t.a+=\"\"+e,t}function q(t,e){return t.a+=\"\"+e,t}function xr(t){this.f=t,this.g=!0}function Oh(t){this.d=new n1,this.c=t}function Yg(){this.c=new cP,this.b=0}function MU(){pf(),this.g=new Gr,DJ()}function CU(){CU=v1,Ac=zA(\"X\",32)}function Xg(){Xg=v1,Zf=(q1(),nn)}function Zg(){Zg=v1,R8=(q1(),nn)}function mu(t){g6(),YB.call(this,t,0)}function Wg(){w7.call(this,\"UTF-8\")}function qh(t){U8.call(this),this.e=t}function Nr(t){return t.b<t.d.size()}function t8(t){return t?t.jd():null}function _g(t){return G0(t.l,t.m,t.h)}function G8(t){return dP(t,t.r,t.s,Bn)}function _x(t,e,A){return t6(t.a,e,A)}function bu(t,e){return(t.G[e]&48)>>4}function LA(t,e){return(t.G[e]&64)!=0}function $x(t,e){return t.k[e]-JL(t,e)}function $g(t,e){return t.toFixed(e)}function ag(t,e){return e==0?t.i:t.j}function L0(t){return typeof t===s9}function ax(t,e){return V0(t.a[e][3])}function tN(t,e){return V0(t.a[e][2])}function td(t,e){return V0(t.a[e][2])}function ed(t,e){return V0(t.a[e][1])}function kD(t,e){uG(t.a,t.a.length,e)}function ju(t,e){ai(t,0,t.length,e)}function e8(t,e,A){Ft(t.a,new ae(e,A))}function HU(t,e,A,n){t.a=e,t.b=A,t.c=n}function Ad(t,e,A,n){t.e=e,t.c=A,t.d=n}function mD(t,e,A,n){t.F[e][A]=n,t.U=0}function nd(t,e){this.b=iP(e),this.a=t}function Pd(t,e){this.b=iP(e),this.a=t}function rd(t,e){return t.a+=Fe(e),t}function id(t){Ce(),Qz.call(this,t)}function fd(){vu.call(this,\"Head\",1)}function Dd(){vu.call(this,\"Tail\",3)}function ud(t){Yq.call(this,t,UO())}function zh(t){Kx.call(this,t,new Vr)}function Qd(t){oW.call(this,t,new Vr)}function bD(t){t.a=c(qn,A0,1,0,5,1)}function od(t){ai(t,0,t.length,null)}function Kh(t){ut(t,31),t.d&&xY(t.d)}function VU(t){return t!=null?fr(t):0}function eN(t){return t.e==null?\"\":t.e}function gP(t,e){return(t.G[e]&768)>>8}function Jh(t,e){return(t.G[e]&g8)!=0}function Ru(t,e){return(t.H[e]&d8)!=0}function Ud(t,e){return(t.v[e]&o0)!=0}function V9(t,e){return(t.G[e]&o0)!=0}function Yh(t,e){return(t.G[e]&q0)!=0}function W0(t,e){return(t.v[e]&q0)!=0}function E9(t,e){return(t.v[e]&oo)!=0}function O8(t,e){return(t.v[e]&wn)!=0}function Gi(t,e){return(t.v[e]&gn)!=0}function AN(t,e){return(t.v[e]&S0)!=0}function nN(t,e){return(t.v[e]&je)!=0}function f0(t,e){return(t.a[e]&o0)!=0}function Ee(t,e){return(t.c[e]&o0)!=0}function q8(t,e){return(t.c[e]&q0)!=0}function PN(t,e){return(t.a[e]&q0)!=0}function Xh(t,e){return(t.a[e]&v8)!=0}function i0(t,e){return(t.v[e]&512)!=0}function A8(t,e){return(t.G[e]&128)!=0}function Zh(t,e){return t<e?-1:t>e?1:0}function Wh(t,e,A){return{x:t,y:e,z:A}}function G0(t,e,A){return{l:t,m:e,h:A}}function Qn(t,e){return dP(t,t.r,t.s,e)}function SA(t,e){J1(),DF.call(this,t,e)}function sA(t){An(),UL.call(this,0,0,t)}function Ld(){RL.call(this,\"#\",\"\",\"\")}function sd(){vu.call(this,\"Range\",2)}function rN(t,e,A){return LN(t.a,e,A)}function iN(t,e){return new xg(t.a,e)}function Yt(t,e){return t!=null&&vJ(t,e)}function EU(t,e){gL(t,e),t.d&&(e.U=0)}function fN(t,e){t.I[e]=512,Rf(t),t.U=0}function DN(t,e){e.Nb(t.c),Zq(e,t.a,t.b)}function _h(t,e){wv(e,t.c),GL(e,t.a,t.b)}function uN(t,e,A){jI(t,rN(e,t.a,A))}function QN(t,e,A,n){t.a.rd(A,e.od(n))}function SU(t,e,A){return t.j=e,k6(t,A)}function Ft(t,e){return t.a.push(e),!0}function De(t,e){return(t.v[e]&b1)>>18}function $h(t,e){return(t.H[e]&7680)>>9}function ah(t,e){return G(t.k,e).length}function z8(t){return PP(t,0,t.length)}function At(t){return t.backingJsObject}function mn(t,e){return e<t.g&&f0(t.q,e)}function oN(t,e){return e<t.g&&Xh(t.q,e)}function eA(t,e){return e<t.i&&Ee(t.q,e)}function UN(t,e){return V0(t.b[e-1][2])}function yd(t,e,A){return V0(t.a[e][A])}function t3(t,e,A){return e.od(t.od(A))}function LN(t,e,A){return t.a.rd(e,A),e}function sN(t,e,A){t.a=e^1502,t.b=A^ol}function ld(t,e,A){t.i[0].a=e,t.i[0].b=A}function yN(t,e){t.q=n5(new fv(t.o,e),t)}function e3(t){t.g=c(uS,c0,116,0,0,1)}function pu(t){Ke.call(this,t.a,t.b,t.c)}function hd(t){this.c=t,this.b=t.length}function IU(){this.a=0,this.b=0,this.c=0}function Td(){this.a=0,this.b=0,this.c=0}function S9(){e3(this),a3(this),this.kc()}function lN(){return An(),J1(),J1(),Bn}function hN(t,e){return{type:e,value:t}}function TN(t){return e1(s9,typeof t)}function cN(t){return e1(Mf,typeof t)}function jD(t){return t.$H||(t.$H=++hE)}function A3(t){return t.p==null?t.o.Q:t.p}function Mu(t){return Dg(),Ftt(t,t.length)}function wN(t){return t.l+t.m*oP+t.h*UP}function gN(t){return t>=56320&&t<=57343}function xU(t){this.d=c(XA,re,6,t,14,1)}function cd(t,e){this.a=new qA(t.a,r$(e))}function wd(t,e,A){this.a=new ep(t.a,e.a)}function gd(t){No||ML(),this.a=new ud(t)}function dd(){Ci.call(this),this.b=new n1}function NU(t){fU.call(this,t),this.a=t}function bn(t){uu.call(this,(y1(t),t))}function K8(t){this.a=t,Dh.call(this,t)}function Bd(){this.a=c(qn,A0,1,8,5,1)}function vd(){this.a=c(F,m,6,0,15,1)}function Fd(){this.b=new eh,this.a=this.b}function GU(t){t.e=Ge,t.a=null,t.d=null}function n3(t,e){return jL(t.a,e)!=null}function Oi(t,e){return Be(t.a,A3(e.c))}function Cu(t,e,A){return en(t,e,A,t.D[e])}function OU(t,e){return(t.v[e]&49152)>>14}function dN(t,e){return{molecule:t,map:e}}function I9(t,e){return e<0?null:G(t.d,e)}function BN(t,e,A){return pY(Jp(t.a,e,A))}function RD(t,e,A){t.v[e]&=-449,t.v[e]|=A}function n8(t,e,A,n){t.a+=e,t.b+=A,t.c+=n}function se(t,e){t.d[t.c]=at(t.d[t.c],e)}function vN(t,e){We(t.a,A3(e.c),new Rd)}function pD(t,e,A){return $F(t,e,e,A),t}function FN(t,e,A,n,P){yb(e,A,t.i[n][P])}function kd(t,e,A){t.Q=-6,t.F=e,t.D=A,Tj(t)}function md(t,e){t.s=w.Math.min(e,t.t)}function qU(t){t.n==null&&gZ(t)}function kN(t){if(!t)throw At(new lh)}function bd(t){if(!t)throw At(new lh)}function x9(t){if(!t)throw At(new j7)}function MD(t){if(!t)throw At(new R7)}function jd(t){if(!t)throw At(new hh)}function Hu(t){Mk.call(this,t),this.e=NaN}function P3(t,e){this.c=1,this.a=t,this.b=e}function Xn(t,e){this.a=0,this.b=t,this.c=e}function Rd(){this.b=new C0,this.c=new n1}function pd(){this.e=new Jn,this.c=5e5}function Md(t){this.a=c(Pt,it,6,t,16,1)}function mN(t){return t<0?t+36:t>=36?t-36:t}function zU(t,e){return t.g==null?-1:t.g[e]}function Cd(t,e){return t.j==null?-1:t.j[e]}function Hd(t,e){return t&&e&&t instanceof e}function bN(t,e){return lu(new Array(e),t)}function dP(t,e,A,n){return LR(t,e,A,n,t.K)}function jN(t,e,A,n,P){return qZ(t,e,A,n,P)}function Vd(t,e){return VO(t,e,t.a.length-1)}function CD(t,e){return S5(t,e,e.r,e.s,!0)}function qi(t,e){return t.j[e].length-t.e[e]}function Ed(t){return t.c==1&&t.a==0&&t.b==0}function AA(t,e){t.a=e,t.c=0,t.b=63,wx(t.d)}function RN(t,e){t.backingJsObject=e,Wb(t,e)}function r3(t,e){Hi(),$B(cl,t)||qD(cl,t,e)}function pN(t,e){K1(t),gR(t,WQ(e,!0,null))}function HD(t,e){return HU(t,e.a,e.b,e.c),t}function Sd(t,e){var A;return A=t.d,t.d=e,A}function MN(t,e){return Er(),t==e?0:t?1:-1}function CN(t,e,A,n){return An(),pA(t,e,A,n)}function HN(t,e,A){return t.apply(e,A);var n}function Id(t,e){return y1(e),new wP(t,e)}function xd(t,e){return y1(e),new wP(t,e)}function VN(t){return Ot(j0(t,32))^Ot(t)}function on(t){return z8(F2(t,0,t.length))}function Nd(t){return t.d.length-t.c.length}function e1(t,e){return y1(t),z1(t)===z1(e)}function EN(t,e,A){t.ub(e-t.V/2,A-t.V/2,t.V)}function Gd(t,e,A){t.G[e]&=-49,t.G[e]|=A<<4}function Vu(t,e,A){this.b=t,this.c=e,this.a=A}function Ke(t,e,A){this.a=t,this.b=e,this.c=A}function Od(t){this.a=new w.Map,this.b=t}function qd(t){this.a=new w.Map,this.b=t}function zd(t,e){this.a=new uF(new Sr(t),e)}function Gr(){this.c=8,this.O=new wU(new fD)}function i3(){J1(),this.N=this.O=256,oR(this)}function f3(t,e,A){this.c=t,this.a=e,this.b=A}function D3(t,e,A){this.c=t,this.a=e,this.b=A}function BP(t,e,A){this.a=t,this.b=e,this.c=A}function Kd(t,e,A){this.a=t,this.b=e,this.c=A}function Jd(t,e,A){this.a=t,this.c=e,this.b=A}function Yd(t,e,A){this.a=t,this.c=e,this.b=A}function x1(t,e,A){vU.call(this,e,t),this.a=A}function KU(t,e,A){vU.call(this,e,t),this.a=A}function Xd(t){BD.call(this,t),HT(this,t)}function J8(t){oz.call(this,t,(iT(),Hc))}function Zd(){An(),UL.call(this,32,32,null)}function Wd(t){var e;e=aY(t),this.a=new G7(e)}function N9(t){var e=t.Kc();e.disposeDialog()}function JU(t,e){var A;return A=e,!!e9(t,A)}function YU(t,e){return mk(e,KO(t,E3(e)))}function SN(t,e,A){return t.indexOf(p0(e),A)}function M1(t,e){return w.Math.abs(t.A[e])}function IA(t,e){return t.w==null?null:t.w[e]}function u3(t,e){return t.u==null?null:t.u[e]}function _d(t,e){return t.e[e]-t.k[e]+xt(t,e)}function $d(t,e){return t.e[e]-P0(t,e)+xt(t,e)}function G9(t,e){return((t.v[e]&b8)>>>27)-1}function ye(t,e){return gt(V(t.C[e],Pe),0)}function IN(t,e){Yi(t.e,e)&&TL(t.d,e)}function XU(t,e){Gu(e,t.R),Yu(e,t.v),rB(e,t.w)}function xN(t,e){t.B=!1,cL(t.v,new Tg(t,e))}function NN(t,e){t.v=!1,cL(t.s,new cg(t,e))}function GN(t,e){t.f=!1,cL(t.c,new wg(t,e))}function ON(t){t.b=!1,h1t(t.a,new fu(pB(t)))}function VD(t){this.c=t,this.O=new wU(new fD)}function ad(t,e,A){this.a=t,this.b=e,this.c=A}function tB(t,e,A){this.d=t,this.b=A,this.a=e}function zi(t,e){this.a=t>e?t:e,this.b=t>e?e:t}function ZU(t,e){return t.a*=e,t.b*=e,t.c*=e,t}function qN(t,e){return t.d==null&&sj(t,e),t.d}function Q3(t,e){t.u=new C0,t.t=6,t.v=0,t.r=e}function O9(t,e,A){t.B[e]=A,t.U&=t.D[e]==1?0:7}function eB(t,e,A){t.v[e]&=-49153,t.v[e]|=A<<14}function Je(t,e,A){t.v[e]&=-49,t.v[e]|=A,t.U&=7}function o3(t,e,A){F5(A,0,t,e,A.length,!1)}function zN(t,e,A,n,P){R6(t,e,A,0,A.length,n,P)}function KN(t,e,A){return Ae(t,e)||Ae(t,A)?16:1}function V0(t){return Ii(t)?(y1(t),t):t.Zc()}function JN(t){return t.g.a.length+t.f.a.length}function AB(t){N3(t.a),fF(t.c,t.b),t.b=null}function nB(t){this.a=t.a,this.b=t.b,this.c=t.c}function Ki(t){var e=t.Gc();return e.getText()}function WU(t){var e=t.Mc();return e.getWidth()}function ED(t,e){var A=t.Kc();A.showMessage(e)}function YN(){var t;return t=YL(null),t.f=2,t}function XN(t){return Er(),e1(m2,typeof t)}function ZN(t){return An(),new sA(mv(new Du,t))}function Zn(t){return Vn(cG(L0(t)?Se(t):t))}function PB(t,e){return Dk(e,t.c)||Dk(e,t.a)}function WN(t,e){return e==1?t.a+t.f++:t.i+t.g++}function rB(t,e){e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function G(t,e){return ee(e,t.a.length),t.a[e]}function U3(t){var e;return e=t.slice(),hF(e,t)}function M(t){var e;return e=YL(t),MF(t,e),e}function iB(t){Hi(),y6.call(this,t,Jy,new Jn)}function fB(t,e){if(t!=e)throw At(new hh)}function SD(t,e){if(!t)throw At(new ZP(e))}function ID(t,e){this.e=e,CT(this,(y1(t),t))}function L3(t){this.f=t,this.e=2,this.a=Hs(t)}function DB(t,e){this.a=t,this.c=e,this.b=!0}function uB(t,e){e?this.a=e:this.a=new qh(t)}function Wn(t,e,A){A?t.v[e]|=q0:t.v[e]&=Ry}function q9(t,e){return t.I[e]==257||t.I[e]==129}function Or(t,e){return t.q&&e<t.g?UA(t.q,e):0}function z9(t,e){return t.q&&e<t.i?TP(t.q,e):0}function QB(t){return(!$4&&($4=new rM),$4).b[t]}function _U(t){this.b=t,this.a=new n1,kO(this,t)}function _N(t){return!Tc&&(Tc=new MU),ks(Tc,t)}function nA(t,e){var A=t.Lc();return A.setRGB(e)}function $U(t){var e=t.Mc();return e.getHeight()}function oB(t){var e=t.Dc();return e.grabFocus()}function Be(t,e){var A;return A=e,t8(e9(t,A))}function $N(t,e){var A;for(A=0;A<e;A++)aD(t,A)}function aN(t,e){var A;for(A=0;A<e;++A)t[A]=0}function tG(t,e){var A;for(A=0;A<e;++A)t[A]=2}function ve(t,e){t.L!=e&&(t.L=e,e||pj(t),t.U=0)}function UB(t,e){this.c=t,this.a=e,this.b=!1}function P8(t){t?this.a=t:this.a=new qh(null)}function Eu(t){return t.p==null&&(t.p=N_(t)),t.p}function eG(t){return t.d==null&&sj(t,10240),t.d}function AG(t){return aP(new QD(t.e).a)<t.c}function Su(t,e){return y1(t),t+(\"\"+(y1(e),e))}function LB(t,e,A,n){return(n[t]&n[e]&~n[A])!=0}function j1(t,e,A,n,P,r){return Ub(t,e,A,n,P,0,r)}function aU(t,e){var A=t.Gc();return A.setText(e)}function Y8(t,e){var A=t.Gc();return A.setText(e)}function Gt(t,e){var A=t.Gc();return A.addItem(e)}function $A(t){var e=t.Gc();return e.isSelected()}function tL(t,e,A,n){var P=t.Mc();P.setRGB(e,A,n)}function nG(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function PG(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function s3(t){var e;for(e=0;e<t.r;e++)t.v[e]&=Ry}function vP(t,e,A){A?t.v[e]|=512:t.v[e]&=-513}function rG(t,e,A){Ex(new Ev(t._,e),new Jd(t,e,A))}function iG(t,e){!t.b&&(t.b=new Ci),tr(t.b,U1(e))}function fG(t){t.b||(t.b=t.a.Tb(),t.a.size())}function _n(t){return Ii(t)?Bt((y1(t),t)):t.$c()}function y3(t){return Array.isArray(t)&&t.yd===DD}function qr(t){return t.length==0?0:L1(t,f1,Et)}function DG(){return B(d(bE,1),m,6,15,[0,1,2])}function sB(){sB=v1,vc=c(x8t,_e,141,128,0,1)}function yB(){yB=v1,Fc=c(N8t,_e,142,256,0,1)}function lB(){lB=v1,kc=c(G8t,_e,143,256,0,1)}function hB(){JF(),$D.call(this,4,(Qr(),Hl))}function FP(t,e,A){HQ(),xL.call(this,t,e,A,255)}function uG(t,e,A){Vk(0,e,t.length),ai(t,0,e,A)}function zr(t,e,A){var n;for(n=0;n<e;++n)t[n]=A}function TB(t){var e;return e=t.a[0],t.e>0?e:-e|0}function K9(t){var e;return e=YL(t),e.k=t,e.f=1,e}function QG(t,e){return!t&&(t=[]),t[t.length]=e,t}function cB(t){return t.N==null&&(si(t),VW(t)),t.N}function Ot(t){return L0(t)?t|0:og(t)}function r8(t,e){return t.a.get(e)!==void 0}function wB(t,e){return BA(0,t,0,e.a.length,!0,e)}function gB(t,e,A,n){return BA(1,e,0,A,n,new rU(t))}function eL(t,e){return t==null?e:e==null?t:t+\",\"+e}function l3(t){return!Array.isArray(t)&&t.yd===DD}function h3(t){aR(),this.a=\"Helvetica\",this.b=t}function H1(t){e3(this),this.f=t,a3(this),this.kc()}function T3(t){this.b=-1,this.a=c(F,m,6,t,15,1)}function xD(t){t.a||(t.a=!0,BL(t.e,new D7(t)))}function P1(t){t.b||(t.b=!0,BL(t.f,new f7(t)))}function oG(t,e,A){A?t.G[e]|=g8:t.G[e]&=-32769}function UG(t,e,A){A?t.G[e]|=o0:t.G[e]&=-65537}function LG(t){var e;for(e=0;e<t.r;e++)t.v[e]&=-513}function dB(t){var e;for(e=0;e<t.r;e++)t.v[e]&=-449}function BB(t,e){var A=t.Dc();return A.setCursor(e)}function Fe(t){return L0(t)?\"\"+t:Jj(t)}function Wt(t,e){return Vn(Cb(L0(t)?Se(t):t,e))}function O0(t,e){return Vn(R5(L0(t)?Se(t):t,e))}function j0(t,e){return Vn(sX(L0(t)?Se(t):t,e))}function vB(t,e,A){return t.c?rr(e.b,A.b):Yk(e,A)}function sG(t,e,A){return A<0?-1:t.lastIndexOf(e,A)}function yG(t,e){return G0(t.l&e.l,t.m&e.m,t.h&e.h)}function lG(t,e){return G0(t.l|e.l,t.m|e.m,t.h|e.h)}function hG(t,e){return G0(t.l^e.l,t.m^e.m,t.h^e.h)}function X8(t,e){return t.a+=e.a,t.b+=e.b,t.c+=e.c,t}function FB(t,e){return t.a-=e.a,t.b-=e.b,t.c-=e.c,t}function i8(t){t.a=new Od(t),t.c=new qd(t),++t.b}function c3(t,e){if(t==null)throw At(new Y7(e))}function Iu(t,e){if(t<0||t>=e)throw At(new E7)}function kB(t,e){this.k=t,this.c=0,this.g=e,Vs(this)}function w3(t){this.c=0,this.d=0,this.b=t,this.a=0}function le(t,e,A){Ce(),this.e=t,this.d=e,this.a=A}function mB(t,e){w6(),xe.call(this,t),I$(this,e)}function Ji(t){this.b=null,this.a=(FU(),t||Vl)}function bB(t,e,A){xr.call(this,e),r1t(this,t,e,A)}function TG(t,e,A,n,P){for(;e<A;)n[P++]=Xi(t,e++)}function Kr(t,e){return N8(e)?$B(t,e):!!YU(t.a,e)}function cG(t){return G0(~t.l&z0,~t.m&z0,~t.h&Pn)}function Z8(t,e){return e<t.i&&(q8(t.q,e)||t.I[e]==8)}function jB(t,e,A){return l8(t,e,e.F[0][A],e.F[1][A])}function wG(t,e,A){t.v[e]&=-67108865,A&&(t.v[e]|=wn)}function RB(t,e,A){var n=t.Mc();return n.getRGB(e,A)}function kP(t,e){var A=t.Gc();return A.setEnabled(e)}function yA(t,e){var A=t.Gc();return A.setSelected(e)}function gG(t,e){var A=t.Lc();return A.drawPolygon(e)}function AL(t,e){var A=t.Lc();return A.fillPolygon(e)}function pB(t){var e=t.Bc();return e.getDrawContext()}function MB(t){var e=t.Cc();return e.getDrawContext()}function ND(t){var e=t.Bc();return e.getCanvasWidth()}function dG(t){var e;return e=y2(LP,t),e?KR(e):null}function BG(t){var e;return e=y2(LP,t),e?Ep(e):null}function vG(t){var e;return e=y2(LP,t),e?yp(e):null}function xA(t,e){var A;return A=Jr(t.a,e,t),A==null}function Yi(t,e){return We(t.a,e,(Er(),jo))==null}function FG(t,e){return z(t,e)<0?-1:z(t,e)>0?1:0}function mP(t){return t.e==0?t:new le(-t.e,t.d,t.a)}function g3(t,e){return t.f[e]&&(t.o[e]==1||t.o[e]==2)}function GD(t,e){return zt(e,t.length+1),t.substr(e)}function f8(t,e,A){Ju(e,t.a.length),t.a.splice(e,0,A)}function jn(t,e){for(y1(e);t.cd();)bx(e,t.dd())}function J9(t,e){q(t.c,\"  \"),q(t.c,e),q(t.c,nn)}function d3(t,e){qL.call(this,t,!0,e),this.a=!0}function CB(t){var e;e=eZ(t),this.a=e,this.b=new VD(e)}function Y9(t){var e=t.Bc();return e.getCanvasHeight()}function kG(t,e,A){var n=t.Bc();return n.onChange(e,A)}function HB(t,e){var A=t.Dc();return A.createDialog(e)}function nL(t,e){var A=t.Lc();return A.setLineWidth(e)}function mG(t,e){var A;A=e+1,A>t.length&&(t.length=A)}function xu(t,e){var A;for(A=0;A<e;++A)t[A]=!1}function VB(t){var e;for(e=0;e<t.s;e++)t.G[e]&=-98305}function W8(t){var e;for(e=0;t>0;)t>>=1,++e;return e}function EB(t,e){return t.a+=String.fromCharCode(e),t}function Ye(t,e){return t.a+=String.fromCharCode(e),t}function y1(t){if(t==null)throw At(new Rr);return t}function $n(t){var e;return e=new SA(t.r,t.s),Uf(t,e),e}function bG(t,e){var A;for(A=0;A<e.r;A++)HI(t,e.K[A])}function _8(t,e){return new Ke(t.a-e.a,t.b-e.b,t.c-e.c)}function SB(t,e){return new BP(e.a-t.a,e.b-t.b,e.c-t.c)}function PL(t,e){return t.k[e]==2&&t.p[e]==2&&t.D[e]<=7}function rL(t,e,A){A?t.v[e]|=oo:t.v[e]&=py,t.U&=7}function B3(t,e,A){t.I[e]=A==1?1:A==2?2:A==3?4:16,t.U=0}function jG(t,e,A,n,P,r){t.F=e,t.B=A,t.D=n,t.C=P,t.A=r}function RG(t,e,A,n){return{x:t,y:e,width:A,height:n}}function pG(t){w.setTimeout(function(){throw t},0)}function IB(t,e){return t.c==null?null:t.c[e]}function iL(t,e,A){var n=t.Kc();return n.setLayout(e,A)}function v3(t){var e=t.Lc();return e.getBackgroundRGB()}function xB(t){var e=t.Lc();return e.getForegroundRGB()}function F0(t){var e=t.Gc();return e.getSelectedIndex()}function MG(t){var e;return e=t-10,(e<0?48+t:97+e)&d1}function CG(t,e){var A;return A=cp(t),A?us(A,e):null}function Xi(t,e){return zt(e,t.length),t.charCodeAt(e)}function HG(t,e){t.c=e,t.e*w.Math.pow(10,-t.b/1.36)}function NB(t){K1(t),t.eb=w.Math.max(t.eb,3),P1(t.k)}function F3(t,e){return new Ou(t.d,t.a,t.b,t.c.nd(e))}function D8(t,e){return N8(e)?Ku(t,e):t8(YU(t.a,e))}function GB(t,e,A){this.i=t,this.d=e,this.f=wZ(A,t,e)}function Zi(t,e,A,n){this.b=t,this.a=e,this.c=A,this.d=n}function It(t,e,A,n){this.c=t,this.b=e,this.d=A,this.a=n}function lA(t,e,A,n){this.c=t,this.d=e,this.b=A,this.a=n}function OB(t,e,A,n){vU.call(this,t,n),this.b=e,this.a=A}function k3(t,e){this.a=I4,this.d=t,this.b=e,this.c=-1}function fL(t){this.d=t,this.a=this.d.b,this.b=this.d.c}function qB(){ou.call(this),this.b=new n1,this.a=new n1}function zB(t,e,A){Jq.call(this,t,e,e.F[0][A],e.F[1][A])}function DL(t,e,A){t.d=6,t.e=A,t.c=e,t.f=(e[t.e]&63)<<11}function VG(t,e,A,n){for(var P=0;P<=n;P++)t[P]=e[A+P]}function Jr(t,e,A){return N8(e)?qD(t,e,A):zb(t.a,e,A)}function m3(t,e){return z1(t)===z1(e)||t!=null&&SP(t,e)}function $8(t,e){return z1(t)===z1(e)||t!=null&&SP(t,e)}function uL(t,e,A){return J0(t,e,A,Ae(t,e)||Ae(t,A)?16:1)}function Nu(t,e,A,n){return A<n?t.a[e][n][A]:t.a[e][A][n]}function EG(t){return String.fromCharCode.apply(null,t)}function an(t){return/\\d/.test(String.fromCharCode(t))}function QL(t){if(t==null)throw At(new Rr);return t}function KB(t,e){return t.c!=e.c?t.c>e.c?1:-1:0}function SG(t){return t.a==t.b?-1:t.c[t.a++]}function IG(t,e){var A=t.Gc();return A.setSelectedItem(e)}function oL(t,e,A,n){var P=t.Lc();return P.setFont(e,A,n)}function xG(t,e){var A;return A=jX(t,e),A?us(A,e):null}function b3(t,e){var A;return A=t.D[e],A==7||A==15||A==33}function NG(t,e){var A;return A=BY(t.a,e),t.a=ux(t.a,A),A}function j3(t,e){var A;return A=En(t,e),A+en(t,e,A,t.D[e])}function GG(t,e){var A;for(A=0;A<e.r;A++)HD(t.k[A],e.K[A])}function OG(t,e){t.H=e,t.eb=w.Math.max(t.eb,1),P1(t.k)}function Gu(t,e){e.c*=t.c,e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function JB(t,e,A){e<A?t.u[A][e]=!0:t.u[e][A]=!0}function UL(t,e,A){An(),A?this.a=A:this.a=new SA(t,e)}function Ou(t,e,A,n){this.d=t,this.a=e,this.b=A,this.c=n}function YB(t,e){this.v=new iD,this.L=t,this.G=e,this.xb()}function XB(t){this.b=new pL(11),this.a=(FU(),t||Vl)}function a8(t){this.e=t,(t&1)==0&&!Vo&&!Vo&&(Vo=new ub)}function ZB(t){var e;this.a=t,e=this.Dc(),e.register(this)}function qG(t){var e;for(e=0;e<t.R.g;e++)wG(t.R,e,t.M[e])}function zG(t){var e;for(e=Np(t);e;)lT(t,e,yo),e=Np(t)}function KG(t){var e;for(e=UF(t);e;)lT(t,e,nC),e=UF(t)}function $t(t,e){var A=t.Gc();return A.setSelectedIndex(e)}function WB(t,e,A){var n=t.Cc();return n.setDimensions(e,A)}function JG(t,e){return t.b!=e.b?t.b<e.b?-1:1:0}function OD(t,e,A){var n;return n=new Q7(HB(t,e)),iJ(n,A),n}function Yr(t,e){var A;return A=YL(t),MF(t,A),A.f=e?8:0,A}function _B(t,e){var A;return A=yu(t.wd),e==null?A:A+\": \"+e}function hA(t,e,A){return Mt(e,A,t.length),t.substr(e,A-e)}function $B(t,e){return e==null?!!YU(t.a,null):r8(t.c,e)}function aB(t,e){return new Ou(e.d,new Eg(e,t),e.b,e.c)}function Rn(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][2]}function NA(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][5]}function X9(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][4]}function u8(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][3]}function YG(t,e){return W9(t,e.c,e.d)&&W9(t,e.c+e.b,e.d+e.a)}function XG(t){return String.fromCodePoint(t).trim()===\"\"}function tv(t){return/[A-Z]/i.test(String.fromCharCode(t))}function ev(t){return/[A-Z]/i.test(String.fromCharCode(t))}function ZG(t){return _3(t.ad().Vb(),uq(new jw,new Rw))}function WG(t){return t>=5&&t<=9||t>=15&&t<=17||t==35||t==53}function Av(t){t.a.a=t.c,t.c.b=t.a,t.a.b=t.c.a=null,t.b=0}function qu(t){var e;e=t.a,t.a=t.b,t.b=e,e=t.c,t.c=t.d,t.d=e}function R3(){R3=v1,nS=(F6(),af),eS=xE,AS=NE,PS=GE}function _G(t,e){var A;for(A=0;A<e;++A)t[A]=new uh(t[A])}function p3(t,e,A){nB.call(this,SB(new I3(t,e),new I3(t,A)))}function k0(t,e,A){nB.call(this,SB(new Wi(t,e),new Wi(t,A)))}function $G(t,e){return a9(t.toLowerCase(),e.toLowerCase())}function aG(t,e){return D8(t.a,e)!=null?D8(t.a,e):(P9(),Y2)}function M3(t,e){return((t.H[e]&7680)>>9)+((t.H[e]&jy)>>13)}function LL(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][6]>0}function nv(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][8]>0}function sL(t,e){return t.a[BA(0,e,0,t.a.length,!0,t)][5].a}function tO(t,e){return q9(t.V,e)&&(Is(t,e)!=-1||ns(t,e)!=-1)}function Bt(t){return Math.max(Math.min(t,Et),-2147483648)|0}function pn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)}function eO(t){return t==2||t==10||t==18||t==36||t==54||t==86}function Q8(t,e,A,n){t.G[e]&=-131080,t.G[e]|=A,n&&(t.G[e]|=4)}function AO(t,e,A,n){var P;for(P=0;P<t.r;P++)n8(t.K[P],e,A,n)}function yL(t,e,A,n){var P=t.Lc();return P.fillCircle(e,A,n)}function C3(t,e,A,n){var P=t.Lc();return P.drawString(e,A,n)}function H3(t,e,A){var n=t.Dc();return n.showHelpDialog(e,A)}function Pv(t,e,A,n){var P;return P=tn(t,e,A),P!=-1&&RT(t,P,n)}function te(t,e,A,n){var P;return P=i9(t,6),HU(t.K[P],e,A,n),P}function V3(t,e){var A,n;return A=e,n=new PU,sp(t,A,n),n.d}function E3(t){var e;return t==null?0:(e=fr(t),e|0)}function nO(t){if(t.Yc())return null;var e=t.k;return bo[e]}function rv(t,e){return Yt(e,86)?ib(t.a,e):!1}function zu(t,e){return t.s==null&&(si(t),htt(t,e,t.R.K)),t.s}function Ku(t,e){return e==null?t8(YU(t.a,null)):Vg(t.c,e)}function iv(t,e){return e===t?\"(this Map)\":e==null?y9:P2(e)}function bP(t,e){return(t.v[t.F[0][e]]&t.v[t.F[1][e]]&512)!=0}function lL(t,e){var A;A=t.b,t.b=e.b,e.b=A,A=t.d,t.d=e.d,e.d=A}function fv(t,e){Ms(),this.b=t,ut(this.b,63),this.d=e,SR(this)}function Wi(t,e){this.a=t[3*e],this.b=t[3*e+1],this.c=t[3*e+2]}function Dv(t,e,A){No||ML(),s_(e),this.a=new y6(t.a,e,new Jn)}function Z9(t,e,A,n,P){var r=t.Lc();return r.drawLine(e,A,n,P)}function uv(t,e){var A=t.a=t.a||[];return A[e]||(A[e]=t.Tc(e))}function PO(t){var e;return e=xx(t.b,t.a),e?new g7(e):null}function rO(t,e){return ok(t,e)?(EF(t),!0):!1}function Ju(t,e){if(t<0||t>e)throw At(new XP(V6+t+E6+e))}function iO(t,e){t.b.a.length!=0&&q(t.b,\"<NL>\"),q(t.b,e)}function fO(t,e,A){t.b=null,t.a=e,A==null?t.c=ks(t,e):t.c=A}function DO(t,e,A){t.e=null,t.d=e,A==null?t.f=ks(t,e):t.f=A}function Qv(t,e,A){this.k=t,this.c=2,this.g=A,this.j=e,Vs(this)}function uO(t,e,A,n,P){var r=t.Lc();return r.clearRect(e,A,n,P)}function qD(t,e,A){return e==null?zb(t.a,null,A):ak(t.c,e,A)}function QO(t){var e;return z8(F2(t,0,(e=t.length,_u(),e)))}function oO(t,e){return o8(e),pP(t,c(E,I,6,e,15,1),0,e)}function zD(t,e){return o8(e),pP(t,c(Ut,Tt,6,e,15,1),0,e)}function Mn(t,e){return o8(e),pP(t,c(F,m,6,e,15,1),0,e)}function hL(t,e){return o8(e),pP(t,c(Kt,t1,6,e,15,1),0,e)}function UO(){return Xo||(!Xo&&(Xo=new pd),Xo)}function LO(t){try{return new RegExp(t)}catch{return null}}function sO(t){throw new Error(\"missing static resource: \"+t)}function yO(t){return t.r?\"Unresolved SMARTS features:\"+t.r:\"\"}function lO(t){return/[A-Z\\d]/i.test(String.fromCharCode(t))}function S3(t){if(t<0)throw At(new XP(\"bitIndex < 0: \"+t))}function ee(t,e){if(t<0||t>=e)throw At(new XP(V6+t+E6+e))}function zt(t,e){if(t<0||t>=e)throw At(new vh(V6+t+E6+e))}function I3(t,e){this.a=t.K[e].a,this.b=t.K[e].b,this.c=t.K[e].c}function ov(t){Ms(),this.b=t,ut(this.b,63),this.d=Fb(t),SR(this)}function Uv(){this.a=am(\"/resources/forcefield/mmff94/def.csv\")}function Lv(){this.a=am(\"/resources/forcefield/mmff94/atom.csv\")}function sv(){this.a=iP(\"/resources/forcefield/mmff94/bndk.csv\")}function yv(){this.a=iP(\"/resources/forcefield/mmff94/dfsb.csv\")}function KD(t){var e=t.Lc();return e.getSelectionBackgroundRGB()}function jP(t){return Ce(),z(t,0)>=0?be(t):mP(be(E0(t)))}function hO(){return hQ(),B(d(El,1),_e,96,0,[FS,Yo,Vc])}function lv(t,e){le.call(this,1,2,B(d(F,1),m,6,15,[t,e]))}function TO(t,e){return i0(t.u,K(t.u,0,e))&&i0(t.u,K(t.u,1,e))}function hv(t,e){return V0(t.a[BA(0,e,0,t.a.length,!0,t)][1])}function Tv(t,e){return V0(t.a[BA(0,e,0,t.a.length,!0,t)][4])}function cv(t,e){return V0(t.a[BA(0,e,0,t.a.length,!0,t)][2])}function _0(t,e,A){return pA(t.K[e].a,t.K[e].b,t.K[A].a,t.K[A].b)}function cO(t,e,A){return gt(V(e.c[t.d[A]],Wt(1,t.b[A])),0)}function V(t,e){return Vn(yG(L0(t)?Se(t):t,L0(e)?Se(e):e))}function J(t,e){return Vn(lG(L0(t)?Se(t):t,L0(e)?Se(e):e))}function d0(t,e){return Vn(hG(L0(t)?Se(t):t,L0(e)?Se(e):e))}function wO(t,e){return e<t.i&&(q8(t.q,e)||t.I[e]==8)?1.5:dt(t,e)}function W9(t,e,A){return e>=t.c&&e<=t.c+t.b&&A>=t.d&&A<=t.d+t.a}function _9(t,e,A){return(t.I[e]==257||t.I[e]==129)&&t.F[0][e]==A}function wv(t,e){var A;for(A=0;A<t.r;A++)t.K[A].a*=e,t.K[A].b*=e}function _i(t,e){var A;return A=En(t,e),A+en(t,e,A,t.D[e])-G1(t,e)}function gv(t,e,A){var n;Wk(e,A,t.a.length),n=A-e,t.a.splice(e,n)}function TL(t,e){y1(e),t.a[t.c]=e,t.c=t.c+1&t.a.length-1,KJ(t)}function _t(t){return MD(t.a<t.c.a.length),t.b=t.a++,t.c.a[t.b]}function Yu(t,e){e.c=e.c*t.c+t.a,e.d=e.d*t.c+t.b,e.b*=t.c,e.a*=t.c}function x3(t,e,A,n,P){t.i[0].a=e,t.i[0].b=A,t.i[1].a=n,t.i[1].b=P}function Cn(t){for(;t.d>0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function N3(t){x9(t.c!=-1),t.d.removeAtIndex(t.c),t.b=t.c,t.c=-1}function JD(t,e,A){Wk(e,A,t.size()),this.c=t,this.a=e,this.b=A-e}function dv(t){ug(),ts.call(this,t),this.a=\"\",this.b=t,this.a=\"\"}function Bv(t){this.a=new nU,this.c=new nU,Av(this),cT(this,t)}function G3(t,e){if(e==null)throw At(new Rr);return Kr(t.e,e)}function vv(t,e){if(e==null)throw At(new Rr);return D8(t.e,e)}function Fv(t,e){var A;return A=1-e,t.a[A]=PQ(t.a[A],A),PQ(t,e)}function Xr(t,e){var A,n;return n=V(t,g1),A=Wt(e,32),J(A,n)}function D0(t,e,A,n){var P=t.Kc(),r=e.Gc();return P.add(r,A,n)}function cL(t,e){var A=t.Kc();function n(){e.oc()}A.showDialog(n)}function kv(t,e){var A;return A=e.D[t],A<(k2(),JA).length?JA[A]:2}function gO(t,e){var A;return e==null?null:c6(t,ln((A=e,w0(),A)))}function O3(t,e,A){return A=CX(A),t.replace(new RegExp(e,\"g\"),A)}function mv(t,e){return t.j=null,k6(t,new un(new Sr(e)))?t.j:null}function bv(){this.a=iP(\"/resources/forcefield/mmff94/covrad.csv\")}function q3(t,e,A,n,P){var r=t.Lc();return r.fillRectangle(e,A,n,P)}function dO(t,e){var A;return A=ja(t,e),A?new P8(A):null}function BO(t,e,A){var n;n=LJ();try{return HN(t,e,A)}finally{XO(n)}}function $9(t){var e;return L0(t)?(e=t,e==-0?0:e):dq(t)}function jv(t){var e,A;for(e=0,A=t-1;A>0;)A>>=1,++e;return e}function Rv(t,e){var A;return A=vv(t,e),++t.a,A&&(++A.b,++t.b),A}function YD(t,e){var A;return A=t.b?Be(t.b,U1(e)):null,A?A.a:e-1}function wL(t,e){var A;return A=t.c?Be(t.c,U1(e)):null,A?A.a:e-1}function vO(t){var e,A;for(A=op(t);A;)e=TY(A),lT(t,e,ho),A=op(t)}function FO(t){qs();var e,A;for(ut(t,1),A=t.g,e=0;e<A;e++)AM(t,e)}function kO(t,e){var A=t;e.setEventHandler(function(n,P){A.Fc(n,P)})}function z3(t,e,A,n){var P=t.Lc();return P.drawCenteredString(e,A,n)}function mO(t,e,A,n,P){var r=t.Lc();return r.drawDottedLine(e,A,n,P)}function K3(t,e,A,n,P){this.a=t,this.b=e,this.g=A,this.f=n,this.e=P}function gL(t,e){e.L=t.L,e.M=t.M,e.T=t.T,e.J=t.J,e.Q=t.Q,e.U=t.U&24}function J3(t,e){this.a=t,rh.call(this,t),Ju(e,t.size()),this.b=e}function RA(t,e){Ce(),le.call(this,t,1,B(d(F,1),m,6,15,[e]))}function Y3(){Y3=v1,pS=B(d(F,1),m,6,15,[40,20,20,100,20])}function bO(){return P9(),B(d(x1t,1),_e,108,0,[Uc,sc,Lc,wi,Y2])}function jO(){return Dr(),B(d(N1t,1),_e,98,0,[Fl,vl,Bl,kl,So,ml])}function RO(){return iT(),B(d(K8t,1),_e,83,0,[Hc,dS,BS,vS])}function pv(t,e,A){return aP(new QD(t.e).a)<t.c?sF(t,e,A):null}function Mv(t,e,A){t.b=e,t.a=A,t.c&&t.e*w.Math.pow(10,-e/1.36)}function dL(t){return MD(t.b!=t.d.c),t.c=t.b,t.b=t.b.a,++t.a,t.c.c}function Cv(t){return MD(t.b<t.d.size()),t.d.getAtIndex(t.c=t.b++)}function X3(t,e){var A;return A=t.v[e]&gn,A==0?0:A==Qe?2:A==O1?3:4}function Hv(t,e){var A;return A=yJ(t,e),!!Hm(A,t)}function TA(t){var e=t.Kc(),A=e.createComboBox();return new z7(A)}function he(t,e){var A=t.Kc(),n=A.createLabel(e);return new K7(n)}function BL(t,e){var A=t,n=t.Dc();n.runLater(function(){A.Ec(e)})}function Vv(t,e){var A;return A=t-e,A>=l1?A-=m0:A<_6&&(A+=m0),A}function Xu(t,e,A){var n;return n=new GB(e,A,t.C),MI(n,RJ(t,n)),n}function pO(t){if(!(\"stack\"in t))try{throw t}catch{}return t}function RP(t,e){return e.e==0||t.e==0?vr:(Lr(),zs(t,e))}function Zu(t,e){t.e&&(!t.r&&(t.r=new C0),q(t.r,\" \"),q(t.r,e))}function o8(t){if(t<0)throw At(new W7(\"Negative array size: \"+t))}function MO(){throw new Error(\"drug likeness must be assessed first\")}function CO(t){return function(){return BO(t,this,arguments);var e}}function Ev(t,e){bb(),this.c=OD(t,\"Edit Text\",this),this.e=e,W$(this)}function Z3(t){this.a=c(F,m,6,t,15,1),this.b=c(F,m,6,t,15,1)}function Wu(t){bD(this),o3(this.a,0,JT(t,c(qn,A0,1,aP(t.a),5,1)))}function Sv(t){bi(t.g.a,0),bi(t.f.a,0),bi(t.a.a,0),t.b=null,t.d=-1}function Zr(t,e,A){var n;return n=(ee(e,t.a.length),t.a[e]),t.a[e]=A,n}function Iv(t,e,A){var n;for(n=0;n<t.e.length;n++)t.a[n]+=e,t.b[n]+=A}function HO(t,e){var A;for(A=t.d-1;A>=0&&t.a[A]==e[A];A--);return A<0}function tr(t,e){var A;return A=u9(t,e),A<0&&(A=-(A+1),f8(t.d,A,e)),A}function VO(t,e,A){for(;A>=0;--A)if($8(e,t.a[A]))return A;return-1}function EO(t){var e,A;return A=c6(new p7,ln((e=t,_u(),e))),new P8(A)}function SO(t,e){var A=t.Hc(),n=new sA(e);return A.copyMolecule(n)}function xv(t,e,A,n){var P=t.Dc();return P.createImageFromBase64(e,A,n)}function W3(t,e){var A;return A=t.D[e],A==8||A==16||A==34||A==52||A==84}function IO(t,e){var A;return A=t.D[e],A==9||A==17||A==35||A==53||A==85}function vL(t){var e;for(e=t.length-1;e>=0&&(t[e]|0)==0;--e);return e}function Nv(t,e){return e<t.g.a.length?G(t.g,e):G(t.f,e-t.g.a.length)}function xO(t,e){return Lr(),e<pc.length?sW(t,pc[e]):RP(t,Qi(e))}function _3(t,e){var A;return e.c.od($q(t,e.d.qc(),(A=new c7(e),A)))}function $i(t){P5(),sN(this,Ot(V(O0(t,24),yi)),Ot(V(t,yi)))}function Wr(t){J1(),DF.call(this,t?t.N:256,t?t.O:256),t&&Uf(t,this)}function $3(t){this.d=t,this.b=this.d.a.entries(),this.a=this.b.next()}function Gv(){this.a=iP(\"/resources/forcefield/mmff94/vanderwaals.csv\")}function Ov(t){t.cb&&(Uf(t.cb,t.V),t.I=t.bb?new Ts(t.bb):null)}function a3(t){return t.j&&(t.backingJsObject!==oM&&t.kc(),t.g=null),t}function tP(t){var e,A;e=_k(t);do A=e,z_(t),e=_k(t);while(A!=e);return e}function qv(t,e){var A;return A=new M7,A.c=e,ut(t,15),iM(A,t,!0),A.b.a}function NO(t,e){var A;return A=WQ(t,e,null),A?new P8(A):null}function Un(t,e){var A=t.Kc(),n=A.createCheckBox(e);return new q7(n)}function FL(t,e){return e[0]!=-1&&e[3]!=-1?YQ(t,e):R$(t.o,t,e)}function GO(t,e){return t.a=(t.a+e.a)/2,t.b=(t.b+e.b)/2,t.c=(t.c+e.c)/2,t}function GA(t,e){if(!e||e.r==0){t.H=null;return}t.H=e,t.L=!1,ut(t.H,1)}function zv(t,e,A,n){var P;P=new nU,P.c=e,P.b=A,P.a=n,n.b=A.a=P,++t.b}function Xe(t,e,A,n){n?t.H[e]|=A:t.H[e]&=~A,t.U=0,n&&A!=0&&(t.L=!0)}function Kv(t,e,A){return t.f.k.F[0][e]==A?t.f.k.F[1][e]:t.f.k.F[0][e]}function OO(t,e){return w.Math.pow(10,w.Math.log10(2e3)*t/(e-1)-1)}function qO(t){t.eb=w.Math.max(t.eb,4),P1(t.k),N1(t,new x1(t,1,!1))}function Jv(t,e){var A;t.b&&(K1(t),A=new pm(t._,t.V,e),NN(A,new A7(t)))}function N1(t,e){var A;A=e.j,(A&t.J)==0&&(BL(t._,new Yd(t,A,e)),t.J|=A)}function kL(t,e,A){var n,P;n=e>>4,P=2*(e&15),t.a[n]&=~(3<<P),t.a[n]|=A<<P}function mL(t){var e,A,n;return e=t&z0,A=t>>22&z0,n=t<0?Pn:0,G0(e,A,n)}function Yv(t,e,A){var n=t.Dc(),P=n.createImage(e,A);return new iU(P)}function bL(t,e,A,n){var P;return P=c(F,m,6,e,15,1),SY(P,t,e,A,n),P}function Xv(){Xv=v1,Ec=B(d(XA,1),re,6,14,[0,1,3,7,15,31,63,127])}function _r(t,e){return e==0||t.e==0?t:e>0?Fm(t,e):Cj(t,-e)}function tT(t,e){return e==0||t.e==0?t:e>0?Cj(t,e):Fm(t,-e)}function zO(t,e){An(),e=e||{};var A=new Uh(e);return A.parseMolecule(t,e)}function a9(t,e){var A,n;return A=(y1(t),t),n=(y1(e),e),A==n?0:A<n?-1:1}function Zv(t,e){var A,n;return A=e.hd(),n=e9(t,A),!!n&&$8(n.d,e.jd())}function KO(t,e){var A;return A=t.a.get(e),A??c(qn,A0,1,0,5,1)}function JO(t){var e,A;return e=t.c.e.length,A=t.c.e.length,A<e?-1:A>e?1:0}function YO(t){var e,A;return e=t.c.e.length,A=t.c.e.length,e<A?-1:e>A?1:0}function Wv(t){var e;return!!(t.r&&(e=zq(t.r),RR(t,e)))}function XO(t){t&&kq((bh(),wc)),--Go,t&&Oo!=-1&&(Jx(Oo),Oo=-1)}function _v(t){return t==5||t==6||t==7||t==8||t==15||t==16||t==33||t==34}function jL(t,e){return N8(e)?e==null?b5(t.a,null):yk(t.c,e):b5(t.a,e)}function $v(t,e){return t.a?q(t.a,t.b):t.a=new bn(t.d),Jg(t.a,e),t}function av(t,e){var A;S3(e),A=e/31|0,mG(t.a,A),t.a[A]=t.a[A]|0|1<<e%31}function XD(t){var e;return e=(k2(),JA)[t<JA.length?t:6],e*(t==1,.9)}function ke(t,e,A,n,P,r){var i=t.Kc(),f=e.Gc();return i.add(f,A,n,P,r)}function eT(t,e,A,n,P){xr.call(this,e),this.c=PW(this,t,n,e,A),this.b=P}function RL(t,e,A){this.b=t,this.d=e,this.e=A,this.c=this.d+(\"\"+this.e)}function tF(t){this.b=iP(\"/resources/forcefield/mmff94/stbn.csv\"),this.a=t}function eF(t){this.b=iP(\"/resources/forcefield/mmff94/bond.csv\"),this.a=t}function AF(t){this.b=iP(\"/resources/forcefield/mmff94/angle.csv\"),this.a=t}function pL(t){bD(this),SD(t>=0,\"Initial capacity must not be negative\")}function ML(){throw new Error(\"static resources must be registered first\")}function nF(){return q1(),\"\"+null.zd(),null}function CL(t,e){var A;return A=c(F,m,6,e,15,1),PA(t,0,A,0,t.length),A}function HL(t,e,A,n){var P;return P=c(F,m,6,e+1,15,1),Y_(P,t,e,A,n),P}function c(t,e,A,n,P,r){var i;return i=Zm(P,n),P!=10&&B(d(t,r),e,A,P,i),i}function cA(t,e){var A;return A=(ee(e,t.a.length),t.a[e]),t.a.splice(e,1),A}function VL(t,e){var A;for(A=t-e;A<_6;)A+=m0;for(;A>l1;)A-=m0;return A}function PF(t,e){var A,n;return n=t.j.k[e],A=t.j.j[e],n==0?t.b:n==1?A:t.a+A}function me(t,e,A,n){t.v[e]&=-8,A!=3&&(t.v[e]&=py),t.v[e]|=A,n&&(t.v[e]|=4)}function EL(t,e){t.eb=w.Math.max(t.eb,e),P1(t.k),N1(t,new x1(t,1,!0))}function K1(t){!t.cb&&(t.cb=new i3),Uf(t.V,t.cb),t.bb=t.I?new Ts(t.I):null}function ZO(t){var e;for(ut(t,15),e=0;e<t.r;e++)(t.v[e]&3)!=0&&Ne(t,e,1,0)}function WO(t,e){return t.a[e]>-1?t.a[e]:t.D[e]==1?Ka(t,e):p6(t,e)}function rF(t,e){return e<t.i&&(q8(t.q,e)||t.I[e]==8)?0:t.I[e]&127}function iF(t,e){return e<t.i&&(q8(t.q,e)||t.I[e]==8)?0:t.I[e]&127}function fF(t,e){var A;return A=new PU,A.c=!0,A.d=e.jd(),sp(t,e.hd(),A)}function er(t,e){var A;return A=$r(t,e,0),A==-1?!1:(cA(t,A),!0)}function SL(t){var e;return e=-1,t.a!=-2?(e=t.a,t.a=-2):e=t.b.Qc(),e}function AT(t){var e,A;for(A=0,e=0;e<t.a.length;e++)A+=ir(t.a[e]);return A}function ZD(t,e){var A;return A=BA(0,e,0,t.a.length,!0,t),A>=0&&t.a[A][7]>0}function WD(t){this.b=c(Ut,Tt,6,t,15,1),this.c=c(Ut,Tt,6,t,15,1),this.a=0}function nT(t){this.e=t,this.d=c(F,m,6,0,15,1),this.c=c(F,m,6,0,15,1)}function DF(t,e){this.N=w.Math.max(1,t),this.O=w.Math.max(1,e),oR(this)}function PT(t){this.e=t,this.b=this.e.a.entries(),this.a=c(qn,A0,1,0,5,1)}function IL(t,e){jU.call(this,t,e),this.a=c(z8t,A0,123,2,0,1),this.b=!0}function xL(t,e,A,n){HQ(),this.a=(n&255)<<24|(t&255)<<16|(e&255)<<8|A&255}function Ar(t,e,A,n,P,r,i){i.a=e.a+P,i.c=e.c+r,i.b=e.b+P,i.d=e.d+r,In(t,i,A,n)}function Mt(t,e,A){if(t<0||e>A||e<t)throw At(new vh(to+t+H6+e+LM+A))}function _O(t){if(!t)throw At(new yU(\"Unable to add element to queue\"))}function _u(){_u=v1,new Wg,new mh(\"ISO-LATIN-1\"),new mh(\"ISO-8859-1\")}function uF(t,e){im(),this.d=e,this.i=new un(t),this.g=new Vr,this.b=new Vr}function U8(){this.g=new n1,this.f=new n1,this.a=new n1,this.d=-1,this.c=!1}function QF(){this.b=c(Ut,Tt,6,64,15,1),this.c=c(Ut,Tt,6,64,15,1),this.a=0}function oF(t,e,A){this.b=w.Math.max(t,e),this.c=w.Math.min(t,e),this.a=A}function $O(t){return e1(s9,typeof t)||Hd(t,w.java.lang.Number$impl)}function aO(t,e){try{t.c=sn(e)}catch(A){if(A=_1(A),!Yt(A,42))throw At(A)}}function $u(t,e,A){var n=t.Kc(),P=n.createTextField(e,A);return new J7(P)}function au(t,e){var A;for(A=e;A<t.length;A++)if(t[A]==62)return A;return-1}function L8(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return A;return-1}function $r(t,e,A){for(;A<t.a.length;++A)if($8(e,t.a[A]))return A;return-1}function rT(t){var e;for(e=0;e<t.r;e++)if(t.K[e].c!=0)return!0;return!1}function tq(t,e){var A;for(A=Tl[e]/2;t<-A;)t+=m0;for(;t>=A;)t-=Tl[e];return t}function eq(t,e){var A;return A=t.D[e],A==3||A==11||A==19||A==37||A==55||A==87}function Aq(t,e){var A;return A=t.D[e],A==4||A==12||A==20||A==38||A==56||A==88}function NL(t){return t.a.d!=t.c?Vg(t.a,t.b.value[0]):t.b.value[1]}function nq(t){return z(t,0)==0&&2<zo.length?zo[2]:new ff(t,2)}function UF(t){return t.d.a.length<2?null:new Mj(G(t.d,0),G(t.d,1))}function LF(t,e,A,n){return y1(t),y1(e),y1(A),y1(n),new Ou(t,e,A,new Kw)}function ai(t,e,A,n){var P;n=(FU(),n||Vl),P=t.slice(e,A),h5(P,t,e,A,-e,n)}function Pq(t,e,A,n,P){Mt(e,A,t.length),Mt(P,P+(A-e),n.length),TG(t,e,A,n,P)}function sF(t,e,A){if(e==null||A==null)throw At(new Rr);return Jr(t.e,e,A)}function iT(){iT=v1,Hc=new vu(\"All\",0),dS=new fd,BS=new sd,vS=new Dd}function yF(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function fT(t,e){return new BP(t.b*e.c-t.c*e.b,t.c*e.a-t.a*e.c,t.a*e.b-t.b*e.a)}function lF(t,e){return ut(t,7),t.p[e]==2&&t.k[e]==2?Kb(t,e,!1):_s(t,e,!1)}function tf(t,e){var A;return e==null||e.length==0?null:qT(t,ln((A=e,w0(),A)))}function rq(t){var e,A;return new P8((e=new U8,A=new un(new Sr(t)),kY(e,A),e))}function iq(t,e){var A,n;for(n=new n1,A=0;A<e.s;A++)Ft(n,new zB(t,e,A));return n}function Ze(t,e){J1();var A;for(A=t-e;A<_6;)A+=m0;for(;A>l1;)A-=m0;return A}function hF(t,e){return yF(e)!=10&&B(Qs(e),e.xd,e.__elementTypeId$,yF(e),t),t}function fq(t,e){e&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)))}function Dq(t,e){e&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)))}function uq(t,e){return F3(nz(Id(t,new al),xd(e,new al),new Vw),new Ew)}function DT(t,e){var A,n;for(n=new Zt(t.a);n.a<n.c.a.length;)A=_t(n),A.nc(e)}function Qq(t,e){var A,n;for(n=new Zt(t.a);n.a<n.c.a.length;)A=_t(n),A.nc(e)}function GL(t,e,A){var n;for(n=0;n<t.r;n++)t.K[n].a+=e,t.K[n].b+=A;t.V+=e,t.W+=A}function TF(t,e){var A;for(A=0;A<e.length;A++)if(e[A]==t)return!0;return!1}function E0(t){var e;return L0(t)&&(e=0-t,!isNaN(e))?e:Vn(Ai(t))}function oq(t,e){try{t.i[0].b=sn(e)}catch(A){if(A=_1(A),!Yt(A,42))throw At(A)}}function Uq(t,e){try{t.i[0].a=sn(e)}catch(A){if(A=_1(A),!Yt(A,42))throw At(A)}}function cF(t,e,A){f8(t.g,A,e),t.b[e.a]=!0,e.g!=-1&&(t.c[o1(t.k,e.a,e.g)]=!0)}function Lq(t,e){t.L||(Ia(t,e),t.L=!0),t.r||(G$(t,e),Utt(t),sY(t),t.r=!0)}function OL(t){return t.v<<=t.t,(!t.r||t.v!=63)&&(t.v+=64),Ye(t.u,t.v&d1),t.u.a}function uT(t){var e;return e=t.b.a.length==0?null:G(t.b,0),e!=null&&yT(t,0),e}function QT(t,e,A,n){if(A==null||A.length==0){zL(e),e.d=null;return}DM(t,e,A,n,0)}function wF(t,e,A,n,P,r){this.c=t,this.e=e,this.d=A,this.f=n,this.b=P,this.a=r}function sq(t){this.e=\"\",this.c=9,this.d=0,this.i=c(lc,A0,56,1,0,1),this.i[0]=t}function gF(t,e){this.a=V0(t.b[e][5]),this.b=V0(t.b[e][6]),this.c=V0(t.b[e][7])}function ef(t,e){return(t.G[e]&768)>>8!=1&&(t.G[e]&768)>>8!=2?-1:(t.G[e]&cn)>>10}function oT(t,e){return t.p[e]==2&&t.k[e]==2&&t.o[e][0]==2&&t.o[e][1]==2&&t.D[e]<=7}function yq(t){return t==1||t>=5&&t<=9||t>=14&&t<=17||t>=32&&t<=35||t>=52&&t<=53}function lq(t,e){return new Ke(t.b*e.c-t.c*e.b,-(t.a*e.c-t.c*e.a),t.a*e.b-t.b*e.a)}function hq(t,e){var A,n;for(A=0,n=0;n<t.b;n++)t.e[n][e]&&t.c[n]==-3&&++A;return A}function Tq(t){var e,A;for(A=t.a,e=0;e<t.b.length;e++)A+=t.b[e]*X4[t.c[e]];return A}function cq(t){var e,A;for(A=t.d,e=0;e<t.b.length;e++)A+=t.b[e]*Z4[t.c[e]];return A}function wq(t){var e,A,n;for(e=lk(t),n=0,A=0;A<qP.length;A++)n+=e[A]*qP[A];return n}function UT(t,e,A){var n;for(n=G(t.k,e).length;A>=n;)A-=n;for(;A<0;)A+=n;return A}function dF(t,e){return t.V.r!=0&&t.r?SO(t.r,e?Bj(t.V):$n(t.V)):!1}function gq(t,e){if(t.N!=0){t.C!=-4&&(t.C=-4,t.Bb(t.N));return}t.C=-5,t.P=e,t.Bb(e)}function dq(t){return _T(t,(ti(),Bc))<0?-wN(Ai(t)):t.l+t.m*oP+t.h*UP}function Bq(t,e,A,n,P){return y1(t),y1(e),y1(A),y1(n),y1(P),new Ou(t,e,A,n)}function qL(t,e,A){Yp.call(this,t),this.b=e,this.c=z(A,0)==0?new n2:new $i(A)}function BF(){ZP.call(this,\"invalid JS RegExp: RGROUPS=\\\\((\\\\d+) (\\\\d+).*\\\\)\")}function vF(){this.a=iP(\"/resources/forcefield/mmff94/herschbachlaurie.csv\")}function _D(){this.i=c(lc,A0,56,2,0,1),this.i[0]=new we,this.i[1]=new we,this.a=0}function ti(){ti=v1,gc=G0(z0,z0,524287),iS=G0(0,0,B8),dc=mL(1),mL(2),Bc=mL(0)}function vq(t,e){try{t.d=L1(e,f1,Et)}catch(A){if(A=_1(A),!Yt(A,42))throw At(A)}}function tQ(t,e){var A,n;for(n=Bu(t.b,e),A=n.length;A<10;A++)Ye(t.a,32);q(t.a,n)}function FF(t,e){var A,n;for(n=Bu(t.a,e),A=n.length;A<10;A++)Ye(t.b,32);q(t.b,n)}function kF(t,e){var A,n;for(A=t.p[e],n=0;n<t.k[e];n++)rA(t,t.j[e][n])&&++A;return A}function ei(t,e,A){var n,P;for(n=0,P=0;P<t.k[e];P++)X(t,t.j[e][P])==A&&++n;return n}function Fq(t){var e,A;return e=c(F,m,6,t.r,15,1),A=Ur(t,e,!1,!1),OR(t,e,A)}function kq(t){var e,A;if(t.b){A=null;do e=t.b,t.b=null,A=pb(e,A);while(t.b);t.b=A}}function mq(t){var e,A;if(t.a){A=null;do e=t.a,t.a=null,A=pb(e,A);while(t.a);t.a=A}}function zL(t){t.r=0,t.s=0,t.L=!1,t.M=!1,t.J=0,t.w=null,t.u=null,t.Q=null,t.U=0}function ar(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return!0;return!1}function LT(t,e){var A,n,P;return A=t.length-(e/32|0)-1,n=e%32,P=1,P=P<<n,(t[A]&P)!=0}function mF(t,e,A,n){var P;return P=0,e&&(P|=1),A&&(P|=2),n&&(P|=4),Eu(new dD(t.a,P))}function KL(t,e){return e?(ut(t,1),dP(t,t.g,t.i,Bn)):dP(t,t.r,t.s,Bn)}function bq(t,e){var A;return S3(e),A=e/31|0,A<t.a.length&&((t.a[A]|0)>>>e%31&1)==1}function bF(t,e,A,n,P){var r;return r=dj(t,e,A,n,P),r<0?bj(t,e,A,n,P):V0(t.b[r][5])}function eP(t,e){var A;return t.u==null||t.u[e]==null?null:on((A=t.u[e],w0(),A))}function OA(t,e){return(t.v[e]&b1)>>18!=1&&(t.v[e]&b1)>>18!=2?-1:(t.v[e]&VA)>>20}function P0(t,e){var A,n;for(A=t.k[e],n=0;n<t.k[e];n++)t.D[t.j[e][n]]==1&&--A;return A}function JL(t,e){var A,n;if(A=0,t.L)for(n=0;n<t.k[e];n++)ye(t,t.j[e][n])&&++A;return A}function sT(t,e){var A,n,P,r;return n=e/2|0,P=t>=n,P&&(t-=n),r=e/32,A=r*t/(n-t),P?-A:A}function jq(t){var e,A,n,P;return P=0,e=t.d.i,n=t.k.i,A=t.n.i,P=A/w.Math.max(e,n),P}function Rq(t,e){var A;return A=e.c,e.a.b=e.b,e.b.a=e.a,e.a=e.b=null,e.c=null,--t.b,A}function jF(t){var e;x9(!!t.c),e=t.c.a,Rq(t.d,t.c),t.b==t.c?t.b=e:--t.a,t.c=null}function YL(t){var e;return e=new jT,e.n=\"Class$\"+(t?\"S\"+t:\"\"+e.i),e.b=e.n,e.j=e.n,e}function pq(t){var e,A;for(ut(t,7),e=0,A=0;A<t.q.j.a.length;A++)wh(t.q,A)&&++e;return e}function XL(t,e,A){var n,P;for(n=0,P=0;P<Ct(t.f,A);P++)ar(e,_(t.f,A,P))&&++n;return n}function Mq(t,e,A){var n,P;for(P=0;P<t.k[A];P++)if(n=t.j[A][P],n!=e)return n;return-1}function Cq(t,e,A){var n;return n=UX(t,e,A),n&&A==386&&(ut(t,7),n=n&(t.G[e]&128)==0),n}function pe(t,e,A){var n=function(){return t.apply(n,arguments)};return e.apply(n,A),n}function Hq(){vg();for(var t=Ll,e=0;e<arguments.length;e++)t.push(arguments[e])}function Vq(){return Qr(),B(d(O8t,1),_e,75,0,[wS,lS,yS,hS,Hl,TS,ce,cS])}function eQ(t){return J1(),t>=0&&t<v9.length&&v9[t]!=null?v9[t]:t>=171&&t<=190?gE:dE}function RF(t){return t!=null&&(typeof t===ly||typeof t==\"function\")&&t.yd!==DD}function pF(t,e){var A;if(t.i!=null)for(A=0;A<t.i.length;A++)t.i[A].a*=e,t.i[A].b*=e}function MF(t,e){var A;if(t){e.k=t;var n=nO(e);if(!n){bo[t]=[e];return}n.wd=e}}function AP(t,e){for(var A in e)e[A].configurable=!0;Object.defineProperties(t,e)}function AQ(t,e,A){if(!t.c){if(t.e.a.length==4){t.c=!0;return}Ft(t.e,new f3(t,e,A))}}function Eq(t,e){var A;return A=t.D[e]<v9.length?v9[t.D[e]]:null,A==null?6:A[A.length-1]}function Sq(t,e){var A;for(A=0;A<t.k[e];A++)if(t.t[t.j[e][A]]<0)return!0;return!1}function CF(t,e){var A;for(A=0;A<t.k[e];A++)if(t.t[t.j[e][A]]>0)return!0;return!1}function w1(t,e,A,n){n?t.C[e]=J(t.C[e],A):t.C[e]=V(t.C[e],Zn(A)),t.U=0,t.L=!0}function Iq(t,e,A){t.a==null&&(t.a=c(E,I,6,t.R.g,15,1),cx(t.a)),t.a[e]=A<<24>>24}function HF(t,e){t&&(this.k=c(gr,B9,26,1,0,1),this.k[0]=t),this.c=0,this.g=e,Vs(this)}function VF(t,e,A,n,P,r,i,f){this.e=t,this.a=e,this.b=A,this.f=n,this.d=i,this.c=P*r/f}function ZL(t,e,A,n,P,r){xr.call(this,n),this.e=t,this.b=e,this.c=A,this.a=P,this.d=r}function $D(t,e){SD(t>=0,\"Digits < 0\"),c3(e,\"null RoundingMode\"),this.a=t,this.b=e}function EF(t){x9(t.c>=0),PJ(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function xq(t,e){var A,n,P,r;if(t.e!=null)for(n=t.e,P=0,r=n.length;P<r;++P)A=n[P],A.J=e}function SF(t,e,A){var n,P,r;for(r=t.a.length-1,P=t.b,n=0;n<A;P=P+1&r,++n)e[n]=t.a[P]}function Nq(t,e){var A,n;return A=AT(t),n=AT(e),A>n?1:A<n?-1:0}function Gq(t){var e,A;return e=vL(t.a),e==-1?0:(A=t.a[e]|0,e*31+(32-D9(A)))}function IF(t,e){var A;for(A=0;A<t.k[e];A++)if(R1(t,t.j[e][A])<0)return!0;return!1}function Oq(t){var e,A;for(A=0,e=0;e<t.a.r;e++)(X(t.a,e)==7||X(t.a,e)==8)&&++A;return A}function qq(t){var e,A;if(t.L)return 0;for(ut(t,1),A=0,e=0;e<t.g;e++)A+=xt(t,e);return A}function WL(t){var e,A;if(t==0)return 32;for(A=0,e=1;(e&t)==0;e<<=1)++A;return A}function _L(t){var e;return e=t.e[t.d++]-48,an(t.e[t.d]&d1)&&(e=10*e+(t.e[t.d++]-48)),e}function xF(t){var e;return e=c(Ut,Tt,6,2,15,1),e[0]=vn*(t/17|0)+p8,e[1]=vn*(t%17)+p8,e}function zq(t){var e=t.Hc(),A=e.pasteMolecule();return A?A.wc():null}function NF(t,e){return t.b!=e.b?t.b>e.b?-1:1:t.c!=e.c?t.c>e.c?-1:1:0}function Kq(t,e){return t.d!=e.d?t.d<e.d?-1:1:t.e!=e.e?t.e<e.e?-1:1:0}function yT(t,e){var A;A=cA(t.b,t.b.a.length-1),e<t.b.a.length&&(Zr(t.b,e,A),Xb(t,e))}function lT(t,e,A){var n;vtt(e,A,(t.e&12)!=0),n=X5(t,e.b[0],e.b[1],0),rk(t,e.b[0],e.b[1],n)}function nQ(t,e,A,n){return Bt(w.Math.round((t.a[e]*t.c[e]+n*t.c[A])/(t.c[e]+t.c[A])))}function Jq(t,e,A,n){this.d=e,this.a=A,this.b=n,this.e=d2(t.d,e,A,n),this.c=ia(t.d,e,A,n)}function Yq(t,e){Bm(),this.o=t,this.n=z(t,0)==0?new n2:new $i(t),this.r=new UB(t,e)}function GF(t,e){var A,n;t.b&&(K1(t),n=(t.U&4)!=0,A=new gm(t._,t.V,e,n),xN(A,new e7(t)))}function OF(t){var e;t.a=!1,e=new fu(MB(t)),uO(e,0,0,t.b.o,t.b.e),Ra(t.b,new fu(MB(t)))}function Xq(t,e,A){var n,P;for(t.J&=~e,P=new Zt(t.S);P.a<P.c.a.length;)n=_t(P),n.nc(A)}function Zq(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a+=e,t.i[n].b+=A}function qF(t,e,A){var n,P;for(P=G(t.j,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function Wq(t,e,A){var n,P;for(P=G(t.k,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function zF(t,e){var A;for(OJ(t),A=0;A<t.b.length;A++)if(e[t.b[A]])return!0;return!1}function _q(t,e){var A;for(A=0;A<t.k[e];A++)if(X(t,t.j[e][A])!=6)return!0;return!1}function PQ(t,e){var A,n;return A=1-e,n=t.a[A],t.a[A]=n.a[e],n.a[e]=t,t.b=!0,n.b=!1,n}function $q(t,e,A){var n;return Bz(t),t.b=!0,n=new Jw,n.a=e,qx(t.a,new Ig(n,A)),n.a}function rQ(t,e,A,n){var P,r;this.a=hn(t,e,A,n),P=A-t,r=n-e,this.b=w.Math.sqrt(P*P+r*r)}function iQ(t,e){var A;for(A=0;A<t.r;A++)w.Math.abs(t.A[A])==w.Math.abs(e)&&(t.A[A]=0)}function nr(t,e){var A;return A=c(F,m,6,e,15,1),PA(t,0,A,0,w.Math.min(t.length,e)),A}function aq(t,e){var A;return A=c(XA,re,6,e,14,1),PA(t,0,A,0,w.Math.min(t.length,e)),A}function tz(t,e){var A;for(A=0;A<O(t.k,e);A++)if(!t.b[_(t.k,e,A)])return!0;return!1}function Af(t,e){var A;return A=c(F,m,6,e,15,1),PA(t,0,A,0,w.Math.min(t.length,e)),A}function Me(t){return t.J==null&&(si(t),(t.Q&O1)==0&&(rtt(t),ip(t,1),ip(t,2)),k1t(t)),t.J}function ez(t){var e={};return t!=null&&(e=t&&t.prototype,!e&&(e=bo[t])),Object.create(e)}function KF(t,e){var A;(!t.q||!e.q)&&(A=new ov(t.o),!t.q&&(t.q=n5(A,t)),!e.q&&(e.q=n5(A,e)))}function Az(t,e){var A,n;if(t.g)for(n=new Zt(t.g);n.a<n.c.a.length;)A=_t(n),A.Ib(e,t.p)}function aD(t,e){var A,n,P;A=t.a.length-(e/32|0)-1,n=e%32,P=1,P=P<<n,t.a[A]=t.a[A]|P,t.b=-1}function pP(t,e,A,n){var P,r;return r=t.length,P=w.Math.min(n,r)-A,F5(t,A,e,0,P,!0),e}function $L(t,e){var A;return A=c(Pt,it,6,e,16,1),PA(t,0,A,0,w.Math.min(t.length,e)),A}function aL(t,e){var A=t.Lc(),n=A.getBounds(e);return new lA(n.x,n.y,n.width,n.height)}function nz(t,e,A){return LF(A,new DB(t,e),new Ow,B(d(El,1),_e,96,0,[(hQ(),Yo)]))}function JF(){JF=v1,new $D(34,(Qr(),ce)),new $D(7,ce),new $D(16,ce),new $D(0,Hl)}function Hn(t){return xs(t,26)*14901161193847656e-24+xs(t,27)*11102230246251565e-32}function Pz(t){return t>=21&&t<=30||t>=39&&t<=48||t==57||t>=72&&t<=80||t==89||t>=104&&t<=112}function YF(t){return Bt(w.Math.round((Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*t)))}function ts(t){e3(this),a3(this),this.backingJsObject=t,Wb(this,t),this.f=t==null?y9:P2(t)}function es(t,e,A,n,P,r){this.f=e,this.d=A,this.a=n,this.b=P,this.c=r,this.e=qW(t.k,e,A,n,P,r)}function XF(t,e,A){var n,P,r;for(n=0,P=0;P<A;P++)r=e[P],t[P]=r<<1|n,n=r>>>31;n!=0&&(t[A]=n)}function ZF(t,e,A){var n,P,r;for(P=0,r=0;r<t.k[e];r++)n=t.j[e][r],n!=A&&t.k[n]>2&&++P;return P}function o1(t,e,A){var n;for(n=0;n<t.j[e].length;n++)if(t.j[e][n]==A)return t.n[e][n];return-1}function As(t,e,A){var n;for(n=0;n<t.k.a.length;n++)if(Pf(t,n,e)&&Pf(t,n,A))return n;return-1}function nf(t,e){var A;for(A=0;A<O(t.j,e);A++)if(Ae(t.j,_(t.j,e,A)))return!0;return!1}function rz(t){var e;for(e=0;e<t.i;e++)if(t.I[e]==8)return jf(new p9(t),null,!1);return!1}function WF(t){var e,A;for(ut(t,31),A=0,e=0;e<t.g;e++)(t.v[e]&3)!=0&&(t.v[e]&4)==0&&++A;return A}function iz(t){var e,A;if(e=t.q,t.t)for(A=0;A<t.q;A++)t.e[A]&&--e;return t.i>0&&e>t.i&&(e=t.i),e}function ns(t,e){var A;return A=ws(t.V,K(t.V,0,e)),A!=-1&&ze(t.V,A)!=1&&ze(t.V,A)!=2&&(A=-1),A}function _F(t,e,A){var n,P,r;n=Bt(T4*G8(t.V)),P=Bt(mt(t.V,A)),r=Bt(Rt(t.V,A)),yL(e,P-n,r-n,2*n)}function fz(t,e,A){var n;return n=G(t.I,0),EQ(n,mt(t.V,e),Rt(t.V,e))==EQ(n,mt(t.V,A),Rt(t.V,A))}function $F(t,e,A,n){var P;P=t.a.length,A>P?A=P:zt(e,A+1),t.a=hA(t.a,0,e)+(\"\"+n)+GD(t.a,A)}function hT(t,e,A,n){xr.call(this,t),this.a=c(Ut,Tt,6,1,15,1),this.a[0]=A,this.b=e,this.c=n}function aF(t){this.f=t,this.e=new $3(this.f.c),this.a=this.e,this.b=vT(this),this.d=this.f.b}function tk(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=jP(E1(t.f))),t.c).e}function ek(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function Dz(t){var e,A,n;for(A=0,e=-1,n=0;n<t.a.length;n++)A<t.a[n]&&(A=t.a[n],e=n);return e}function uz(t){var e,A;for(A=!0,e=0;e<t.i.g;e++)if(t.o[e]!=0&&!t.e[e]){A=!1;break}return A}function TT(t,e){var A,n;for(A=0,n=0;n<t.k[e];n++)rA(t,t.j[e][n])&&!Ru(t,t.n[e][n])&&++A;return A}function fQ(t,e){var A,n;for(n=0,A=0;A<t.s;A++)(t.F[0][A]==e||t.F[1][A]==e)&&(n+=dt(t,A));return n}function Ak(t){var e,A,n;for(n=0,A=t.Tb();A.cd();)e=A.dd(),n=n+(e!=null?fr(e):0),n=n|0;return n}function cT(t,e){var A,n,P;for(y1(e),A=!1,P=e.Tb();P.cd();)n=P.dd(),A=A|t.add(n);return A}function wT(t,e){var A,n;for(n=t.o.Gc(),n.removeAllItems(),A=0;A<16;A++)Gt(t.o,\"\"+(e+A));return 16}function t9(t,e){var A;return A=c(F,m,6,2,15,1),t>e?(A[0]=t,A[1]=e):(A[0]=e,A[1]=t),A}function nk(t,e){xr.call(this,t),this.a=c(Ut,Tt,6,2,15,1),this.a[0]=e,this.a[1]=Ge,this.c=-1}function Qz(t){if(y1(t),t.length==0)throw At(new _P(\"Zero length BigInteger\"));T_(this,t)}function Ln(t,e){var A;A=t.a.length,e<A?t.a=hA(t.a,0,e):e>A&&(t.a+=z8(c(Fr,re,6,e-A,15,1)))}function oz(t,e){var A;this.c=t,A=new n1,ZT(t,A,e,t.b,null,!1,null,!1),this.a=new J3(A,0)}function Uz(t){var e;for(e=0;e<t.o.r;e++)if((t.a==null?NaN:t.a[e])>2.72)return!1;return!0}function Pk(t,e){var A,n;for(A=0,n=t.size();A<n;++A)if($8(e,t.getAtIndex(A)))return A;return-1}function gT(t,e){return!!(e0(t.b,e)==1&&X(t.b,e)<10||mn(t.b,e)||xP(t.b,e,!0))}function Lz(t,e){return t.D[e]==1&&t.B[e]==0&&t.t[e]==0&&(t.v[e]&b8)==0&&(t.u==null||t.u[e]==null)}function dT(t,e){return w.Math.sqrt((e.a-t.a)*(e.a-t.a)+(e.b-t.b)*(e.b-t.b)+(e.c-t.c)*(e.c-t.c))}function rk(t,e,A,n){var P;P=w.Math.min($r(t.d,e,0),$r(t.d,A,0)),f8(t.d,P,n),er(t.d,e),er(t.d,A)}function sz(t,e,A,n){n&&e!=-1&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0))),A.oc()}function PA(t,e,A,n,P){q1(),c3(t,\"src\"),c3(A,\"dest\"),Oz(t,e,A,n,P),F5(t,e,A,n,P,!0)}function Ps(t,e,A,n,P,r,i,f,D,Q){var o=t.Lc(),L=e.qc();return o.drawImage(L,A,n,P,r,i,f,D,Q)}function Vn(t){var e;return e=t.h,e==0?t.l+t.m*oP:e==Pn?t.l+t.m*oP-UP:t}function E1(t){return N2<t&&t<UP?t<0?w.Math.ceil(t):w.Math.floor(t):Vn(WZ(t))}function yz(t){return ut(t,15),!t.d&&(t.g<2||!hs(t.K[0],t.K[1]))&&(t.d=new bA(t)),t.d?a7(t.d):null}function ik(t){return ut(t,15),!t.d&&(t.g<2||!hs(t.K[0],t.K[1]))&&(t.d=new bA(t)),t.d?Me(t.d):null}function lz(t,e,A){var n;for(n=0;n<t.j.g.length;n++)if(t.e[e][n]&&t.e[A][n])return!0;return!1}function hz(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?1:A<t.b?2:0;return-1}function fk(t,e){return e>=t.g?0:e<t.g&&f0(t.q,e)&&t.D[e]==6&&t.t[e]!=0?1:t.p[e]}function Se(t){var e,A,n,P;return P=t,n=0,P<0&&(P+=UP,n=Pn),A=Bt(P/oP),e=Bt(P-A*oP),G0(e,A,n)}function Tz(t,e){var A,n,P;for(P=(ut(t,7),t.q),n=0,A=0;A<P.j.a.length;A++)qF(P,A,e)>=0&&++n;return n}function Dk(t,e){var A,n;for(n=e.Tb();n.cd();)if(A=n.dd(),m3(t,A.jd()))return!0;return!1}function cz(t){var e,A,n;for(n=1,A=t.Tb();A.cd();)e=A.dd(),n=31*n+(e!=null?fr(e):0),n=n|0;return n}function _1(t){var e;return Yt(t,27)?t:(e=t&&t.__java$exception,e||(e=new dv(t),void 0),e)}function BT(t){var e;return z(t,0)<0&&(t=Zn(t)),e=Ot(j0(t,32)),64-(e!=0?D9(e):D9(Ot(t))+32)}function wz(t,e,A){var n,P;return e==null?null:ds(t,ln((P=e,w0(),P)),A==null?null:ln((n=A,n)),0)}function gz(t,e){var A;for(A=0;A<t.j.i;A++)t.e[A]&&Gs(e,A)&&(Df(t,K(t.j,0,A)),Df(t,K(t.j,1,A)))}function uk(t,e){return w.Math.sqrt((t.a-e.a)*(t.a-e.a)+(t.b-e.b)*(t.b-e.b)+(t.c-e.c)*(t.c-e.c))}function DQ(t,e){t.w!=e&&(t.w==19||e==19?(t.w=e,t.eb=w.Math.max(t.eb,1),P1(t.k)):t.w=e)}function Qk(t,e,A,n){return g1t(n,t,e),A!=null&&(A[0]=n.f[0],A[1]=n.b[0],A[2]=n.b[1],A[3]=n.f[1]),n.d}function dz(t,e){typeof window===ly&&typeof window.$gwt===ly&&(window.$gwt[t]=e)}function Bz(t){if(t.b)throw At(new yU(\"Stream already terminated, can't be modified or used\"))}function vT(t){return t.a.cd()?!0:t.a!=t.e?!1:(t.a=new PT(t.f.a),t.a.cd())}function ok(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(SP(e,qk(t)))return!0;return!1}function vz(t){return t==null?!1:t.$implements__java_lang_Cloneable||Array.isArray(t)}function Uk(t){return t.n==null&&(t.n=Mn(t.e,t.e.length),t.n.sort(pe(Q0.prototype.ld,Q0,[]))),t.n}function Fz(t){return t.includes(\"ATOMS=(\")?E2:t.includes(\"BONDS=(\")?\"BONDS\":null}function kz(t){var e;return t<128?(e=(sB(),vc)[t],!e&&(e=vc[t]=new Ah(t)),e):new Ah(t)}function FT(t){var e,A;return e=Bt(t.i[1].a-t.i[0].a),A=Bt(t.i[1].b-t.i[0].b),w.Math.sqrt(e*e+A*A)}function Lk(t,e){var A,n,P;return A=t.l-e.l,n=t.m-e.m+(A>>22),P=t.h-e.h+(n>>22),G0(A&z0,n&z0,P&Pn)}function mz(t,e){var A,n,P;return A=t.l+e.l,n=t.m+e.m+(A>>22),P=t.h+e.h+(n>>22),G0(A&z0,n&z0,P&Pn)}function sk(t,e){var A;return e>0?(t[e]+t[e-1])/2:(A=l1+(t[0]+t[t.length-1])/2,A>l1?A-m0:A)}function bz(t){var e;return e=t.a[t.b],e==null?null:(t.a[t.b]=null,t.b=t.b+1&t.a.length-1,e)}function yk(t,e){var A;return A=t.a.get(e),A===void 0?++t.d:(t.a.delete(e),--t.c,++t.b.b),A}function lk(t){var e,A;for(A=c(F,m,6,qP.length+2,15,1),ut(t,7),e=0;e<t.g;e++)++A[i1t(t,e)];return A}function jz(t){var e,A;if(t.r==0)return null;for(A=new N0,e=0;e<t.r;e++)X8(A,t.K[e]);return ZU(A,1/t.r)}function hk(t){var e,A;for(A=new Zt(t.U);A.a<A.c.a.length;)e=_t(A),$1(t,e.a),EN(t,e.b,e.c);$1(t,t.Q)}function Rz(t){var e,A;for(A=0,e=0;e<t.a.r;e++)(X(t.a,e)==7||X(t.a,e)==8)&&$d(t.a,e)>0&&++A;return A}function uQ(t,e){var A;for(A=0;A<t.k[e];A++)if(t.o[e][A]==2&&X(t,t.j[e][A])>6)return!0;return!1}function pz(t,e){var A,n;return A=Ns(t,e),A==-1?-1:(n=t.b.a.length,Ft(t.b,e),f8(t.a,A,U1(n)),n)}function Mz(t){var e,A,n;for(n=w.Math.max(t.d.length,t.c.length),A=1,e=n-t.a+1;e<=n;e++)A*=e;return A}function B(t,e,A,n,P){return P.wd=t,P.xd=e,P.yd=DD,P.__elementTypeId$=A,P.__elementTypeCategory$=n,P}function Cz(t){return e1(typeof t,Mf)?!0:t!=null&&t.$implements__java_lang_CharSequence}function Hz(t){var e;if(t<0)return f1;if(t==0)return 0;for(e=dn;(e&t)==0;e>>=1);return e}function Ai(t){var e,A,n;return e=~t.l+1&z0,A=~t.m+(e==0?1:0)&z0,n=~t.h+(e==0&&A==0?1:0)&Pn,G0(e,A,n)}function MP(t,e){var A,n;return A=e.toArray(),n=A.length,n==0?!1:(o3(t.a,t.a.length,A),!0)}function Vz(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?A:A<t.b?A-t.a:-1;return-1}function Tk(t,e,A,n){var P,r;for(r=0;r<O(t.f,A);r++)if(P=_(t.f,A,r),P!=n&&P<e)return!1;return!0}function kT(t,e,A){var n,P,r,i;for(P=e,r=0,i=P.length;r<i;++r)n=P[r],t.f[n&1073741823]=(n&dn)!=0^A?2:1}function Ez(t,e,A,n){Ft(t.$,new lA(e-t.V,A-t.V,2*t.V,2*t.V)),t.K||Ft(t.U,new Vu(e,A,wQ(t,n)?-3:t.p[n]))}function Ie(t,e,A){t.a==t.b.length&&(t.b=zD(t.b,2*t.a),t.c=zD(t.c,2*t.a)),t.b[t.a]=e,t.c[t.a]=A,++t.a}function QQ(t,e){t.F[0]=nr(t.F[0],e),t.F[1]=nr(t.F[1],e),t.I=nr(t.I,e),t.G=nr(t.G,e),t.H=nr(t.H,e),t.O=e}function Sz(t){var e,A;return A=Up(t),A?(kD(A,t.a),e=G(A,A.a.length-1),t.n=Cs(t.d,e),t.n):null}function ck(t,e,A,n){var P;return w2(t,e,A,n),Ed(t.R)?null:(P=t.R,_h(t.R,t.L),t.R=new Qu,P)}function We(t,e,A){var n,P;return n=new IL(e,A),P=new PU,t.b=xj(t,t.b,n,P),P.b||++t.c,t.b.b=!1,P.d}function wk(t){var e,A;return A=D9(t.h),A==32?(e=D9(t.m),e==32?D9(t.l)+32:e+20-10):A-12}function Iz(t,e){var A;if(t.c!=null){for(A=0;A<t.c.length;A++)if(e==t.c[A]&&t.d[A])return!0}return!1}function xz(t,e){var A,n;for(A=c(q2,V2,28,e,0,1),n=0;n<t.length;n++)t[n]&&(A[n]=new pu(t[n]));return A}function Nz(t,e){var A,n,P;for(P=new Wu(t.g),n=new Zt(P);n.a<n.c.a.length;)A=_t(n),Hv(e,A)&&n3(t.g,A)}function Gz(t,e,A){var n,P,r;for(ut(e,1),P=G(t.a,A),n=0;n<t.d.d.a.length;n++)r=I9(t.d,n),MW(r,e,P);ui(e)}function Oz(t,e,A,n,P){var r,i;if(i=t.length,r=A.length,e<0||n<0||P<0||e+P>i||n+P>r)throw At(new sh)}function qz(t){dk();var e;e=Al,(e.startsWith(nl)||e.startsWith(Pl)||e.startsWith(rl))&&uY(t,zE)}function gk(){SD(!0,\"Negative initial capacity\"),SD(!0,\"Non-positive load factor\"),i8(this)}function s8(){s8=v1,Sl=B(d(ft,1),Dt,2,6,[\"distance\",\"plane\",\"line\",\"torsion\",\"stereo\",\"binap\"])}function dk(){dk=v1,hc=B(d(F,1),m,6,15,[5258420,0]),zE=B(d(F,1),m,6,15,[11837695,14737632])}function ni(){ni=v1,YA=B(d(Oe,1),uA,6,15,[.29899999499320984,.5870000123977661,.11400000005960464])}function zz(t){return t>=3&&t<=4||t>=11&&t<=13||t>=19&&t<=31||t>=37&&t<=51||t>=55&&t<=84||t>=87&&t<=112}function rs(t){var e,A,n;e=~t.l+1&z0,A=~t.m+(e==0?1:0)&z0,n=~t.h+(e==0&&A==0?1:0)&Pn,t.l=e,t.m=A,t.h=n}function Kz(t,e){var A,n;for(A=t.a.length-1,t.c=t.c-1&A;e!=t.c;)n=e+1&A,t.a[e]=t.a[n],e=n;t.a[t.c]=null}function Jz(t,e){var A,n;for(A=t.a.length-1;e!=t.b;)n=e-1&A,t.a[e]=t.a[n],e=n;t.a[t.b]=null,t.b=t.b+1&A}function Bk(t,e,A){var n;return t.A.d.a.length!=0&&(n=I9(t.A,0),n.a<e)?(uU(t.A,0),n.b):t.sd(A)}function vk(t,e,A){var n;for(n=0;n<t.k[e];n++)if(X(t,t.j[e][n])!=6&&t.j[e][n]!=A)return!0;return!1}function oQ(t,e){var A,n;for(y1(e),n=e.Tb();n.cd();)if(A=n.dd(),!t.contains(A))return!1;return!0}function mT(t){var e,A;for(e=0,A=0;A<t.length;A++)e=(e<<5)-e+(zt(A,t.length),t.charCodeAt(A))|0;return e}function Yz(t){var e,A,n;for(n=new N0,A=0;A<t.r;A++)X8(n,t.K[A]);for(ZU(n,1/t.r),e=0;e<t.r;e++)FB(t.K[e],n)}function Fk(t,e){QM();var A,n;for(n=e-t,A=0;A<yl[t].length;A++)if(yl[t][A].b==n)return yl[t][A].a;return NaN}function e9(t,e){var A,n,P;for(P=t.b;P;){if(A=t.a.Rb(e,P.c),A==0)return P;n=A<0?0:1,P=P.a[n]}return null}function Xz(t,e){return t.a>e.a?1:t.a<e.a?-1:t.b>e.b?1:t.b<e.b?-1:0}function Zz(t,e){return t.c<e.c?-1:t.c>e.c?1:t.d<e.d?-1:t.d>e.d?1:0}function Wz(t,e){return zA(e,t.c)!=0?1:(t.j=zW(e),t.j==null?oK(e)?3:4:t.j.length==0?3:2)}function _z(t,e){return sr(t)==-1||sr(e)==-1||((sr(t)|sr(e))&1)!=0?3:sr(t)==sr(e)?1:2}function bT(t){var e,A;return A=(t[1]+t[0])/2,e=w.Math.abs(t[1]-t[0]),e>l1?A:A<0?A+l1:A-l1}function UQ(t){var e,A;for(A=!1,e=0;e<t.r;e++)(t.v[e]&512)!=0&&(t.D[e]=-1,A=!0);return A&&ui(t)!=null}function $z(t){qs();var e,A;for(ut(t,1),A=0,e=0;e<t.r;e++)t.D[e]==1?++A:A+=t.e[e]-t.k[e]+xt(t,e);return A}function az(t,e,A,n,P){var r;return r=R5(t,e),A&&rs(r),P&&(t=SJ(t,e),n?zn=Ai(t):zn=G0(t.l,t.m,t.h)),r}function kk(t,e,A,n){var P,r,i;for(P=c(E,I,6,n,15,1),i=QK(t.a,P),r=0;r<i;r++)e[A+r]=P[r]&d1;return i}function tK(t,e){var A,n,P;for(P=0,n=new Zt(e);n.a<n.c.a.length;)A=_t(n),P+=Sk(t,A.c,A.b)?t.b:0;return P}function mk(t,e){var A,n,P,r;for(n=e,P=0,r=n.length;P<r;++P)if(A=n[P],m3(t,A.hd()))return A;return null}function eK(t,e,A){var n,P;for(P=0;P<t.g[e].length;P++)n=t.g[e][P],t.k[n]==2&&(t.k[n]=1,t.j[n]=A<<24>>24)}function bk(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a=t.o[n]+e-t.k,t.i[n].b=t.p[n]+A-t.n}function t2(t,e,A,n){var P;return(t.G&1)!=0?!1:(P=G(t.$,n),e>P.c&&e<P.c+P.b&&A>P.d&&A<P.d+P.a)}function AK(t,e){var A;if(O(t.L,e)!=2)return!1;for(A=0;A<2;A++)if(EA(t.L,e,A)!=2)return!1;return!0}function nK(t,e){var A;for(A=0;A<O(t.R,e);A++)if(t.o[Nt(t.R,e,A)]==3&&EA(t.R,e,A)==1)return!0;return!1}function wA(t,e,A){var n,P,r,i;for(P=G(t.j,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function Pf(t,e,A){var n,P,r,i;for(P=G(t.k,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function PK(t,e){pf();var A,n,P;for(P=0,A=0,n=0;n<t.length;n++)P+=ir(t[n]&e[n]),A+=ir(t[n]|e[n]);return P/A}function jk(t,e){var A;for(A=0;A<t.f.length;A++)if(gt(t.f[A],e.f[A]))return Si(t.f[A],e.f[A])?-1:1;return 0}function Rk(t,e){var A;return A=BA(0,e,0,t.a.length,!0,t),V0(t.a[A][3])*w.Math.pow(V0(t.a[A][1]),.25)}function LQ(t,e){var A;e*2+1>=t.b.a.length||(LQ(t,2*e+1),A=2*e+2,A<t.b.a.length&&LQ(t,A),Xb(t,e))}function rf(t,e){var A;return A=O3(e,\"([/\\\\\\\\\\\\.\\\\*\\\\+\\\\?\\\\|\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}$^])\",\"\\\\\\\\$1\"),O3(t,A,\"\")}function pk(t,e){var A,n;for(n=c(F,m,6,e.length+1,15,1),A=0;A<e.length;A++)n[A]=e[A];return n[e.length]=t,n}function rK(t,e,A){var n,P;for(++t.b,n=new BD(t),n.p=A,P=t.g.length-1;P>=0;P--)FN(t,n,t.g[P],P,e[P]);return n}function sQ(t,e,A){var n;for(n=A-1;n>=0&&t[n]==e[n];n--);return n<0?0:Si(V(t[n],g1),V(e[n],g1))?-1:1}function e2(t,e){var A;for(A=0;A<e.k.length;A++)HD(t.k[A],e.k[A]);e.j==null?t.j=null:t.j=hL(e.j,e.j.length)}function Mk(t){var e;for(this.o=t,this.k=c(q2,V2,28,t.r,0,1),e=0;e<t.r;e++)this.k[e]=new pu(t.K[e]);this.n=NaN}function Ck(t,e){this.n=t,this.k=e,this.j=(e&16)==0,this.d=-1,this.e=0,this.o=0,this.a=-1,this.g=-1,this.c=0}function jT(){this.i=b1t++,this.n=null,this.j=null,this.g=null,this.d=null,this.b=null,this.k=null,this.a=null}function is(t,e,A,n,P){xr.call(this,t),this.a=c(Ut,Tt,6,2,15,1),this.a[0]=A,this.a[1]=n,this.b=e,this.c=P}function yQ(t,e,A,n,P,r,i){return o9(t,e,A,n,P,r==null?t.F[0][A]:r[t.F[0][A]],r==null?t.F[1][A]:r[t.F[1][A]],i)}function iK(t){var e,A,n,P,r;for(r=1,A=t,n=0,P=A.length;n<P;++n)e=A[n],r=31*r+(e!=null?fr(e):0),r=r|0;return r}function fK(t,e){var A;for(A=0;A<e.length;A++){if(e[A]<t.g[A].a.length-1)return++e[A],!0;e[A]=0}return!1}function DK(t,e){var A;for(A=0;A<O(t.i,e);A++)if(EA(t.i,e,A)==2&&X(t.i,_(t.i,e,A))==8)return!0;return!1}function uK(t){var e,A;if(A=ma(t),i0(t.A,t.a))for(e=0;e<t.A.r;e++)i0(t.A,e)&&nM(t,e,A);else nM(t,t.a,A);up(t.A)}function Hk(t,e,A){var n;K1(t),n=e==-1?new om(t._,t,t.F,t.B,t.D,t.C,t.A):new Bb(t._,t,t.V,e),GN(n,new Kd(t,e,A))}function Vk(t,e,A){if(t>e)throw At(new ZP(to+t+UM+e));if(t<0||e>A)throw At(new ng(to+t+H6+e+LM+A))}function fs(t,e){return(t.v[e]&b8)!=0?!0:t.D[e]<=1?!1:Lj(t,e)||t.D[e]==13||t.D[e]>=171}function Ek(t,e){var A;return t===e?!0:Yt(e,163)?(A=e,t.Oc()==A.Oc()&&t.Pc()==A.Pc()):t===e}function QK(t,e){var A;return t.a==t.b?-1:(A=w.Math.min(e.length,t.b-t.a),VG(e,t.c,t.a,A),t.a+=A,A)}function lQ(t){var e,A,n;for(n=t.a.a.length,e=new Array(n),A=0;A<n;A++)e[A]=hN(G(t.a,A).a,G(t.a,A).b);return e}function oK(t){var e;if(t.length<3){for(e=1;e<(J1(),a0).length;e++)if(a0[e].startsWith(t))return!0}return!1}function Sk(t,e,A){var n;for(n=0;n<e.length;n++)if(gt(V(t.f[n],e[n]),V(A[n],e[n])))return!1;return!0}function Ds(t,e){var A,n,P;for(y1(e),A=!1,n=t.Tb();n.cd();)P=n.dd(),e.contains(P)&&(n.ed(),A=!0);return A}function UK(t,e){var A,n,P;for(n=!1,A=1;A<4;A++)for(P=0;P<A;P++)t[P]>t[A]&&(n=!n),e[P]>e[A]&&(n=!n);return n}function us(t,e){var A;for(!e&&(e=$n(t.o)),e.U&=-249,A=0;A<e.r;A++)HD(e.K[A],t.k[A]);return t.p!=null&&iu(e,t.p),e}function Ik(t,e){return!(t.D[e]!=6||t.t[e]!=0||xt(t,e)+t.k[e]!=4)}function LK(t){var e;return t!=null&&(e=t.__java$exception,e)?e:Hd(t,TypeError)?new X7(t):new ts(t)}function sK(t,e){var A,n,P;for(n=0,A=0;A<t.V.r;A++)i0(t.V,A)&&++n;P=n!=0&&n!=t.V.r,(t.U&1)!=0?Att(t,e,P):rY(t,e,P)}function yK(t){var e,A,n;for(n=t.a.length,e=new Array(n),A=0;A<n;A++)e[A]=Gx((ee(A,t.a.length),t.a[A]));return e}function xk(t){var e;for(t.q=c(Pt,it,6,t.L.r,16,1),e=0;e<t.L.s;e++)t.q[K(t.L,0,e)]=!0,t.q[K(t.L,1,e)]=!0}function Nk(t,e,A,n){this.c=c(XA,re,6,n.c,14,1),this.b=c(XA,re,6,n.c,14,1),iY(n,t,e,this.c,this.b),this.a=A}function Gk(t,e,A,n){this.a=(o8(e),pP(t,c(F,m,6,e,15,1),0,e)),this.b=(o8(n),pP(A,c(F,m,6,n,15,1),0,n))}function z(t,e){var A;return L0(t)&&L0(e)&&(A=t-e,!isNaN(A))?A:_T(L0(t)?Se(t):t,L0(e)?Se(e):e)}function Ok(t,e){var A,n,P;for(y1(e),A=!1,n=t.Tb();n.cd();)P=n.dd(),e.contains(P)||(n.ed(),A=!0);return A}function qk(t){var e;return MD(t.a!=t.b),e=t.d.a[t.a],jd(t.b==t.d.c&&e!=null),t.c=t.a,t.a=t.a+1&t.d.a.length-1,e}function zk(t){var e;if(t.c!=0)return t.c;for(e=0;e<t.a.length;e++)t.c=t.c*33+(t.a[e]&-1);return t.c=t.c*t.e,t.c}function Pr(t,e){var A;return A=Be(t.b,e),A||(A=new Pp(t.k,t.q,t.s,e,t.n),We(t.b,Mn(e,e.length),A),A)}function RT(t,e,A){if(A){if(t.t[e]>8)return!1;++t.t[e]}else{if(t.t[e]<-8)return!1;--t.t[e]}return t.U=0,!0}function Kk(t,e,A){var n,P;return Ju(e,t.a.length),n=A.toArray(),P=n.length,P==0?!1:(o3(t.a,e,n),!0)}function lK(t,e){var A,n;for(n=c(gr,B9,26,t.length,0,1),A=0;A<t.length;A++)n[A]=t[A].a;return new P8(new OT(n,e))}function hK(t,e){var A,n;for(A=lk(t),n=0;n<qP.length;n++)A[n]!=0&&e8(e,\"\"+A[n]+\" * \"+qP[n]+\"   AtomType: \"+ME[n],2)}function TK(t,e,A,n,P,r,i,f){var D;for(D=A;r<i;)D>=n||e<A&&f.Rb(t[e],t[D])<=0?P[r++]=t[e++]:P[r++]=t[D++]}function cK(t,e,A,n,P){e==0||n==0||(e==1?P[n]=cs(P,A,n,t[0]):n==1?P[e]=cs(P,t,e,A[0]):iZ(t,A,P,e,n))}function wK(t,e){var A,n,P,r;if(e.length==0)return null;for(n=e,P=0,r=n.length;P<r;++P)A=n[P],t.D[A]=-1;return ui(t)}function pT(){uM();var t,e,A,n;if(!Wf&&!Wf)for(Wf=new Ci,e=pE,A=0,n=e.length;A<n;++A)t=gQ(e[A]),tr(Wf,t)}function hQ(){hQ=v1,FS=new bU(\"CONCURRENT\",0),Yo=new bU(\"IDENTITY_FINISH\",1),Vc=new bU(\"UNORDERED\",2)}function Jk(t){t.J=1,t.R=new Qu,t.$=new n1,t.U=new n1,t.s=c(Pt,it,6,t.L.r,16,1),t.w=new we,t.Q=0,t.C=-1,Tj(t)}function MT(t,e,A){t.w==null&&(t.w=c(F,u0,7,t.N,0,2)),A.sort(pe(Q0.prototype.ld,Q0,[])),t.w[e]=A,t.U=0,t.L=!0}function gK(t,e,A){var n,P,r;return r=1.02*kv(t.f[1],e)+kv(t.f[0],e),n=A/r,P=w.Math.pow(n,-6),n>=1?0:2*(P*P-P)}function CP(t,e){var A,n;for(n=new Zt(t);n.a<n.c.a.length;)if(A=_t(n),TJ(A,e))return!1;return t.a.push(e),!0}function dK(t){var e,A;for(e=new gD,A=0;A<t.b.length;A++)Ni(e,(J1(),a0)[t.c[A]]),t.b[A]>1&&Mx(e,t.b[A]);return e.a}function U1(t){var e,A;return t>-129&&t<128?(yB(),e=t+128,A=Fc[e],!A&&(A=Fc[e]=new nh(t)),A):new nh(t)}function sn(t){var e;return e=Te(t),e>wM?1/0:e<-34028234663852886e22?-1/0:e}function BK(t,e,A){var n,P;if(t.I){for(P=new Zt(t.I);P.a<P.c.a.length;)if(n=_t(P),n.Hb(e,A))return n}return null}function vK(t,e,A){var n,P;for(n=j1(ft,[DA,Dt],[13,2],6,[t.g,e],2),ut(t,7),P=0;P<t.g;P++)n[P]=CR(t,P,e,A);return n}function A9(){A9=v1,Bi=B(d(ft,1),Dt,2,6,[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\"])}function Qs(t){return N8(t)?ft:Ii(t)?R1t:Fu(t)?j1t:l3(t)||y3(t)?t.wd:t.wd||Array.isArray(t)&&d(TE,1)||TE}function Yk(t,e){return Er(),N8(t)?a9(t,e):Ii(t)?rr((y1(t),t),(y1(e),e)):Fu(t)?MN((y1(t),t),(y1(e),e)):t.Sb(e)}function ff(t,e){this.e=e,this.a=BT(t),this.a<54?this.f=$9(t):this.c=(Ce(),z(t,0)>=0?be(t):mP(be(E0(t))))}function CT(t,e){var A;t.c=e,t.a=IT(e),t.a<54&&(t.f=(A=e.d>1?Xr(e.a[0],e.a[1]):Xr(e.a[0],0),$9(e.e>0?A:E0(A))))}function HT(t,e){t.e=e.e,t.c=e.c,t.b=e.b,t.a=e.a==null?null:zD(e.a,e.a.length),t.d=e.d==null?null:zD(e.d,e.d.length)}function TQ(t,e){return t.e[e]-P0(t,e)+xt(t,e)<=0?!1:rA(t,e)?!0:t.p[e]==0}function cQ(t,e,A){var n,P;return n=G(t.g,t.q[e]),n.g==A?!1:(P=G(t.g,t.q[A]),P.g==e?!0:Iz(P,e))}function Xk(t,e,A){var n;for(n=0;n<t.k[e];n++)if(t.o[e][n]==2&&X(t,t.j[e][n])>6&&t.j[e][n]!=A)return!0;return!1}function FK(t,e,A,n){var P,r,i;for(P=e+1;P<A;++P)for(r=P;r>e&&n.Rb(t[r-1],t[r])>0;--r)i=t[r],t[r]=t[r-1],t[r-1]=i}function Zk(t,e,A,n,P,r){var i;this.a=A,this.b=n,this.c=P,this.d=r,i=T1t(t.o,e,A,n,P,r),this.e=i.a,this.f=i.b,this.g=i.c}function os(t,e,A,n,P){A<n?(this.a=t,this.b=e,this.c=A,this.d=n):(this.a=e,this.b=t,this.c=n,this.d=A),this.e=P}function Wk(t,e,A){if(t<0||e>A)throw At(new XP(to+t+H6+e+\", size: \"+A));if(t>e)throw At(new ZP(to+t+UM+e))}function kK(t,e){t.V!=e&&(K1(t),t.V=e,t.U=0,t.I=null,t.eb=w.Math.max(t.eb,4),P1(t.k),N1(t,new x1(t,1,!1)))}function mK(t,e){return t.a!=e.a?t.a<e.a?-1:1:t.b!=e.b?t.b<e.b?-1:1:t.c!=e.c?t.c<e.c?-1:1:0}function rr(t,e){return t<e?-1:t>e?1:t==e?t==0?rr(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function VT(t,e){var A;return z1(t)===z1(e)?!0:Yt(e,23)?(A=e,t.e==A.e&&t.d==A.d&&HO(t,A.a)):!1}function _k(t){var e,A;for(e=0,od(t.e),A=0;A<t.e.length;A++)(A==0||gs(t.e[A],t.e[A-1])!=0)&&++e,t.f[t.e[A].a]=e;return e}function bK(t){var e,A;if(t.$!=null)for(e=0;e<t.R.g;e++)eB(t.R,e,t.$[e]);if(t.i!=null)for(A=0;A<t.R.i;A++)Gd(t.R,A,t.i[A])}function jK(t){var e,A,n,P;for(t.a=15,P=(A=new oD(t.c).a.ad().Tb(),new UD(A));P.a.cd();)n=(e=P.a.dd(),e.jd()),Wtt(n)}function RK(t){var e,A,n,P;for(e=(t.g==null&&(t.g=(P=FY(t),hY(P))),t.g),A=0,n=e.length;A<n;++A);}function $k(t){var e,A,n,P;return t.e==0?t:(e=t.d,A=e+1,n=c(F,m,6,A,15,1),XF(n,t.a,e),P=new le(t.e,A,n),Cn(P),P)}function ET(t,e){var A,n,P,r;return A=t.F[0][e],n=t.F[1][e],P=t.K[n].a-t.K[A].a,r=t.K[n].b-t.K[A].b,w.Math.sqrt(P*P+r*r)}function ak(t,e,A){var n;return n=t.a.get(e),t.a.set(e,A===void 0?null:A),n===void 0?(++t.c,++t.b.b):++t.d,n}function yn(t,e){var A;return L0(t)&&L0(e)&&(A=t*e,N2<A&&A<UP)?A:Vn(fa(L0(t)?Se(t):t,L0(e)?Se(e):e))}function at(t,e){var A;return L0(t)&&L0(e)&&(A=t+e,N2<A&&A<UP)?A:Vn(mz(L0(t)?Se(t):t,L0(e)?Se(e):e))}function Y1(t,e){var A;return L0(t)&&L0(e)&&(A=t-e,N2<A&&A<UP)?A:Vn(Lk(L0(t)?Se(t):t,L0(e)?Se(e):e))}function pK(t,e,A,n){return(t.U&6)!=0&&A[1]!=n[1]?A[1]==0?-1:1:rr(e[A[0]].a+e[A[0]].b,e[n[0]].a+e[n[0]].b)}function tm(t,e,A){var n,P;for(n=e;t.k[A]==2&&t.p[A]==2&&A!=n;)P=A,A=t.j[A][0]==e?t.j[A][1]:t.j[A][0],e=P;return A==n?-1:A}function A2(t){var e,A;return t.includes(\"/csd/\")?null:(e=(A=kS[t],typeof A===ly?A:null),!e&&sO(t),new hd(e))}function wQ(t,e){var A;if(Ct(t.L,e)==0)return!1;for(A=0;A<Ct(t.L,e);A++)if(!V9(t.L,Nt(t.L,e,A)))return!1;return!0}function em(t,e,A,n,P){var r,i;return r=l8(t,e,A,n)+l8(t,e,n,P),i=r,T2(e,A,n,P,3)?i+=r>0?4:3:T2(e,A,n,P,4)&&(i+=r>0?6:4),i}function MK(t,e,A){var n,P;for(P=!1,n=0;n<e.e.length;n++)if(!XG(Xi(e.e,n))){P=!0;break}P||er(t.I,e),P1(t.k),NB(A.a)}function Df(t,e){var A,n;for(t.d[e]&&(t.d[e]=!1,--t.b),n=0;n<O(t.j,e);n++)A=Nt(t.j,e,n),t.e[A]&&(t.e[A]=!1,--t.c)}function uf(t,e){var A,n;for(n=c(F,m,6,t==null?1:t.length+1,15,1),A=0;A<n.length-1;A++)n[A]=t[A];return n[n.length-1]=e,n}function CK(t,e){var A,n,P,r;for(P=0,r=0;P<t.length&&r<e.length;){if(A=t[P],n=e[r],A==n)return!0;A<n?++P:++r}return!1}function HK(t){return t.c?(Ix(\"find was already called on this matcher\"),!1):(t.c=!0,t.b=PO(t.a),!!t.b)}function Am(t){if(t<f1)throw At(new I8(\"Overflow\"));if(t>Et)throw At(new I8(\"Underflow\"));return Bt(t)}function nm(){if(!wl)try{gi=new $j,wl=!0}catch(t){if(t=_1(t),Yt(t,19))q1();else throw At(t)}}function Pm(){this.b=iP(\"/resources/forcefield/mmff94/pbci.csv\"),this.a=iP(\"/resources/forcefield/mmff94/bci.csv\")}function rm(){rm=v1,qE=B(d(ft,1),Dt,2,6,[\"none\",\"pressed\",\"released\",\"clicked\",\"entered\",\"exited\",\"moved\",\"dragged\"])}function im(){im=v1,RE=B(d(ft,1),Dt,2,6,[\"Idorsia No\",\"Actelion No\",\"ID\",\"IDNUMBER\",\"COMPOUND_ID\",\"NAME\",\"COMPND\"])}function ir(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function fm(t){var e,A;return t.w.d.a.length==0?null:(e=Yt(t,118)?FQ(t.c,t.w.d.a.length):0,A=I9(t.w,e),uU(t.w,e),A)}function VK(t,e){var A;if(t.i==null)return!1;for(A=0;A<t.i.length;A++)if(!e.Hb(t.i[A].a,t.i[A].b))return!1;return!0}function EK(t,e,A,n,P){var r;return r=e.a[n],!(ZD(t.b,r)||A==P||o1(e,A,n)==-1||o1(e,n,P)==-1)}function Us(t,e,A){var n;for(n=0;n<t.g;n++)if(t.D[n]==A&&t.t[n]==0&&t.k[n]==0&&(t.t[n]=-1,t.U=0,--e,e==0))return 0;return e}function SK(t,e){var A,n;for(A=0,n=0;n<t.a.length;n++)if(t.a[n]>e.a[n]){A=1;break}else if(t.a[n]<e.a[n]){A=-1;break}return A}function IK(t,e){var A,n,P;for(A=0,od(t.b),n=0;n<e.length;n++)(n==0||gs(t.b[n],t.b[n-1])!=0)&&++A,P=t.b[n].a,e[P]=A;return A}function ln(t){var e,A,n,P;for(P=t.length,e=c(E,I,6,0,15,1),n=0;n<P;)A=_m(t,n,t.length),n+=A>=o0?2:1,La(e,A);return e}function Dm(t){var e,A;ut(t.V,15),e=c(F,m,6,t.V.r,15,1),A=Ur(t.V,e,!1,!0),A=ca(t,e,A),l$(t,e,A),t.M=e,t.L=OR(t.V,e,A)}function xK(t){var e,A,n;for(Ja(t),n=c(gr,DA,78,iz(t),0,2),e=0,A=0;A<t.q&&e<t.i;A++)(!t.t||!t.e[A])&&(n[e++]=t.n[A]);return n}function um(t,e,A,n,P){var r,i,f;for(vf(t,e,t.k[A],n,P),f=t.o,i=0;i<f.e[e];i++)r=f.j[e][i],f.e[r]==1&&vf(t,r,t.k[A],n,P)}function Qm(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.d=ZD(t.b,e.a[n]),this.g=bF(t.a,e,A,n,P),this.e=DY(t.a,e,A,n,P)}function om(t,e,A,n,P,r,i){NT(),this.c=OD(t,$V,this),this.d=e,this.a=-1,this.k=A,this.g=n,this.j=P,this.i=r,this.n=i,xp(this)}function ST(t,e,A,n,P,r,i,f,D,Q){rm(),vU.call(this,t,Q),this.b=e,this.c=A,this.g=n,this.i=P,this.f=r,this.d=i,this.a=f,this.e=D}function Um(t,e,A){this.b=new Hj(this,t.a),this.c=e,this.e=A,this.d=new Lh,Qh(this.d,this.b),WB(this,this.b.o,this.b.e),OF(this)}function n2(){P5();var t,e,A;A=q8t+++Date.now(),t=Bt(w.Math.floor(A*oE))&yi,e=Bt(A-t*N4),this.a=t^1502,this.b=e^ol}function P2(t){var e;return Array.isArray(t)&&t.yd===DD?yu(Qs(t))+\"@\"+(e=fr(t)>>>0,e.toString(16)):t.toString()}function Lm(t,e){var A;return A=e?YK(t):GT(t),A&&t.r?(q1(),\"\"+null.zd(),!0):!1}function sm(t,e,A){var n,P;for(P=t.Tb();P.cd();)if(n=P.dd(),z1(e)===z1(n)||e!=null&&SP(e,n))return A&&P.ed(),!0;return!1}function NK(t){var e;for(e=0;e<t.o.r;e++)if((t.a==null?NaN:t.a[e])>1e3||(t.a==null?NaN:t.a[e])>2e3)return!0;return!1}function GK(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>Gy&&A<t.a[n]-Gy)return!1;return!0}function ym(t,e){var A,n;for(n=0;n<t.$.a.length;n++)t.v=RQ(t.v,G(t.$,n));hW(t,e),A=.1*e,t.v.c-=A,t.v.d-=A,t.v.b+=2*A,t.v.a+=2*A}function lm(t,e){var A,n;return n=t.d.a.length,A=tr(t,e),t.d.a.length!=n?(Ft(t.b,e),t.a=null,n):(t.a==null&&gJ(t),t.a[A])}function hm(t,e){var A,n;for(n=0,ai(t,0,t.length,null),A=0;A<t.length;A++)(A==0||gs(t[A],t[A-1])!=0)&&++n,e[t[A].a]=n;return n}function OK(t,e,A){var n,P,r;for(P=0,r=0;r<t.a.length;r++)if(n=(1-A)*t.a[r]+A/t.a.length,P+=n,e<=P)return r;return t.a.length-1}function qK(t){var e,A,n;for(A=!1,n=!1,e=0;e<t.r;e++)t.B[e]!=0&&(t.B[e]=0,A=!0,t.D[e]==1&&(n=!0));return n&&(t.U=0),A}function IT(t){var e,A,n;return t.e==0?0:(e=t.d<<5,A=t.a[t.d-1],t.e<0&&(n=ek(t),n==t.d-1&&(--A,A=A|0)),e-=D9(A),e)}function zK(t){var e,A,n;return t<Jo.length?Jo[t]:(A=t>>5,e=t&31,n=c(F,m,6,A+1,15,1),n[A]=1<<e,new le(1,A+1,n))}function KK(t,e){return t.h==B8&&t.m==0&&t.l==0?(e&&(zn=G0(0,0,0)),_g((ti(),dc))):(e&&(zn=G0(t.l,t.m,t.h)),G0(0,0,0))}function nP(t){return t<3?0:t<11?1:t<19?2:t<37?3:t<55?4:0}function hn(t,e,A,n){var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=l1:P+=l1)):P=r>0?HA:uo,P}function JK(t,e,A){var n,P;for(n=V(A,g1),P=0;z(n,0)!=0&&P<e;P++)n=at(n,V(t[P],g1)),t[P]=Ot(n),n=O0(n,32);return Ot(n)}function Tm(t){var e,A,n;for(n=new C0,A=new Zt(t);A.a<A.c.a.length;)e=_t(A),q(q(n,K6+e.Lb()+'\"'+e.Kb()+J6),nn);return n.a}function YK(t){var e,A,n;for(A=new U8,e=0;e<t.L.length;e++)n=Bj(t.L[e]),n&&(e<t.Y?(Ft(A.g,n),A.d=-1):(Ft(A.f,n),A.d=-1));return A}function XK(t){var e;if(TO(t,t.a))for(e=0;e<t.u.s;e++)i0(t.u,K(t.u,0,e))&&i0(t.u,K(t.u,1,e))&&XR(t,e);else XR(t,t.a);Ej(t.u)}function cm(t,e,A,n){var P,r;for(ut(t,1),P=0;P<n;P++)for(r=0;r<t.e[e[P]];r++)if(t.j[e[P]][r]==e[P+1]){A[P]=t.n[e[P]][r];break}}function wm(t,e,A){var n,P;for(t.U=e,n=0;n<t.R.g;n++)t.f[n]=A[n],t.db[n]=0,t.ib[n]=!1;for(P=0;P<t.R.i;P++)t.o[P]=0,t.q[P]=!1}function $0(t,e,A){A>=0&&A<=190&&(A==151||A==152?(t.D[e]=1,t.B[e]=A-149):(t.D[e]=A,t.B[e]=0),t.v[e]&=-2013265921,t.U=0)}function En(t,e){var A,n;return A=((t.v[e]&b8)>>>27)-1,A==-1&&(A=(n=t.D[e]<v9.length?v9[t.D[e]]:null,n==null?6:n[n.length-1])),A}function nt(t,e){var A,n;for(A=e,n=0;e!=0;)t.d==0&&(t.f=(t.c[++t.e]&63)<<11,t.d=6),n|=(o0&t.f)>>16-A+e,t.f<<=1,--e,--t.d;return n}function PP(t,e,A){var n,P,r,i;for(r=e+A,Mt(e,r,t.length),i=\"\",P=e;P<r;)n=w.Math.min(P+fP,r),i+=EG(t.slice(P,n)),P=n;return i}function xT(t){var e,A;for(A=0,e=0;e<t.length;e++)A<(zt(e,t.length),t.charCodeAt(e))&&(A=(zt(e,t.length),t.charCodeAt(e)));return A}function be(t){Ce();var e,A;return A=Ot(t),e=Ot(j0(t,32)),e!=0?new lv(A,e):A>10||A<0?new RA(1,A):US[A]}function ZK(t){var e=/^#?0\\.(0+)$/.exec(t);if(!e)throw new Error(\"unimplemented DecimalFormat with pattern \"+t);return e[1].length}function gm(t,e,A,n){T6(),this.v=OD(t,(e.v[A]&512)!=0?\"Atom Query Features (Multiple)\":\"Atom Query Features\",this),B1t(this,e,A,n)}function dm(t,e,A,n,P,r,i,f,D,Q){this.i=t,this.a=e,this.f=A,this.o=n,this.c=P,this.k=r,this.j=i,this.p=f,this.d=D,this.n=Q,ga(this)}function NT(){NT=v1,EE=B(d(ft,1),Dt,2,6,[\"None\",\"One electron (duplet)\",\"Two electrons (triplet)\",\"Two electrons (singulet)\"])}function r2(t,e){var A;if(t.f==null)e.a+=\" atoms:<null>\";else for(q(e,\" atoms:\"+t.f[0]),A=1;A<t.f.length;A++)q(e,\",\"+t.f[A])}function Bm(){var t;!LP&&(LP=new Yg),(LP.b&1)!=0&&LP.a!=15&&q1(),t=1&~LP.b,t!=0&&(Stt(LP,t),t==1&&jK(LP))}function WK(t,e,A){var n;n=new Wr(A),ut(n,7),e6(n,!1),ut(n,7),t.k=e,t.d=n,i8(t.g.a),i8(t.i.a),i8(t.j.a),i8(t.f),i8(t.e),B_(t)}function vm(t,e,A){var n,P,r;for(r=0,n=c(F,m,6,O(t.b,e)-1,15,1),P=0;P<O(t.b,e);P++)_(t.b,e,P)!=A&&(n[r++]=_(t.b,e,P));return n}function _K(t,e,A){var n,P,r;for(r=0,n=c(F,m,6,O(t.c,e)-1,15,1),P=0;P<O(t.c,e);P++)_(t.c,e,P)!=A&&(n[r++]=_(t.c,e,P));return n}function Fm(t,e){var A,n,P,r;return A=e>>5,e&=31,P=t.d+A+(e==0?0:1),n=c(F,m,6,P,15,1),r5(n,t.a,A,e),r=new le(t.e,P,n),Cn(r),r}function Qf(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=lu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function km(t,e){var A,n;for(n=0;n<t.g[e].length;n++)if(A=t.g[e][n],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&t.k[A]==0)return!0;return!1}function mm(t,e,A){var n;for(n=0;n<t.s;n++)if((t.F[0][n]==e&&t.F[1][n]==A||t.F[0][n]==A&&t.F[1][n]==e)&&t.I[n]!=512)return n;return-1}function $K(t){An();var e,A,n;return n=new o7,A=(n.j=null,k6(n,new un(new Sr(t)))?n.j:null),e=n.f==null?Tu(n.j):n.f,dN(new sA(A),e)}function n9(t,e){var A;return L0(t)&&L0(e)&&(A=t%e,N2<A&&A<UP)?A:Vn((o6(L0(t)?Se(t):t,L0(e)?Se(e):e,!0),zn))}function aK(t){var e;return e=typeof t,e1(e,m2)||e1(e,s9)||e1(e,Mf)?!0:t!=null&&t.$implements__java_lang_Comparable}function Ls(t,e){for(var A=0;!e[A]||e[A]==\"\";)A++;for(var n=e[A++];A<e.length;A++)!e[A]||e[A]==\"\"||(n+=t+e[A]);return n}function GT(t){var e,A;if((t.U&4)==0||t.L==null)return null;for(A=new U8,e=0;e<t.L.length;e++)e<t.Y?Lg(A,t.L[e]):Ug(A,t.L[e]);return A}function gQ(t){var e,A;return z(t,-129)>0&&z(t,128)<0?(lB(),e=Ot(t)+128,A=kc[e],!A&&(A=kc[e]=new Ph(t)),A):new Ph(t)}function tJ(){var t,e;if(t=(e=LO(\"RGROUPS=\\\\((\\\\d+) (\\\\d+).*\\\\)\"),e?new d7(e):null),t)return new T7(t);throw At(new BF)}function bm(t,e,A){for(t.j==null&&(t.j=c(Kt,t1,6,t.o.s,15,1),dx(t.j));A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;t.j[e]=A}function pA(t,e,A,n){J1();var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=l1:P+=l1)):P=r>0?HA:uo,P}function eJ(t){var e;try{return qY((new pT,t.a))}catch(A){if(A=_1(A),Yt(A,19))return e=A,ur(e,(q1(),k9),\"\"),-999;throw At(A)}}function OT(t,e){U8.call(this),t!=null&&(MP(this.g,new JD(new lU(t),0,e)),MP(this.f,new JD(new lU(t),e,t.length))),this.c=bQ(this)}function ss(t,e){return t.e>e.e?1:t.e<e.e?-1:t.d>e.d?t.e:t.d<e.d?-e.e:t.e*sQ(t.a,e.a,t.d)}function AJ(t){return t>=48&&t<48+w.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function nJ(t,e){var A,n;for(A=e;A<t.length;A++){if(n=(zt(A,t.length),t.charCodeAt(A)),n==32||n==9)return-1;if(n==61)return A}return-1}function PJ(t,e){var A,n,P,r;return n=t.a.length-1,A=e-t.b&n,r=t.c-e&n,P=t.c-t.b&n,jd(A<P),A>=r?(Kz(t,e),-1):(Jz(t,e),1)}function jm(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=lu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function qT(t,e){var A;if(e==null||e.length==0)return null;for(A=2;A<e.length-2;A++)if(e[A]==32)return ds(t,e,e,A+1);return ds(t,e,null,0)}function Rm(){Rm=v1,FE=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[0,0,1]),B(d(F,1),m,6,15,[0,2,3]),B(d(F,1),m,6,15,[1,3,3])])}function P9(){P9=v1,Uc=new vD(\"ONE_ONE\",0),sc=new vD(\"ONE_TWO\",1),Lc=new vD(\"ONE_THREE\",2),wi=new vD(\"ONE_FOUR\",3),Y2=new vD(\"ONE_X\",4)}function pm(t,e,A){this.s=OD(t,i0(e,e.F[0][A])&&i0(e,e.F[1][A])?\"Bond Query Features (Multiple)\":\"Bond Query Features\",this),e1t(this,e,A)}function rJ(t,e){e=e||{};var A=(typeof e.maxSphereSize===ko?5:e.maxSphereSize)|0,n=(typeof e.type===ko?0:e.type)|0;return _X(t,A,n)}function iJ(t,e){t.a=e;var A=t.Kc(),n=t;function P(){n.Jc()}function r(){n.Ic()}var i={fireOk:P,fireCancel:r};A.setEventConsumer(i)}function xe(t){w6();var e;if(!isNaN(t)&&!isFinite(t)||isNaN(t))throw At(new _P(\"Infinite or NaN\"));Xtt(this,(e=t,e.toPrecision(20)))}function r9(t,e){return y1(t),e==null?!1:e1(t,e)?!0:t.length==e.length&&e1(t.toLowerCase(),e.toLowerCase())}function fJ(t){var e;return _3(t.Vb(),(e=aB(new Cw,LF(new Mw,new pw,new Gw,B(d(El,1),_e,96,0,[(hQ(),Yo)]))),F3(e,new Hw)))}function DJ(){var t,e;if(K2==null)for(e=new WA(!1),K2=c(gr,B9,26,F9.length,0,1),t=0;t<F9.length;t++)K2[t]=tf(e,F9[t]),ut(K2[t],1)}function Mm(t){Ce(),t.length==0?(this.e=0,this.d=1,this.a=B(d(F,1),m,6,15,[0])):(this.e=1,this.d=t.length,this.a=t,Cn(this))}function of(t,e){var A,n;for(A=0,n=0;n<t.k[e];n++)t.o[e][n]==2&&(X(t,t.j[e][n])==7||X(t,t.j[e][n])==8||X(t,t.j[e][n])==16)&&++A;return A}function Cm(t,e,A){var n,P,r,i,f;for(P=0,i=0,f=0;f<t.g[e].length;f++)n=t.g[e][f],t.k[n]==A&&(r=1<<t.j[n],(i&r)==0&&(i|=r,++P));return P}function ys(t,e){var A,n,P,r,i;for(i=0,n=1,r=new Zt(t.a);r.a<r.c.a.length;)P=_t(r),A=P.dc(e,null,\"\"+n,!1),A!=0&&(i+=A,++n);return i}function dQ(t){this.j=t&-4,this.q=t&3,this.o=(t&32)!=0,this.e=(t&64)!=0,this.i=(t&8)!=0,this.d=2,(t&4)!=0&&(this.d|=1),this.i&&(this.d&=-3)}function uJ(t,e,A,n){var P,r;if(t.d.length>t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.c[P];else for(r=G(t.b,e),P=0;P<t.a;P++)A[n+P]=t.c[r[P]]}function QJ(t,e,A,n){var P,r;if(t.d.length<=t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.d[P];else for(r=G(t.b,e),P=0;P<t.a;P++)A[n+P]=t.d[r[P]]}function Hm(t,e){var A,n;if(A=!0,t.a.length!=e.a.length)return!1;for(n=0;n<t.a.length;n++)if(t.a[n]!=e.a[n]){A=!1;break}return A}function oJ(t,e){var A,n,P;if(n=sr(t),P=sr(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=2;break;case 5:A=1}return A}function UJ(t,e){var A,n,P;if(n=sr(t),P=sr(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=1;break;case 5:A=2}return A}function LJ(){var t;return Go!=0&&(t=Date.now(),t-rS>2e3&&(rS=t,Oo=w.setTimeout(Cx,10))),Go++==0?(mq((bh(),wc)),!0):!1}function Pi(t){switch(J1(),t){case 7:case 8:case 9:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:return!0}return!1}function Vm(t,e,A,n){var P;P=new ls(t,e),kL(P,A,dt(e,A)==1?2:3),kL(P,n,dt(e,n)==2?1:2),t.g[A]=!0,t.g[n]=!0,Yi(t.e,P)&&TL(t.d,P)}function sJ(){var t,e;if(bl==null&&bl==null){for(t=c(G1t,A0,203,Io.length,0,1),e=0;e<Io.length;e++)t[e]=new $p(Io[e][0],Io[e][1]);bl=t}}function HP(t){var e;if(t<Bi.length)return Bi[t];for(e=new C0;t>=Bi.length;)q(e,Bi[Bi.length-1]),t-=Bi.length-1;return q(e,Bi[t]),e.a}function yJ(t,e){var A,n;for(n=new T3(t.a.length),A=0;A<t.a.length;A++)n.a[A]=t.a[A]|e.a[A];return n.a.length==1?n.b=n.a[0]:n.b=Mu(n.a),n}function lJ(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Zn(e.c[A]),t.c[A]),0)||gt(V(e.b[A],t.c[A]),t.b[A]))&&(n=!1);return n}function hJ(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Zn(t.c[A]),e.c[A]),0)||gt(V(t.b[A],e.c[A]),e.b[A]))&&(n=!1);return n}function Em(t,e){var A,n,P;for(P=0,n=0;n<t.length;n++){for(A=t[n];e[P]<A;)if(++P,P==e.length)return!1;if(e[P]>A)return!1}return!0}function TJ(t,e){var A,n,P;if(e.e.length!=t.e.length)return!1;for(n=Uk(t),P=Uk(e),A=0;A<n.length;A++)if(n[A]!=P[A])return!1;return!0}function BQ(t,e){var A,n;if(Ju(e,t.b),e>=t.b>>1)for(n=t.c,A=t.b;A>e;--A)n=n.b;else for(n=t.a.a,A=0;A<e;++A)n=n.a;return new tB(t,e,n)}function Sm(t,e){var A,n,P,r;for(n=0,P=0,r=0,A=0;A<t.V.r;A++)(!e||i0(t.V,A))&&(P+=mt(t.V,A),r+=Rt(t.V,A),++n);return n>1?new Hg(P/n,r/n):null}function cJ(t,e){pf();var A,n,P,r;for(r=0,n=0,P=0,A=0;A<t.length;A++)r+=ir(t[A]&e[A]),n+=ir(t[A]),P+=ir(e[A]);return r/w.Math.sqrt(n*P)}function wJ(t,e,A,n){var P,r,i;for(r=0,i=0;i<t.i[e].length;i++)if(P=(1-n)*t.e[e][i]+n/t.i[e].length,r+=P,A<=r)return i;return t.i[e].length-1}function Im(t,e,A,n){var P;for(P=0;P<A.length;P++)A[P]||(A[P]=!0,n[e]=P,e+1==n.length?Ft(t.b,Mn(n,n.length)):Im(t,e+1,A,n),A[P]=!1)}function xm(t,e,A){var n,P,r,i;for(i=i=c(Pt,it,6,t.r,16,1),r=IZ(t,e,A,i),P=c(F,m,6,r,15,1),r=0,n=0;n<t.r;n++)i[n]&&(P[r++]=n);return P}function VP(t,e,A){this.j=t,this.i=A,this.e=c(F,m,6,e,15,1),this.k=c(F,m,6,e,15,1),this.a=c(Ut,Tt,6,e,15,1),this.b=c(Ut,Tt,6,e,15,1)}function Nm(t){this.b=-1,this.a=c(F,m,6,t.length,15,1),PA(t,0,this.a,0,t.length),this.a.length==1?this.b=this.a[0]:this.b=Mu(this.a)}function gJ(t){var e,A,n,P;for(t.a=c(F,m,6,t.d.a.length,15,1),e=0,P=new Zt(t.b);P.a<P.c.a.length;)n=_t(P),t.a[A=u9(t,n),A<0?-1:A]=e++}function dJ(t,e){var A,n,P;for(t.c=e,P=new Zt(t.g);P.a<P.c.a.length;)A=_t(P),ve(A,e);for(n=new Zt(t.f);n.a<n.c.a.length;)A=_t(n),ve(A,e)}function ls(t,e){var A;for(this.b=t,this.a=c(F,m,6,(t.i.i+15)/16|0,15,1),A=0;A<t.i.i;A++)this.a[A>>4]|=w.Math.min(3,dt(e,A))<<2*(A&15)}function BJ(t){var e,A,n,P,r;for(A=$Z(new FP(238,238,238)),n=yi&A.a,P=0;P<WU(t);P++)for(r=0;r<$U(t);r++)e=RB(t,P,r),tL(t,P,r,(On&e)+n)}function zT(t,e){var A,n,P,r;return A=e/2|0,P=t<0,t=w.Math.abs(t),r=e/32|0,n=w.Math.min(A-1,Ot(E1(w.Math.round(t*A/(t+r))))),P?A+n:n}function Gm(t,e,A){var n;return n=e==0?m0+t[0]-t[t.length-1]:t[e]-t[e-1],A>z6&&A<fA?n-=2*w.Math.cos(A+C2):n-=.5*w.Math.cos(A+C2),n}function hs(t,e){var A;return e==null||!Yt(e,28)?!1:(A=e,w.Math.abs(A.a-t.a)+w.Math.abs(A.b-t.b)+w.Math.abs(A.c-t.c)<1e-6)}function Om(){Om=v1,Mo=B(d(Pt,1),it,6,16,[!1,!1,!1,!1,!1,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!0,!0])}function vJ(t,e){return N8(t)?!!lE[e]:t.xd?!!t.xd[e]:Ii(t)?!!yE[e]:Fu(t)?!!sE[e]:!1}function vQ(t,e){switch(e){case 0:return OY(t,!1);case 1:return FJ(t);case 2:return $Y(t);case 3:return GJ(t);case 4:return wY(t)}return null}function qm(t){var e;e=t.R.c*(t.r!=0?t.r:G8(t.L)),t.Y=e*M1t,t.T=e*p1t,t.S=e*.38,t.W=e*.47,t.X=Bt(e*t.J*C1t+.5),t.V=e*.12,t.Z=e*.4,t.A=e*.5+.5}function FJ(t){try{return t=$n(t),ps(t),Me(new bA(t))}catch(e){if(e=_1(e),Yt(e,27))return q1(),null;throw At(e)}}function KT(t,e){var A;A=BQ(t,e);try{return dL(A)}catch(n){throw n=_1(n),Yt(n,147)?At(new XP(\"Can't get element \"+e)):At(n)}}function kJ(t,e){var A,n;for(n=0;n<t.b.i.i;n++)t.b.g[n]&&(A=3&t.a[n>>4]>>2*(n&15),g0(e,n,A==1?1:A==2?t.b.g[n]&&!A8(t.b.i,n)?386:2:A==3?4:16))}function mJ(t,e,A){var n,P;for(n=new bA(us(A,null)),Me(n),zu(n,n.jb),t.d=c(F,m,6,e.g.length,15,1),P=0;P<t.d.length;P++)t.d[P]=Cd(A,e.g[P].a)}function fr(t){return N8(t)?mT(t):Ii(t)?Bt((y1(t),t)):Fu(t)?(y1(t),t?1231:1237):l3(t)?t.ob():y3(t)?jD(t):t&&t.hashCode?t.hashCode():jD(t)}function bJ(t){var e,A;for(e=0;e<t.R.g;e++)(!t.M[e]||t.db[e]==3)&&(t.bb[e]=0);for(A=0;A<t.R.i;A++)(c1(t.R,A)!=1||t.o[A]==0||t.o[A]==3)&&(t.n[A]=0)}function jJ(t,e){var A,n;if((t.v[e]&gn)!=0){for(n=(ut(t,7),t.q),A=0;A<n.j.a.length;A++)if(G(n.k,A).length==6&&wA(n,A,e))return!0}return!1}function i2(t,e){var A,n;if(t.D[e]==7&&t.e[e]+xt(t,e)>=3){for(A=0;A<t.e[e];A++)if(n=t.j[e][A],t.D[n]==8&&t.e[n]+xt(t,n)==1)return!0}return!1}function FQ(t,e){var A,n;if(bd(e>0),(e&-e)==e)return Bt(e*xs(t,31)*4656612873077393e-25);do A=xs(t,31),n=A%e;while(A-n+(e-1)<0);return Bt(n)}function Ts(t){var e,A;bD(this);try{if(t)for(A=new Zt(t);A.a<A.c.a.length;)e=_t(A),Ft(this,e.Gb())}catch(n){if(n=_1(n),!Yt(n,19))throw At(n)}}function aA(t,e,A){A>=-1&&A<=14&&(t.v[e]&=-2013265921,t.v[e]|=1+A<<27,t.D[e]==6&&(A==-1||A==0||A==2||A==4)&&(t.v[e]&=-49,A==2&&(t.v[e]|=16)))}function zm(t,e,A,n){var P,r,i,f;for(r=-1,i=-1,f=0;f<Ct(t.e,e);f++)if(P=_(t.e,e,f),P==A||P==n)if(i==-1)i=f;else{r=f;break}return t.a[e][r][i]}function Km(t,e){var A,n,P,r,i;for(A=-1,n=-1,r=0;r<O(t.k,e);r++)P=_(t.k,e,r),i=(EA(t.k,e,r)<<24)+t.a[P],!t.b[P]&&(A==-1||n<i)&&(A=r,n=i);return A}function RJ(t,e){var A,n,P,r;for(n=1,r=0;r<t.u.length;r++)n*=Bh(t.u[r],e.d[r]);for(A=Pr(t.i,e.d),P=0;P<t.v.length;P++)n*=xh(A,P,e.i[P]);return n}function JT(t,e){var A,n,P,r;for(r=t.size(),e.length<r&&(e=lu(new Array(r),e)),P=e,n=t.Tb(),A=0;A<r;++A)P[A]=n.dd();return e.length>r&&(e[r]=null),e}function Jm(t,e){return w.Math.acos((t.a*e.a+t.b*e.b+t.c*e.c)/(w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)*w.Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c)))}function cs(t,e,A,n){Lr();var P,r;for(P=0,r=0;r<A;r++)P=at(yn(V(e[r],g1),V(n,g1)),V(Ot(P),g1)),t[r]=Ot(P),P=j0(P,32);return Ot(P)}function rP(t,e){var A;for(A=0;A<t.w;A++)e-=16;for(e<0&&q1();e>15;)qt(t,1,1),qt(t,15,4),e-=16,++t.w;qt(t,1,1),qt(t,e,4)}function YT(){Rm(),this.c=new SA(24,29),this.i=c(F,m,6,24,15,1),this.b=c(F,m,6,2,15,1),this.e=c(F,m,6,2,15,1),this.f=c(F,m,6,2,15,1)}function pJ(t,e,A){return kN(t>=0&&t<=1114111),t>=o0?(e[A++]=55296+(t-o0>>10&1023)&d1,e[A]=56320+(t-o0&1023)&d1,2):(e[A]=t&d1,1)}function MJ(t){var e;if(t.r==1)return!0;for(e=1;e<t.r;e++)if(t.K[e].a!=t.K[0].a||t.K[e].b!=t.K[0].b||t.K[e].c!=t.K[0].c)return!0;return!1}function CJ(t,e,A){var n,P;for(P=0;P<O(t.j,e);P++)if(n=_(t.j,e,P),X(t.j,n)==8&&O(t.j,n)==1)return A&&R1(t.j,n)==0&&b0(t.j,n,-1),!0;return!1}function Ym(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>Gy&&A<t.a[n]-Gy)return A<t.a[n]/2^t.b[n]<e.b[n]?1:-1;return 0}function XT(t,e,A,n){var P,r;for(r=0;r<t.g[e].length;r++)P=t.g[e][r],t.f[P]&&(t.o[P]==1||t.o[P]==2)&&t.k[P]==0&&(t.k[P]=n<<24>>24,t.j[P]=A<<24>>24)}function HJ(t){var e;return _3(t.Vb(),(e=aB(new xw,Bq(new Sw,new Iw,new qw,new zw,B(d(El,1),_e,96,0,[(hQ(),Vc),Yo]))),F3(e,new Nw)))}function ws(t,e){var A;if(t.k[e]==3&&e<t.g&&f0(t.q,e)&&(t.q&&e<t.g?UA(t.q,e):0)>=5){for(A=0;A<t.k[e];A++)if(oi(t,t.n[e][A]))return t.n[e][A]}return-1}function VJ(t){var e,A,n;for(A=!1,e=1;e<t.e.a.length;e++)for(n=0;n<e;n++)G(t.e,n).a>G(t.e,e).a&&(A=!A),G(t.e,n).b>G(t.e,e).b&&(A=!A);return A}function EJ(t){var e,A;for(e=0;e<t.f.r;e++)!t.b[e]&&Ct(t.f,e)==0&&(A=new VP(t.f,1,!1),t.b[e]=!0,A.e[0]=e,A.a[0]=0,A.b[0]=0,A.k[0]=0,CP(t.d,A))}function SJ(t,e){var A,n,P;return e<=22?(A=t.l&(1<<e)-1,n=P=0):e<=44?(A=t.l,n=t.m&(1<<e-22)-1,P=0):(A=t.l,n=t.m,P=t.h&(1<<e-44)-1),G0(A,n,P)}function ZT(t,e,A,n,P,r,i,f){var D,Q;n&&(D=n.a[0],D&&ZT(t,e,A,D,P,r,i,f),XJ(t,A,n.c,P,r,i,f)&&e.add(n),Q=n.a[1],Q&&ZT(t,e,A,Q,P,r,i,f))}function gs(t,e){var A;for(A=0;A<t.c;A++)if(gt(t.d[A],e.d[A]))return Si(t.d[A],e.d[A])?-1:1;return n0(t.d[t.c],e.d[t.c])?0:Si(t.d[t.c],e.d[t.c])?-1:1}function Xm(t,e,A){var n,P,r;for(r=e.length,n=new VP(t.f,r,!1),n.a[0]=0,n.b[0]=0,P=0;P<r;P++)n.k[P]=128-r,n.e[P]=e[P];r<8?kQ(n):U1t(t,n,e,A),CP(t.d,n)}function Zm(t,e){var A=new Array(e),n;switch(t){case 14:case 15:n=0;break;case 16:n=!1;break;default:return A}for(var P=0;P<e;++P)A[P]=n;return A}function Wm(t){var e;return e=new iD,t.a<=t.b?(e.c=t.a,e.b=t.b-t.a):(e.c=t.b,e.b=t.a-t.b),t.c<=t.d?(e.d=t.c,e.a=t.d-t.c):(e.d=t.d,e.a=t.c-t.d),e}function qt(t,e,A){for(;A!=0;)t.t==0&&((!t.r||t.v!=63)&&(t.v+=64),Ye(t.u,t.v&d1),t.t=6,t.v=0),t.v<<=1,t.v=Ot(J(t.v,V(e,1))),e=O0(e,1),--A,--t.t}function IJ(t,e,A,n,P,r,i,f,D,Q){var o;return o=WT(I5(t,e,A,n,P,r,i,f,D)),!Q&&o==-1&&(o=WT(I5(t,e,A,n,P,r,i,7,7)),o==-1&&(o=WT(I5(t,e,A,n,P,3,3,7,7)))),o}function WT(t){var e,A,n,P;for(ec||M$(),P=S0,n=O1,A=0;A<13;A++){if(e=P>=po.length||t<po[P]?-1:t==po[P]?0:1,e==0)return P;P=e<0?P-n:P+n,n=n/2|0}return-1}function xJ(t,e){An();var A;return typeof e===ko&&(e=!0),typeof e===m2?A=new sA(tf(new WA(e),t)):typeof e===Mf&&(A=new sA(wz(new WA(!1),t,e))),A}function _m(t,e,A){var n,P;return n=Xi(t,e++),n>=55296&&n<=56319&&e<A&&gN(P=(zt(e,t.length),t.charCodeAt(e)))?o0+((n&1023)<<10)+(P&1023):n}function NJ(t){var e;return t==null?!1:(e=typeof t,e1(e,m2)||e1(e,s9)||e1(e,Mf)||t.$implements__java_io_Serializable||Array.isArray(t))}function GJ(t){var e;try{return e=MR(new k5(t)),Me(new qA(e,8))}catch(A){if(A=_1(A),Yt(A,27))return q1(),null;throw At(A)}}function f2(t,e){var A,n,P;return A=t.a,n=t.b,P=t.c,t.a=A*e[0][0]+n*e[1][0]+P*e[2][0],t.b=A*e[0][1]+n*e[1][1]+P*e[2][1],t.c=A*e[0][2]+n*e[1][2]+P*e[2][2],t}function ds(t,e,A,n){var P,r,i,f,D;return e==null?null:(DL(t,e,0),P=nt(t,4),f=nt(t,4),P>8&&(P=f),r=nt(t,P),i=nt(t,f),D=new SA(r,i),DM(t,D,e,A,n),D)}function $m(t,e,A){var n,P,r;if(t.i!=null)for(n=0;n<t.i.length;n++)r=t.p[n]*e,P=t.o[n]-A,t.i[n].a=t.k+r*w.Math.sin(P),t.i[n].b=t.n+r*w.Math.cos(P)}function OJ(t){var e,A,n,P,r,i;for(A=0,P=t.a,r=0,i=P.length;r<i;++r)n=P[r],n&&++A;for(t.b=c(F,m,6,A,15,1),A=0,e=0;e<t.a.length;e++)t.a[e]&&(t.b[A++]=e)}function R0(t,e){t.b!=e&&e>=0&&e<34&&(e!=t.b||e==20||e==33)&&(e!=19||(t.a.U&4)!=0)&&(e!=21||(t.a.U&8)!=0)&&!(e==0||e==17||e==1)&&(t.b=e,DQ(t.a,e),xD(t.n))}function qJ(t,e){switch(e){default:case 0:return vQ(t.a,0);case 1:return vQ(t.a,1);case 2:return vQ(t.a,2);case 3:return vQ(t.a,3);case 4:return vQ(t.a,4)}}function zJ(t){switch(typeof t){case Mf:return mT(t);case s9:return Bt((y1(t),t));case m2:return y1(t),t?1231:1237;default:return t==null?0:jD(t)}}function KJ(t){var e,A,n;t.b==t.c&&(n=t.a.length,A=Hz(w.Math.max(8,n))<<1,t.b!=0?(e=bN(t.a,A),SF(t,e,n),t.a=e,t.b=0):bi(t.a,A),t.c=n)}function EP(t,e,A,n,P){var r,i,f;P&&(r=t.vb(n),i=r/2+(t.wb()/8|0),f=t.wb()/2|0,(n==\"+\"||n==\"-\")&&(f=f*2/3),Ft(t.$,new lA(e-i,A-f,2*i,2*f))),t.K||t.tb(n,e,A)}function JJ(t){var e,A;for(A=!1,e=0;e<t.V.g;e++)M1(t.V,e)!=0&&Fn(t.V,e)&&(A||(K1(t),A=!0),tA(t.V,e,M1(t.V,e),!1));A&&EL(t,w.Math.max(t.eb,1))}function YJ(t,e){var A,n,P;return P=t.h-e.h,P<0||(A=t.l-e.l,n=t.m-e.m+(A>>22),P+=n>>22,P<0)?!1:(t.l=A&z0,t.m=n&z0,t.h=P&Pn,!0)}function XJ(t,e,A,n,P,r,i){var f,D;return!(e.pd()&&(D=t.a.Rb(A,n),D<0||!P&&D==0)||e.qd()&&(f=t.a.Rb(A,r),f>0||!i&&f==0))}function D2(t,e,A,n){var P;return P=c(Ut,Tt,6,3,15,1),P[0]=t.k[n].a-t.k[A].a,P[1]=t.k[n].b-t.k[A].b,P[2]=t.k[n].c-t.k[A].c,P[0]*e[0]+P[1]*e[1]+P[2]*e[2]>0}function ZJ(t,e){var A;for(A=0;A<t.j.g;A++)t.d[A]&&yf(t.j,A)==0&&(!e||X(t.j,A)==5&&R1(t.j,A)<0||X(t.j,A)==6||X(t.j,A)==14||rA(t.j,A)&&R1(t.j,A)>0)&&Df(t,A)}function ri(t){var e;return e=w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),e==0?(q1(),t.a=1,t.b=0,t.c=0,t):(t.a/=e,t.b/=e,t.c/=e,t)}function ii(t){return J1(),!(t==1||t==6||Pi(t)||t==2||t==10||t==18||t==36||t==54||t==86||t>103)}function am(t){var e,A,n,P,r,i;for(i=iP(t),r=i.length,e=i[0].length,P=j1(F,[u0,m],[7,6],15,[r,e],2),A=0;A<r;A++)for(n=0;n<e;n++)P[A][n]=i[A][n].a;return P}function tb(t){var e;return e=0,t==2?e=1:t>=3&&t<=10?e=2:t>=11&&t<=18?e=3:t>=19&&t<=36?e=4:t>=37&&t<=54&&(e=5),(t>=21&&t<=30||t>=39&&t<=48)&&(e*=10),e}function WJ(t,e){e.j==1?(t.a!=-1&&($0(t.e,t.a,t.k),O9(t.e,t.a,t.g),aA(t.e,t.a,t.j),Je(t.e,t.a,t.i),IP(t.e,t.a,t.n)),N9(t.c)):e.j==0&&(ett(t),N9(t.c))}function Bs(t){var e,A;return isNaN(t)?{l:0,m:0,h:524160}:(e=(A=new ArrayBuffer(8),new Float64Array(A)[0]=t,new Uint32Array(A)),Xr(e[0]|0,e[1]|0))}function eb(t){var e,A;if(t.L){for(e=0;e<t.r;e++)if(gt(V(t.C[e],Pe),0)){for(t=new Wr(t),A=e;A<t.r;A++)gt(V(t.C[A],Pe),0)&&(t.D[A]=-1);ui(t)}}return t}function Ab(t,e,A,n,P,r){this.f=t,P!=0&&P!=1?this.c=!0:(this.a=e,this.b=A,this.d=r,this.e=new n1,n!=-1&&AQ(this,n,A-1),n!=-1&&P==1&&AQ(this,so,A+1))}function y8(t,e){K1(t),o5(t.V,t.hb,t.kb,e,0,-1,0,null)&&(t.t!=-1&&(t.t=-1,N1(t,new x1(t,4,!0))),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)))}function _J(t){var e,A,n,P,r,i;for(r=-1,i=Ge,e=0;e<t.V.r;e++)n=t.hb-mt(t.V,e),P=t.kb-Rt(t.V,e),A=w.Math.sqrt(n*n+P*P),A<24&&i>A&&(i=A,r=t.M[e]);return r}function $J(t,e){var A,n,P;for(n=0;n<t.k[e];n++)if(t.o[e][n]!=1){for(A=t.j[e][n],P=0;P<t.k[A];P++)if(t.o[A][P]==1&&of(t,t.j[A][P])!=0)return!0}return!1}function Uf(t,e){var A,n;for(e.w=null,e.u=null,e.L=t.L,e.r=0,A=0;A<t.r;A++)Nn(t,e,A,0,0);for(e.s=0,n=0;n<t.s;n++)o9(t,e,n,0,0,t.F[0][n],t.F[1][n],!1);t.Zb(e)}function aJ(t,e){var A,n;for(A=c(F,u0,7,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=c(F,m,6,t[n].length,15,1),PA(t[n],0,A[n],0,t[n].length));return A}function tY(t,e){var A,n;for(A=c(E,m8,10,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=c(E,I,6,t[n].length,15,1),PA(t[n],0,A[n],0,t[n].length));return A}function nb(t,e,A){var n,P,r,i,f;if(r=G1(t,e),n=en(t,e,r,A),i=((t.v[e]&b8)>>>27)-1,i==-1){for(f=eQ(t.D[e]),P=0;P<f.length-1&&r>f[P]+n;)++P;i=f[P]}return i+n-r}function eY(t,e){var A;if(t.b.length!=e.b.length)return t.b.length<e.b.length?-1:1;for(A=0;A<t.b.length;A++)if(t.b[A]!=e.b[A])return t.b[A]<e.b[A]?-1:1;return 0}function AY(t,e){var A,n,P;t.j||e.startsWith(\"COUNTS\")&&(A=gA(e,ue(e,7)),n=L1(hA(e,7,ue(e,7)),f1,Et),P=L1(hA(e,A,ue(e,A)),f1,Et),t.j=new SA(n,P))}function nY(t,e){var A,n,P,r,i,f;for(i=new N0,f=t.c.length==2?t.c:t.b,n=f,P=0,r=n.length;P<r;++P)A=n[P],X8(i,e.k[A]);return ZU(i,.5),ri(FB(i,Z0(e,t.f[4]))),i}function PY(t,e){var A,n;if(n=!1,t.f.t==null)for(t.f.t=c(F,m,6,e.length,15,1),A=t.f.t.length;--A>=0;)t.f.t[e[A]]=A;return n=Cp(t,e,0,n),n=Cp(t,e,1,n),n}function rY(t,e,A){var n;if(t.eb==6){if(A)for(n=0;n<t.V.r;n++)Wn(t.V,n,!i0(t.V,n));U9(new a8(A?4:0),t.V),A&&s3(t.V)}_5(t.G,e,new lA(0,0,ND(t.k),Y9(t.k)),o0|t.T)}function Pb(t,e){var A,n,P;if(S3(e),A=e/31|0,n=t.a.length,A>=n)return-1;for(P=(t.a[A]|0)&Et<<e%31;P==0;){if(++A>=n)return-1;P=t.a[A]|0}return A*31+WL(P)}function Lf(t,e,A,n){var P;if(e==0){A<0?n.a=t.T:n.a=-t.T,n.b=0;return}P=w.Math.atan(A/e),e<0&&(P+=l1),n.a=-(t.T*w.Math.sin(P)),n.b=t.T*w.Math.cos(P)}function rb(t,e){var A,n;A=BQ(t,e);try{return n=dL(A),jF(A),n}catch(P){throw P=_1(P),Yt(P,147)?At(new XP(\"Can't remove element \"+e)):At(P)}}function iY(t,e,A,n,P){var r,i,f,D;for(i=A,f=0,D=i.length;f<D;++f)r=i[f],P[t.d[r]]=at(P[t.d[r]],e[r]<<t.b[r]),n[t.d[r]]=at(n[t.d[r]],Wt(Ec[t.a[r]],t.b[r]))}function fY(t){var e=t.backingJsObject;if(e&&e.stack){var A=e.stack,n=e+nn;return A.substring(0,n.length)==n&&(A=A.substring(n.length)),A.split(nn)}return[]}function kQ(t){var e,A;for(e=l1-l1*(t.e.length-2)/t.e.length,A=1;A<t.e.length;A++)t.a[A]=t.a[A-1]+w.Math.sin(e*(A-1)),t.b[A]=t.b[A-1]+w.Math.cos(e*(A-1))}function DY(t,e,A,n,P){var r;return r=dj(t,e,A,n,P),r<0?hp(t,e,A,n,P,bj(t,e,A,n,P)):w.Math.abs(V0(t.b[r][4]))<.001?hp(t,e,A,n,P,V0(t.b[r][5])):V0(t.b[r][4])}function uY(t,e){var A,n,P,r,i;for(r=0;r<WU(t);r++)for(i=0;i<$U(t);i++)for(A=RB(t,r,i),P=A&yi,n=0;n<hc.length;n++)if(P==hc[n]){tL(t,r,i,(On&A)+e[n]);break}}function _T(t,e){var A,n,P,r,i,f,D,Q;return D=t.h>>19,Q=e.h>>19,D!=Q?Q-D:(P=t.h,f=e.h,P!=f?P-f:(n=t.m,i=e.m,n!=i?n-i:(A=t.l,r=e.l,A-r)))}function QY(t,e,A){var n,P;if(t.k=e,t.n=A,t.i!=null)for(P=t.i.length,t.o=c(Ut,Tt,6,P,15,1),t.p=c(Ut,Tt,6,P,15,1),n=0;n<P;n++)t.o[n]=t.i[n].a,t.p[n]=t.i[n].b}function vs(t,e){var A,n,P;if(e0(t.R,e)<2)return!1;if(O(t.R,e)==2)return!0;for(A=0,P=0;P<O(t.R,e);P++)n=Nt(t.R,e,P),eA(t.R,n)&&(A+=dt(t.R,n)-1);return A>1}function Dr(){Dr=v1,Fl=new Ei(\"CREATE\",0),vl=new Ei(\"CHANGE_DIF\",1),Bl=new Ei(\"CHANGE_ABS\",2),kl=new Ei(\"REMOVE\",3),So=new Ei(\"NO_CHANGE\",4),ml=new Ei(\"UNKNOWN\",5)}function ib(t,e){var A,n,P;return A=e.hd(),P=e.jd(),n=t.get(A),!(!(z1(P)===z1(n)||P!=null&&SP(P,n))||n==null&&!t.containsKey(A))}function oY(t,e,A){var n,P,r,i,f,D,Q;if(t.e!=null)for(r=t.e,f=0,Q=r.length;f<Q;++f)n=r[f],kd(n,e,A);if(t.b!=null)for(P=t.b,i=0,D=P.length;i<D;++i)n=P[i],kd(n,e,A)}function fb(t,e,A){var n,P,r,i,f;for(r=!0,f=G(t.g,e).a,i=Km(t,f);i!=-1;)n=_(t.k,f,i),P=Nt(t.k,f,i),i=Km(t,n),cF(t,new K3(n,P,f,A&&r,A&&i==-1),++e),f=n,r=!1}function Db(t,e){var A,n;if(e!=null)for(ut(t.j,1),A=0;A<t.j.g;A++)e[A]!=0&&(n=Cu(t.j,A,G1(t.j,A)),e[A]==15?n>=0&&aA(t.j,A,0):e[A]!=j3(t.j,A)&&aA(t.j,A,e[A]-n))}function $T(t){var e,A,n;if(A=new n1,e=t.e.indexOf(p0(10)),e==-1)Ft(A,t.e);else{for(n=0;e!=-1;)Ft(A,hA(t.e,n,e)),n=e+1,e=SN(t.e,10,n);Ft(A,GD(t.e,n))}return A}function SP(t,e){return N8(t)?e1(t,e):Ii(t)||Fu(t)?(y1(t),z1(t)===z1(e)):l3(t)?t.mb(e):y3(t)?zg(t,e):t&&t.equals?t.equals(e):z1(t)===z1(e)}function UY(t,e,A){var n,P;return n=c(F,m,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=JQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>sM?3:P<0?2:1}function LY(t,e,A){var n,P;return n=c(F,m,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=JQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>sM?3:P<0?1:2}function gA(t,e){var A;if(e==-1)return-1;for(A=e+1;A<t.length;A++)if(zt(A,t.length),t.charCodeAt(A)!=32&&(zt(A,t.length),t.charCodeAt(A)!=9))return A;return-1}function sY(t){var e,A;for(t.b=null,e=0;e<t.g.i;e++)Ru(t.g,e)&&(!t.b&&(t.b=new n1),A=new eU,A.a=K(t.g,0,e),A.b=K(t.g,1,e),A.d=$h(t.g,e),A.c=M3(t.g,e),Ft(t.b,A))}function ub(){ap();var t,e,A,n,P,r,i;for(bD(this),r=new MU,A=mE,n=0,P=A.length;n<P;++n)e=A[n],t=tf(new JP,e),ut(t,31),cX(r,t),i=new Gg(t),i.a=G8(i.b),this.a.push(i)}function mQ(t){var e,A,n;for(Dm(t),btt(new V7,GT(t)),n=c(F,m,6,t.L.length,15,1),e=0;e<t.V.r;e++)A=t.M[e],tA(t.V,e,M1(t.L[A],n[A]),M1(t.V,e)==0||Fn(t.V,e)),++n[A]}function yY(t,r){var A=fS;A||(A=Z.createElement(\"canvas\"),fS=A);var n=\"\"+t.b+\"px \"+t.a,P=A.getContext(\"2d\");P.font=n;var r=P.measureText(r);return r.width}function Qb(t,e){var A,n,P,r,i;for(r=wj(t,t.F[0][e])||wj(t,t.F[1][e])?5:3,n=0;n<2;n++)A=t.F[n][e],P=dt(t,e)+(i=En(t,A),i+en(t,A,i,t.D[A]))-G1(t,A),r>P&&(r=P);return r}function lY(t,e,A){var n,P,r,i,f;if(n=Nt(t.k,e,A),i=_(t.k,e,A),t.e[n]!=0){for(f=8*t.q[e]+1,P=G(t.g,t.q[e]).c,r=0;r<P.length&&i!=P[r];r++)++f;return f}return 8*t.q[i]}function hY(t){var e,A,n,P;for(e=\"D4\",A=\"nB\",P=w.Math.min(t.length,5),n=P-1;n>=0;n--)if(e1(t[n].d,e)||e1(t[n].d,A)){t.length>=n+1&&t.splice(0,n+1);break}return t}function TY(t){var e,A,n,P;for(P=0,n=null,A=new Zt(t);A.a<A.c.a.length;)e=_t(A),P<e.b[0].e.length*e.b[1].e.length&&(P=e.b[0].e.length*e.b[1].e.length,n=e);return n}function bQ(t){var e,A,n;for(n=new Zt(t.g);n.a<n.c.a.length;)if(e=_t(n),e.L)return!0;for(A=new Zt(t.f);A.a<A.c.a.length;)if(e=_t(A),e.L)return!0;return!1}function Sn(t,e){var A;return L0(t)&&L0(e)&&(A=t/e,N2<A&&A<UP)?A<0?w.Math.ceil(A):w.Math.floor(A):Vn(o6(L0(t)?Se(t):t,L0(e)?Se(e):e,!1))}function cY(t,e){var A,n,P;for(t.g=c(F,m,6,t.k.r,15,1),A=Vj(t.k,t.g,e,!0),t.q=c(J8t,A0,179,A,0,1),P=!0,n=0;n<A;n++)P=P&!!(t.q[n]=l1t(t.r,t.k,t.g,n));return P}function wY(t){var e;try{return t=$n(t),ps(t),e=MR(new k5(t)),Me(new qA(e,8))}catch(A){if(A=_1(A),Yt(A,27))return q1(),null;throw At(A)}}function sf(t,e,A){var n,P,r;if(P=G1(t,e),P-=en(t,e,P,t.D[e]),A&&(P-=t.e[e]-t.k[e]),r=eQ(t.D[e]),P<=r[0])return-1;for(n=1;n<r.length;n++)if(r[n]>=P)return r[n];return P}function ob(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.j=bF(t.a,e,A,n,P),this.g=d2(t.d,e,A,n),this.i=d2(t.d,e,P,n),this.d=_j(t.n,e,A,n,P),this.e=_j(t.n,e,P,n,A)}function Ub(t,e,A,n,P,r,i){var f,D,Q,o,L;if(o=P[r],Q=r==i-1,f=Q?n:0,L=Zm(f,o),n!=10&&B(d(t,i-r),e[r],A[r],f,L),!Q)for(++r,D=0;D<o;++D)L[D]=Ub(t,e,A,n,P,r,i);return L}function jQ(t,e){var A,n;for(A=0;A<t.s;A++)for(n=0;n<2;n++)t.F[n][A]==e&&(t.I[A]=512);iQ(t,t.A[e]),t.D[e]=-1,t.w!=null&&(t.w[e]=null),t.u!=null&&(t.u[e]=null),Rf(t),t.U=0}function gY(t,e){var A,n,P,r;for(A=t.e[e],r=c(F,m,6,A,15,1),P=0;P<A;P++)r[P]=(t.j[e][P]<<16)+P;for(r.sort(pe(Q0.prototype.ld,Q0,[])),n=0;n<A;n++)r[n]&=d1;return r}function dY(t,e){var A,n,P;for(P=new C0,n=0;n<t.a.a.length;n++)P.a.length!=0&&(P.a+=\"+\"),A=new bA(G(t.a,n)),q(P,Me(A)),e&&(P.a+=\" \",q(P,zu(A,!0)));return P.a}function BY(t,e){if(t.b==-1)t.a=c(q1t,A0,173,e,0,1),t.b=e,t.c=e-1;else do t.c=t.c==0?t.b-1:t.c-1;while(t.a[t.c]&&t5(t.a[t.c]));return!t.a[t.c]&&(t.a[t.c]=new eh),t.c}function aT(t,e,A){var n,P,r;for(P=t.ad().Tb();P.cd();)if(n=P.dd(),r=n.hd(),z1(e)===z1(r)||e!=null&&SP(e,r))return A&&(n=new jU(n.hd(),n.jd()),P.ed()),n;return null}function In(t,e,A,n){V9(t.L,o1(t.L,A,n))?($1(t,-3),t.qb(e),$1(t,t.Q)):t.p[A]!=t.p[n]?yX(t,e,A,n):t.p[A]!=0?($1(t,t.p[A]),t.qb(e),$1(t,t.Q)):t.qb(e)}function yf(t,e){var A,n,P,r,i;if(!t.L||t.w==null||t.w[e]==null)return nb(t,e,t.D[e]);for(i=0,n=t.w[e],P=0,r=n.length;P<r;++P)A=n[P],i=w.Math.max(i,nb(t,e,A));return i}function Lb(){Lb=v1,p8=Bt(w.Math.round(Bt(w.Math.round((Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*2))))),vn=(Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*21)}function RQ(t,e){var A,n,P,r;return P=w.Math.min(t.c,e.c),r=w.Math.min(t.d,e.d),n=w.Math.max(t.c+t.b,e.c+e.b)-P,A=w.Math.max(t.d+t.a,e.d+e.a)-r,new lA(P,r,n,A)}function vY(t,e,A,n){vg();var P=Ll;jt=e,T1=A,m1t=n;function r(){for(var i=0;i<P.length;i++)P[i]()}if(t)try{HS(r)()}catch(i){t(e,i)}else HS(r)()}function sb(t,e,A,n){var P,r,i;for(P=0;P<t.r;P++)(!n||(t.v[P]&512)!=0)&&(i=t.S[P]*e,r=t.R[P]-A,t.K[P].a=t.V+i*w.Math.sin(r),t.K[P].b=t.W+i*w.Math.cos(r));n&&(t.U&=7)}function t5(t){var e,A,n,P,r;if(!t.d)if(t.b==-1)t.d=!0;else{for(r=!1,A=t.a,n=0,P=A.length;n<P;++n)if(e=A[n],!e)r=!0;else if(!t5(e))return!1;t.d=!r}return t.d}function FY(t){var e,A,n,P,r,i;if(P=fY(t),r=c(uS,c0,116,0,0,1),e=0,n=P.length,n==0)return r;for(i=dp(P[0]),e1(i.d,S4)||(r[e++]=i),A=1;A<n;A++)r[e++]=dp(P[A]);return r}function yb(t,e,A){for(var n,P;A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;n=e.a,A!=(t.j==null?-1:t.j[n])&&(P=A-(t.j==null?-1:t.j[n]),JW(t,e,l1*P/180),bm(t,n,A))}function pQ(t){var e,A,n;if(!t.a)return null;for(t.e||FR(t,1),e=null,n=new Zt(t.a);n.a<n.c.a.length;)A=_t(n),!A.b&&(!e||e.e>A.e)&&(e=A);return e?e.b=!0:t.a=null,e}function lb(t){var e,A,n,P;for(n=-1,P=Et,e=0;e<t.k.g;e++)t.b[e]||(A=t.a[e],ye(t.k,e)&&(A+=dn),O(t.k,e)==0?A+=1056964608:A+=O(t.k,e)<<24,P>A&&(P=A,n=e));return n}function lf(t,e,A){var n,P;if(e<t.g&&f0(t.q,e)){for(P=(ut(t,7),t.q),n=0;n<P.j.a.length;n++)if(!(G(P.k,n).length!=A||!wA(P,n,e))&&t.b[n]==0)return!0}return!1}function kY(t,e){var A,n;if(n=X1(e),A=!1,n==null||!n.startsWith(\"$RXN\"))throw At(new H1(\"'$RXN' tag not found\"));return e1(n,qC)?A=Ya(t,e,!1):A=stt(t,e,!1),A}function hb(t,e,A){if(t.f[e])return 0;if(t.a){if(Ct(t.j,e)!=3)return 0}else if(Ct(t.j,e)>3)return 0;return X(t.j,e)==6?(A&&b0(t.j,e,1),2):X(t.j,e)==5?4:0}function tn(t,e,A){var n,P,r,i,f,D,Q,o;for(i=-1,P=dP(t,t.r,t.s,Bn),f=Ge,D=P*P/12,n=0;n<t.r;n++)Q=t.K[n].a,o=t.K[n].b,r=(e-Q)*(e-Q)+(A-o)*(A-o),r<D&&r<f&&(f=r,i=n);return i}function Tb(t,e){var A,n,P,r,i,f;for(n=t,P=0,r=n.length;P<r;++P)if(A=n[P],e.k[A]!=0)return!1;for(i=R1(e,t[0]),f=1;f<t.length;f++)if(R1(e,t[f])!=i)return!1;return!0}function cb(t,e,A){var n,P;return t.L.r==0?null:(t.v=Wj(t),n=t.R.c*G8(t.L),P=new ry(t.v,e,n,A),P.c==1&&P.a==0&&P.b==0?P=null:(Gu(P,t.R),Yu(P,t.v)),N5(t,e,n,A),P)}function mY(t){var e,A,n,P;for(ut(t,1),P=0,e=0;e<t.r;e++)n=t.B[e]!=0?t.B[e]:wr[t.D[e]],P+=n+xt(t,e)*wr[1],t.D[e]>=171&&t.D[e]<=190&&(A=t.e[e],A>2&&(P-=(A-2)*wr[1]));return P}function wb(t,e,A){var n,P,r,i,f,D;for(P=0,r=0;r<t.k[e];r++)if(n=t.j[e][r],n!=A){for(i=0,f=0;f<t.k[n];f++)D=t.j[n][f],D!=e&&eA(t,t.n[n][f])&&t.k[D]>2&&++i;i==2&&++P}return P}function bY(t,e){var A,n,P,r,i,f,D,Q;for(D=-1,n=0,i=0;i<2;i++)for(A=t.F[i][e],f=0;f<t.e[A];f++)P=t.j[A][f],P!=t.F[1-i][e]&&(r=t.n[A][f],Q=NQ(t,r,P),n<Q&&(n=Q,D=r));return D}function jY(t,e){var A,n,P,r,i,f;for(A=new n1,n=0;n<e.r;n++)if(e.e[n]>1)for(P=0;P<e.e[n];P++)for(i=e.j[n][P],r=P+1;r<e.e[n];r++)f=e.j[n][r],Ft(A,new Qm(t,e,i,n,f));return A}function RY(t,e){var A,n,P,r;for(A=1;A<e.r;A++)for(n=0;n<A;n++)!t[A][n]&&(t[A][n]=new nk(t9(A,n),(r=e.D[A],(r<(k2(),JA).length?JA[r]:2)+(P=e.D[n],P<JA.length?JA[P]:2))))}function pY(t){var e,A,n,P,r;for(r=new Ld,A=t,n=0,P=A.length;n<P;++n)e=A[n],r.a?q(r.a,r.b):r.a=new bn(r.d),Jg(r.a,e);return r.a?r.e.length==0?r.a.a:r.a.a+(\"\"+r.e):r.c}function e5(t,e){var A,n,P;return P=-1,n=-1,(t.G&128)!=0||(O8(t.L,e)&&(P=De(t.L,e),n=OA(t.L,e)),A=ws(t.L,e),A!=-1&&(P=gP(t.L,A),n=ef(t.L,A)),P!=-1&&P!=0&&(P|=n<<8)),P}function A5(t,e,A,n,P,r,i,f){var D,Q;for(Q=1;Q<f;Q++){for(D=i[Q];D<i[Q+1];D++)A[D]=r[P[D]]+(A[n[D]]<<8);if(kR(t,e,A,n,P,i,Q),A[1]!=A[2])return!0;Q>1&&Kj(A,n,i,Q)}return!1}function gb(t,e,A){var n,P;if(A[0]=0,t[e]==43||t[e]==45){for(P=t[e],n=1,++A[0];t[e+A[0]]==P;)++n,++A[0];return n==1&&an(t[e+1]&d1)&&(n=t[e+1]-48,++A[0]),P==43?n:-n}return 0}function n5(t,e){var A,n,P;for(P=c(Oe,uA,6,t.d.length,15,1),n=c(Oe,uA,6,t.d.length,15,1),A=0;A<t.d.length;A++)P[A]=tq(FL(e,t.a[A]),t.e[A]),n[A]=Tl[t.e[A]];return new lg(P,n)}function P5(){P5=v1;var t,e,A,n;for(Mc=c(Ut,Tt,6,25,15,1),Cc=c(Ut,Tt,6,33,15,1),n=152587890625e-16,e=32;e>=0;e--)Cc[e]=n,n*=.5;for(A=1,t=24;t>=0;t--)Mc[t]=A,A*=.5}function db(t,e){var A,n,P,r,i;for(P=-1,r=Ge,n=0;n<t.e.length;n++)i=l1*t.e[n]/180,A=w.Math.abs(e-i),A>l1&&(A=m0-A),A/=10+w.Math.sqrt(t.b[n]),r>A&&(r=A,P=n);return P}function ur(t,e,A){var n,P,r,i,f;for(RK(t),P=(t.i==null&&(t.i=c(cE,c0,27,0,0,1)),t.i),r=0,i=P.length;r<i;++r)n=P[r],ur(n,e,\"\t\"+A);f=t.e,f&&ur(f,e,A)}function MY(t,e,A){var n,P,r;if(n=A[e],n!=-1&&v0(t.a,n)!=0&&mX(t,e,n,A)){if(r=v0(t.b,e),P=v0(t.a,n),r==3){if(P==1||P==2)return 5}else if(P==3||JY(t,e,A)==(r==P))return 5}return 0}function CY(t){var e,A,n;return z(t,0)>=0?(A=Sn(t,Jf),n=n9(t,Jf)):(e=j0(t,1),A=Sn(e,5e8),n=n9(e,5e8),n=at(Wt(n,1),V(t,1))),J(Wt(n,32),V(A,g1))}function HY(t,e){Lr();var A,n;for(n=(Ce(),X2),A=t;e>1;e>>=1)(e&1)!=0&&(n=RP(n,A)),A.d==1?A=RP(A,A):A=new Mm(cR(A.a,A.d,c(F,m,6,A.d<<1,15,1)));return n=RP(n,A),n}function Fs(t,e){var A,n;for(y1(e),n=t.b.a.length,Ft(t.b,e);n>0;){if(A=n,n=(n-1)/2|0,t.a.Rb(G(t.b,n),e)<=0)return Zr(t.b,A,e),!0;Zr(t.b,A,G(t.b,n))}return Zr(t.b,n,e),!0}function u2(t,e){var A,n,P,r;for(c1(t.j,e)==1&&(g0(t.j,e,2),t.k+=2),P=0;P<2;P++)for(A=K(t.j,P,e),t.d[A]=!1,r=0;r<O(t.j,A);r++)n=Nt(t.j,A,r),t.e[n]&&(t.e[n]=!1,--t.c)}function VY(t){var e,A,n,P,r;for(A=0;A<t.j.i;A++)if(dt(t.j,A)==2){for(P=0;P<2;P++)if(e=K(t.j,P,A),X(t.j,e)<=8){for(r=0;r<O(t.j,e);r++)if(n=Nt(t.j,e,r),t.e[n]){Df(t,e);break}}}}function EY(t,e){var A,n,P,r,i,f;if(!(e.length<=0||e[0]<64))for(DL(t,e,0),f=nt(t,4),P=nt(t,1)==1,r=nt(t,1)==1,A=0;A<t.g.g;A++)i=nt(t,f),n=P,P&&r&&(n=nt(t,1)==1),tA(t.g,A,i,n)}function SY(t,e,A,n,P){var r,i;for(r=0,i=0;i<P;i++)r=at(r,Y1(V(e[i],g1),V(n[i],g1))),t[i]=Ot(r),r=O0(r,32);for(;i<A;i++)r=at(r,V(e[i],g1)),t[i]=Ot(r),r=O0(r,32)}function IY(t,e,A,n,P){var r,i;if(r=t3(t.a,t.b,P),i=QL(t3(e.a,e.b,P)),n.containsKey(r)){if(A)throw At(new yU(\"Duplicate key \"+r));n.put(r,null.zd(n.get(r)))}else n.put(r,i)}function xY(t){var e,A,n;for(e=0;e<t.R.g;e++)!E9(t.R,e)&&t.db[e]==3&&rL(t.R,e,!0);for(A=0;A<t.R.i;A++)t.o[A]==3&&(n=dt(t.R,A),n==1?rL(t.R,K(t.R,0,A),!0):n==2&&g0(t.R,A,386))}function r5(t,e,A,n){var P,r,i;if(n==0)PA(e,0,t,A,t.length-A);else for(i=32-n,t[t.length-1]=0,r=t.length-1;r>A;r--)t[r]|=e[r-A-1]>>>i,t[r-1]=e[r-A-1]<<n;for(P=0;P<A;P++)t[P]=0}function B0(t,e){var A,n,P;if(e<0||e>999){q(t.a,\"  ?\");return}for(A=!1,n=0;n<3;n++)P=e/100|0,P==0?n==2||A?Ye(t.a,48):Ye(t.a,32):(Ye(t.a,48+P&d1),A=!0),e=10*(e%100)}function NY(t){var e,A,n,P,r;if(r=Up(t),!r)return null;for(kD(r,t.a),n=G(r,r.a.length-1),t.n=Cs(t.d,n),P=new n1,A=new Zt(r);A.a<A.c.a.length;)e=_t(A),Ft(P,Cs(t.d,e));return nX(P)}function Bb(t,e,A,n){NT(),this.c=OD(t,$V,this),this.d=e,this.e=A,this.a=n,this.k=X(this.e,n),this.g=ge(this.e,n),this.j=G9(this.e,n),this.i=jA(this.e,n),this.n=eP(this.e,n),xp(this)}function i5(t,e,A,n,P){var r,i,f,D;for(r=-1,i=-1,D=0;D<Ct(t.e,e);D++)if(f=Nt(t.e,e,D),f==A||f==n)if(r==-1)r=D;else{i=D;break}t.a[e][i][r]==0&&(t.a[e][i][r]=P,t.d[e]+=P,++t.c[e])}function GY(t,e){var A,n,P;return P=c(F,m,6,2,15,1),o1(t,e[1],e[2])!=-1?(P[0]=e[2],P[1]=e[1]):(A=c(F,m,6,16,15,1),n=B2(t,A,e[1],e[2],15,null,null),P[0]=A[1],P[1]=A[n-1]),P}function OY(t,e){try{return e?(t=$n(t),e6(t,!0),Ytt(t),Me(new bA(t))):Me(new bA(t))}catch(A){if(A=_1(A),Yt(A,27))return q1(),null;throw At(A)}}function vb(t,e,A){g6(),YB.call(this,t,e),this.j=1,this.k=10,this.n=400,this.f=400,this.i=!0,this.d=\"black\",this.b=new n1,this.a=new n1,this.c=new C0,this.e=new h3(12),this.g=A,++J2}function qY(t){var e,A,n,P,r;for(A=0,Li(t),ut(t,7),e=0;e<t.g;e++)try{r=Uy(t,e,6241),P=(n=u9(Wf,gQ(r)),n<0?-1:n),P!=-1&&(A+=yc[P])}catch(i){if(i=_1(i),!Yt(i,19))throw At(i)}return A}function p0(t){var e,A;return t>=o0?(e=55296+(t-o0>>10&1023)&d1,A=56320+(t-o0&1023)&d1,String.fromCharCode(e)+(\"\"+String.fromCharCode(A))):String.fromCharCode(t&d1)}function Q2(t,e){var A;return w.Math.abs(t)>w.Math.abs(e)?(A=e/t,A=w.Math.abs(t)*w.Math.sqrt(1+A*A)):e!=0?(A=t/e,A=w.Math.abs(e)*w.Math.sqrt(1+A*A)):A=0,A}function rA(t,e){var A,n,P,r;if(t.L){if(gt(V(t.C[e],1),0))return!1;if(t.w!=null&&t.w[e]!=null){for(n=t.w[e],P=0,r=n.length;P<r;++P)if(A=n[P],!Pi(A))return!1}}return Pi(t.D[e])}function zY(t,e){var A,n,P,r;if(t.L){if(gt(V(t.C[e],1),0))return!1;if(t.w!=null&&t.w[e]!=null){for(n=t.w[e],P=0,r=n.length;P<r;++P)if(A=n[P],!ii(A))return!1}}return ii(t.D[e])}function KY(){yy();var t,e,A,n,P,r,i,f,D;for(ll=new cP,i=W4,f=0,D=i.length;f<D;++f)for(r=i[f],P=c8(r[0],\";\"),e=P,A=0,n=e.length;A<n;++A)t=e[A],We(ll,rf(t.toLowerCase(),\"-\"),r[1])}function Fb(t){Ms();var e,A,n,P,r;for(ut(t,7),P=c(Pt,it,6,t.i,16,1),n=0,A=0;A<t.i;A++)da(t,A)&&(P[A]=!0,++n);for(r=c(F,m,6,n,15,1),n=0,e=0;e<t.i;e++)P[e]&&(r[n++]=e);return r}function JY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,e0(t.b,e)==0)for(f=1;f<O(t.b,e);f++)for(Q=0;Q<f;Q++)n=_(t.b,e,f),P=_(t.b,e,Q),r=A[n],i=A[P],r!=-1&&i!=-1&&r>i^n>P&&(D=!D);return D}function YY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,e0(t.g,e)==0)for(f=1;f<O(t.g,e);f++)for(Q=0;Q<f;Q++)n=_(t.g,e,f),P=_(t.g,e,Q),r=M1(t.g,n),i=M1(t.g,P),A[r]>A[i]^n>P&&(D=!D);return D}function f5(t,e,A){var n,P;for(P=!1,n=0;n<t.V.g;n++)M1(t.V,n)!=0&&(A&&!Fn(t.V,n)||e&&Fn(t.V,n))&&(P||(K1(t),P=!0),tA(t.V,n,0,!1));P&&(e||mQ(t),EL(t,w.Math.max(t.eb,1)))}function ks(t,e){var A,n;if(!e)return null;for(n=c(F,m,6,(F9.length+31)/32|0,15,1),e=eb(e),GA(t.g,e),A=0;A<F9.length;A++)MA(t.g,K2[A]),CA(t.g,1,4)>0&&(n[A/32|0]|=1<<31-A%32);return n}function kb(t,e){var A,n,P,r;for(A=c(F,m,6,t.k[e]-JL(t,e),15,1),r=0,P=0;P<t.k[e];P++)n=t.j[e][P],gt(V(t.C[n],Pe),0)||(A[r++]=t.D[n]);return A.sort(pe(Q0.prototype.ld,Q0,[])),A}function ms(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!=e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function bs(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!==e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function XY(t,e,A,n){var P,r;for(r=e,P=r.c==null||t.a.Rb(A.c,r.c)>0?1:0;r.a[P]!=A;)r=r.a[P],P=t.a.Rb(A.c,r.c)>0?1:0;r.a[P]=n,n.b=A.b,n.a[0]=A.a[0],n.a[1]=A.a[1],A.a[0]=null,A.a[1]=null}function ZY(t){var e,A;try{return A=new iB(t),Fj(A,4e3,go),ys(A,A.i)}catch(n){if(n=_1(n),Yt(n,188))return NaN;if(Yt(n,19))return e=n,ur(e,(q1(),k9),\"\"),NaN;throw At(n)}}function mb(t,e){var A,n,P,r,i;for(r=e.length,i=c(F,m,6,r,15,1),n=0;n<r;n++)for(A=n==r-1?e[0]:e[n+1],P=0;P<O(t.i,e[n]);P++)if(_(t.i,e[n],P)==A){i[n]=Nt(t.i,e[n],P);break}return i}function js(t,e,A){var n,P;if((t.v[e]&gn)==0||(t.v[A]&gn)==0)return!1;for(P=(ut(t,7),t.q),n=0;n<P.j.a.length;n++)if(G(P.k,n).length==5&&wA(P,n,e)&&wA(P,n,A))return!0;return!1}function WY(t){var e,A;return t.f||(A=new Du,t.a&&(A.a=!0),t.f=mv(A,(e=t.g.a,e)),t.f&&(t.f.Q==null||t.f.Q.length==0)&&iu(t.f,t.e!=-1&&t.c!=null?t.c[t.e]:t.f?t.f.Q:null)),t.f}function bb(){bb=v1,jl=B(d(F,1),m,6,15,[0,2,1,3]),IE=B(d(ft,1),Dt,2,6,[\"plain\",\"italic\",\"bold\",\"italics & bold\"]),SE=B(d(ft,1),Dt,2,6,[\"8\",\"9\",\"10\",\"12\",\"14\",\"18\",\"24\",\"32\"])}function _Y(t,e){var A;for(A=0;e<t.length&&(t[e]!=93||A!=0);)t[e]==91?++A:t[e]==93&&--A,++e;if(e==t.length)throw At(new H1(\"SmilesParser: No matching closing bracket found.\"));return e+1}function jb(t,e,A){return t.L!=null&&t.L[e]!=null&&t.L[e][A]?null:t.I[e]==0&&t.B[A]==0?(O(t.u,A)!=0&&(t.H[t.G[e]]=!0),O(t.D,e)!=0&&(t.A[t.w[A]]=!0),new FD(e,A)):null}function Rb(t){var e,A,n;for(n=new RL(\", \",\"[\",\"]\"),A=t.Tb();A.cd();)e=A.dd(),$v(n,z1(e)===z1(t)?\"(this Collection)\":e==null?y9:P2(e));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c}function o2(t){var e,A,n;if(hl==null){if(e=A2(\"/resources/csd/\"+t),e)return hl=\"csd/\",new un(new mi((n=e,w0(),n)));hl=\"cod/\"}return new un(new mi((A=A2(\"/resources/\"+hl+t),w0(),A)))}function $Y(t){var e,A;try{for(t=$n(t),ps(t),e=t.s,A=0;A<e;A++)t.I[A]=1,t.U=0;return Me(new bA(t))}catch(n){if(n=_1(n),Yt(n,27))return q1(),null;throw At(n)}}function pb(t,e){var A,n,P,r;for(n=0,P=t.length;n<P;n++){r=t[n];try{r[1]?r[0].zd()&&(e=QG(e,r)):r[0].zd()}catch(i){if(i=_1(i),Yt(i,27))A=i,pG(Yt(A,166)?A.Nc():A);else throw At(i)}}return e}function Mb(t){var e,A,n,P,r,i,f,D;for(f=c(F,m,6,t.g,15,1),D=(ut(t,7),t.q),r=0;r<w.Math.min(32,D.j.a.length);r++)for(i=G(D.j,r),A=i,n=0,P=A.length;n<P;++n)e=A[n],f[e]|=1<<r;return f}function D5(t){var e,A,n,P;if(A=Ot(j0(t,32)),A==0)return n=Ot(t)>>>0,n.toString(16);e=c(Fr,re,6,17,15,1),P=17;do e[--P]=MG(Ot(t)&15),t=j0(t,4);while(z(t,0)!=0);return PP(e,P,17-P)}function G1(t,e){var A,n,P,r,i,f;for(t._b(1),i=!1,n=!1,f=0,P=0;P<t.e[e];P++)(!t.L||!ye(t,t.j[e][P]))&&(r=t.o[e][P],f+=r,r>1&&(i=!0),A=t.n[e][P],t.I[A]==8&&(n=!0));return n&&!i&&++f,f}function MQ(t,e){var A,n,P,r;for(c1(t.k,e)==1&&g0(t.k,e,2),P=0;P<2;P++)for(A=K(t.k,P,e),W0(t.k,A)&&(Wn(t.k,A,!1),--t.b),r=0;r<O(t.k,A);r++)n=Nt(t.k,A,r),t.g[n]&&(t.g[n]=!1,--t.c)}function u5(t,e,A){var n,P,r,i,f;for(P=0,i=new Zt(A);i.a<i.c.a.length;)r=_t(i),r.length!=0&&(f=aL(e,r).b,P<f&&(P=f));return n=t.c*yo*(A.a.length-1)+t.c,new lA(t.i[0].a,t.i[0].b-t.c/2,P,n)}function Te(t){if(q4==null&&(q4=new RegExp(\"^\\\\s*[+-]?(NaN|Infinity|((\\\\d+\\\\.?\\\\d*)|(\\\\.\\\\d+))([eE][+-]?\\\\d+)?[dDfF]?)\\\\s*$\")),!q4.test(t))throw At(new _P(b2+t+'\"'));return parseFloat(t)}function Q5(t){var e,A;for(A=j1(F,[DA,u0],[29,7],0,[2,32],2),e=0;e<t.R.g;e++)t.M[e]&&(t.bb[e]==1?A[0][t.ab[e]]=uf(A[0][t.ab[e]],e):t.bb[e]==2&&(A[1][t.ab[e]]=uf(A[0][t.ab[e]],e)));return A}function Rs(t){var e,A,n,P;for(P=new un(new mi((A=A2(t),w0(),A))),n=new ou;;)try{if(e=X1(P),e!=null)Ns(n,e);else break}catch(r){if(r=_1(r),Yt(r,79))break;throw At(r)}return n}function aY(t){t=t||{};var e=t.ringMatchMode||rE;switch(e){case rE:return 0;case\"keepRings\":return 1;case\"keepAromaticRings\":return 2;default:throw new Error(\"invalid ring match mode: \"+e)}}function Cb(t,e){var A,n,P;return e&=63,e<22?(A=t.l<<e,n=t.m<<e|t.l>>22-e,P=t.h<<e|t.m>>22-e):e<44?(A=0,n=t.l<<e-22,P=t.m<<e-22|t.l>>44-e):(A=0,n=0,P=t.l<<e-44),G0(A&z0,n&z0,P&Pn)}function Hb(t,e){var A,n,P,r,i;if(e1(t.a,\"Helvetica\")){for(r=0,n=0,P=e.length;n<P;n++)A=(zt(n,e.length),e.charCodeAt(n)),r+=(A<128?i=DS[A]:i=FA,i*t.b/20);return r}else return yY(t,e)}function Vb(t,e,A){var n,P,r,i;return P=t.c[A][0]*l1/180,r=t.c[A][1]*l1/180,i=t.e[A]*l1/180,e<i-l1?e+=m0:e>i+l1&&(e-=m0),n=(i-e)/(i-(e<i?P:r)),n<1?0:n<2?(n-=1,n*n):1}function tX(t,e){var A,n,P,r,i;if(t.e!=null)for(A=a5(t)/t.p.c,P=t.e,r=0,i=P.length;r<i;++r)n=P[r],yI(n,t.f),n.r=A/n.R.c,h6(n,e);if(t.b!=null)for(P=t.b,r=0,i=P.length;r<i;++r)n=P[r],h6(n,e)}function ue(t,e){var A,n,P,r;for(A=!1,P=!1,n=e;n<t.length;n++)if(r=(zt(n,t.length),t.charCodeAt(n)),r==40?A=!0:r==41?A=!1:r==34&&(P=!P),!A&&!P&&(r==32||r==9))return n;return-1}function ps(t){var e,A;for(ut(t,15),t.M=!1,e=0;e<t.r;e++)t.v[e]&=My,(t.v[e]&3)!=0?t.v[e]|=oo:t.v[e]&=py;for(A=0;A<t.s;A++)(t.G[A]&3)!=0&&dt(t,A)==2?t.I[A]=386:t.I[A]&=-385;t.U&=-249}function eX(t){CU();var e,A,n,P;for(x5(t,1),n=t.r,A=c(ft,Dt,2,n,6,1),e=0;e<n;e++)P=$n(t),IP(P,e,(J1(),a0)[P.D[e]]+\"*\"),P.D[e]==1?$0(P,e,Ac):O9(P,e,P.B[e]+5),ZO(P),A[e]=Me(new qA(P,8));return A}function CQ(t,e,A,n,P){var r;n|=f1,r=xF(A),n!=-1&&(nA(e,n),q3(e,r[0],r[1],vn,vn)),A==20?Ps(e,t.c,0,t.d*84,84,84,r[0],r[1],vn,vn):Ps(e,P?t.g:t.i,(r[0]-p8)*t.j,(r[1]-p8)*t.j,84,84,r[0],r[1],vn,vn)}function U2(t,e){var A,n,P,r;for(P=!1,n=0;n<t.R.i;n++)$Q(t,n,1)&&(t.q[n]=t.L,e&&U_(t,n),P=!0);for(r=!1,A=0;A<t.R.g;A++)Qy(t,A,1)&&(t.ib[A]=t.L,e&&ea(t,A),r=!0);return r&&(t.L=!t.L),P||r}function i9(t,e){return t.r>=t.N&&VQ(t,t.N*2),t.D[t.r]=0,$0(t,t.r,e),t.t[t.r]=0,t.v[t.r]=0,t.C[t.r]=0,t.A[t.r]=0,HU(t.K[t.r],0,0,0),t.w!=null&&(t.w[t.r]=null),t.u!=null&&(t.u[t.r]=null),t.U=0,t.r++}function AX(t){var e,A,n,P,r;for(r=new BU(t.g,t.f),P=c(F,m,6,t.g.r,15,1),A=0;A<t.g.r;A++)P[A]=M1(t.g,A);for(n=c(F,m,6,t.f.r,15,1),e=0;e<t.f.r;e++)n[e]=M1(t.f,e);return-Ay(r,c5(r,P,n))*.25}function nX(t){var e,A,n,P,r,i;for(i=new Gr,n=new Bv(t),e=n.b-1;e>=0;e--)for(P=KT(n,e),A=0;A<n.b;A++)if(e!=A&&(r=KT(n,A),P.g<r.g&&(GA(i,r),MA(i,P),CA(i,1,i.c)>0))){rb(n,e);break}return n}function PX(t){switch(this.c=!1,this.b=!1,t){case 1:this.c=!0;break;case 2:this.b=!0}this.g=new oU,this.i=new oU,this.j=new oU,this.o=new Gr,this.a=new ru,this.f=new Jn,this.e=new Jn}function fi(t){var e,A,n,P;for(P=new un(new mi((n=A2(t),w0(),n))),e=new n1;;)try{if(A=X1(P),A!=null)e.a.push(A);else break}catch(r){if(r=_1(r),Yt(r,79))break;throw At(r)}return e}function rX(t,e){var A,n,P;for(A=c(F,m,6,t.e.length,15,1),P=0;P<t.e.length;P++)n=Wt(Ec[t.a[P]],t.b[P]),gt(V(e.c[t.d[P]],n),0)?A[P]=Ot(O0(V(e.b[t.d[P]],n),t.b[P])):A[P]=-1;return A}function iX(t,e){s8();var A,n,P,r;for(n=c(Pt,it,6,e.r,16,1),A=0;A<e.g;A++)if(!n[A]&&e.p[A]==2&&e.D[A]<=8){for(P=i_(A,e),r=0;r<P.length;r++)n[P[r]]=!0;P[0]!=P[P.length-1]&&Ft(t,new fg(P))}}function o5(t,e,A,n,P,r,i,f){var D,Q;return D=tn(t,e,A),D==-1?(t.r>=t.N&&VQ(t,t.N*2),D=i9(t,n),HU(t.K[D],e,A,0),t.B[D]=P,aA(t,D,r),Je(t,D,i),IP(t,D,f),!0):(Q=mf(t,D,n,P,r,i),Q=Q|IP(t,D,f),Q)}function Eb(t,e,A,n){var P,r,i,f;for(ut(e,1),r=0;r<A;r++)n[r]!=-1&&t.D[r]!=1&&t.e[r]!=Ct(e,n[r])&&(P=sf(t,r,!1),P!=-1&&(f=sf(e,n[r],!1),P!=f&&(i=G9(e,n[r]),(i==-1||i<P)&&aA(e,n[r],P))))}function fX(t,e,A){var n,P,r;for(r=0;r<t.e.length;r++)P=w.Math.sqrt((t.a[r]-e)*(t.a[r]-e)+(t.b[r]-A)*(t.b[r]-A)),n=0-hn(e,A,t.a[r],t.b[r]),t.a[r]=e+P*w.Math.sin(n),t.b[r]=A+P*w.Math.cos(n)}function DX(t,e,A){var n,P,r,i,f;return r=(P=t/e,P>0?w.Math.floor(P):w.Math.ceil(P)),i=t%e,f=rr(t*e,0),i!=0&&(n=rr(w.Math.abs(i)*2,w.Math.abs(e)),r+=zQ(Bt(r)&1,f*(5+n),A)),new L3(r)}function U5(t,e){var A,n,P;for(xr.call(this,t),A=0,P=0;P<t.length;P++)e.k[t[P]]!=1&&++A;if(A>2)for(this.a=c(F,m,6,A,15,1),A=0,n=0;n<t.length;n++)e.k[t[n]]!=1&&(this.a[A++]=t[n]);else this.a=t}function Di(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.i;f++)(fe(t.R,t.C[f])&n)!=0&&++D;if(D!=0)for(rP(t,e),qt(t,D,A),i=0;i<t.R.i;i++)Q=fe(t.R,t.C[i])&n,Q!=0&&(qt(t,i,A),P!=1&&qt(t,Q>>r,P))}function L5(t,e){var A,n,P;if(t.w==null||t.w[e]==null)return gt(V(t.C[e],1),0)?\"\":a0[t.D[e]];for(P=\"\",n=0;n<t.w[e].length;n++)n>0&&(P=(y1(P),P+(y1(\",\"),\",\"))),A=t.w[e][n],P=Su(P,a0[A]);return P}function hf(t){var e,A,n,P;for(ut(t,7),n=0;n<t.i;n++)(t.I[n]==257||t.I[n]==129)&&(t.I[n]=1);for(e=0;e<t.g;e++)oy(t,e);for(P=0;P<t.i;P++)bp(t,P);for(A=0;A<t.i;A++)t.I[A]==2&&(t.G[A]&3)==3&&(t.I[A]=386)}function uX(t,e,A){var n,P,r;if(e.c!=null)for(P=0;P<e.c.length;P++)for(r=0;r<O(t.k,e.a);r++)e.c[P]==_(t.k,e.a,r)&&(n=Nt(t.k,e.a,r),e.d[P]||Rp(t,n,e.a,A),t.e[n]>9&&(A.a+=\"%\"),Mh(A,t.e[n]))}function QX(t,e){var A,n,P,r,i;if(t.i.L){if(gt(V(h0(t.i,e),1),0))return!1;if(A=IA(t.i,e),A!=null){for(P=A,r=0,i=P.length;r<i;++r)if(n=P[r],!Pi(n))return!1;return!0}}return Pi(X(t.i,e))}function Sb(t,e,A,n,P){var r,i,f;for(r=!0,i=0;i<n;i++)r=r&A[i]==0;if(P==0)PA(A,n,t,0,e),i=e;else{for(f=32-P,r=r&A[i]<<f==0,i=0;i<e-1;i++)t[i]=A[i+n]>>>P|A[i+n+1]<<f;t[i]=A[i+n]>>>P,++i}return r}function oX(t){var e,A;(t.G&32)==0&&(A=QR(t.L),A!=null&&(t.w.a==0&&t.w.b==0&&(e=t.R.c*G8(t.L),t.v=Wj(t),ym(t,e),N5(t,null,e,0)),t.Cb(Bt(t.A)),t.L.P!=1&&$1(t,448),t.tb(A,t.w.a,t.w.b+Hf*t.A)))}function Ib(t){var e,A,n;if(bD(this),!(t==null||t.length==0))for(e=0,A=t.indexOf(p0(10));A!=-1;)n=YZ((Mt(e,A,t.length),t.substr(e,A-e))),n&&this.a.push(n),e=A+1,A=t.indexOf(p0(10),e)}function UX(t,e,A){var n,P;switch(P=A&127,n=Qb(t,e),P){case 1:case 8:return n>=1;case 2:return n>=2;case 4:return n>=3;case 32:return n>=4;case 64:return n>=5;case 16:return!0;default:return!1}}function Tf(t,e,A,n){var P,r,i;for(i=0;i<t.e.length;i++)r=w.Math.sqrt((t.a[i]-e)*(t.a[i]-e)+(t.b[i]-A)*(t.b[i]-A)),P=hn(e,A,t.a[i],t.b[i])+n,t.a[i]=e+r*w.Math.sin(P),t.b[i]=A+r*w.Math.cos(P)}function s5(t,e){var A,n,P;return n=e.g-p8,P=e.i-p8,n<0||n>=2*vn||P<0||P>=17*vn?-1:(A=17*Bt(n/vn)+Bt(P/vn),A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)?A:-1)}function LX(t){var e;t.c==null&&(e=z1(t.b)===z1(cc)?null:t.b,t.d=e==null?y9:RF(e)?e==null?null:e.name:N8(e)?\"String\":yu(Qs(e)),t.a=t.a+\": \"+(RF(e)?e==null?null:e.message:e+\"\"),t.c=\"(\"+t.d+\") \"+t.a)}function sX(t,e){var A,n,P,r;return e&=63,A=t.h&Pn,e<22?(r=A>>>e,P=t.m>>e|A<<22-e,n=t.l>>e|t.m<<22-e):e<44?(r=0,P=A>>>e-22,n=t.m>>e-22|t.h<<44-e):(r=0,P=0,n=A>>>e-44),G0(n&z0,P&z0,r&Pn)}function yX(t,e,A,n){var P,r;P=new h1,r=new h1,P.a=e.a,P.c=e.c,P.b=(e.a+e.b)/2,P.d=(e.c+e.d)/2,r.a=P.b,r.c=P.d,r.b=e.b,r.d=e.d,vA(t,P)&&($1(t,t.p[A]),t.qb(P)),vA(t,r)&&($1(t,t.p[n]),t.qb(r)),$1(t,t.Q)}function xb(t,e,A){var n,P;return n=tn(t,e,A),n!=-1?((t.v[n]&512)!=0?UQ(t):jQ(t,n),t.U=0,!0):(P=kf(t,e,A),P!=-1?((t.v[t.F[0][P]]&t.v[t.F[1][P]]&512)!=0?UQ(t):l5(t,P),t.U=0,!0):!1)}function Nb(t,e,A){var n,P,r;for(t.V=e,t.W=A,t.R=c(Ut,Tt,6,t.r,15,1),t.S=c(Ut,Tt,6,t.r,15,1),n=0;n<t.r;n++)P=e-t.K[n].a,r=A-t.K[n].b,t.S[n]=w.Math.sqrt(P*P+r*r),t.R[n]=pA(e,A,t.K[n].a,t.K[n].b)}function Gb(t,e){var A,n,P,r;for(r=c(F,m,6,t.k[e]-JL(t,e),15,1),P=0,n=0;n<t.k[e];n++)A=t.j[e][n],gt(V(t.C[A],Pe),0)||(r[P++]=w.Math.abs(t.A[A]));return r.sort(pe(Q0.prototype.ld,Q0,[])),r}function Ob(t,e){var A,n,P,r,i;if(A=-1,t.p[e]==1){for(r=0;r<t.k[e];r++)if(t.o[e][r]==2){if(n=t.j[e][r],t.k[n]==2&&t.p[n]==2){for(i=0;i<2;i++)if(P=t.j[n][i],P!=e&&t.p[P]==1){A=n;break}}break}}return A}function lX(t,e){var A,n,P,r,i;for(i=new n1,r=0;r<e.r;r++)e.e[r]==3&&(A=e.j[r][0],n=e.j[r][1],P=e.j[r][2],Ft(i,new es(t,e,r,A,n,P)),Ft(i,new es(t,e,r,A,P,n)),Ft(i,new es(t,e,r,n,P,A)));return i}function X1(t){var e,A,n;if(A=SL(t),A==-1)return null;for(n=new C0,e=!1;!e;)if(A==10?e=!0:A==13&&(e=!0,A=SL(t),A!=10&&(t.a=A)),!e){if(A==-1)break;Ye(n,A&d1),A=SL(t)}return n.a}function hX(t,e,A){var n,P,r,i,f,D;if(D=G(t.b,e),t.d.length<=t.c.length)for(f=0;f<t.a;f++)A[t.d[f]]=t.c[D[f]];else{for(P=t.d,r=0,i=P.length;r<i;++r)n=P[r],A[n]=-1;for(f=0;f<t.a;f++)A[t.d[D[f]]]=t.c[f]}}function TX(t){return t.K++==64?!1:t.i?t5(t.i.b)?!1:(mU(t.I,0),mU(t.B,0),gh(t.H),gh(t.A),qb(t),bI(t.i),t.q=iR(t),t.g=7,t.c=0,t.d=0,t.e=0,t.f=0,!0):(t.i=new Fd,!0)}function p(t,e,A){var n=bo,P=n[t],r=P instanceof Array?P[0]:null;P&&!r?U=P:(U=ez(e),U.xd=A,!e&&(U.yd=DD),n[t]=U);for(var i=3;i<arguments.length;++i)arguments[i].prototype=U;r&&(U.wd=r)}function y5(t,e){var A,n;if((t.G&4224)!=0||(n=e5(t,e),n==-1&&(A=Ob(t.L,e),A!=-1&&(e=A,n=e5(t,e))),n==-1))return t.p[e];switch(n&255){case 1:return 384;case 2:return 64;default:return 448}}function l5(t,e){var A,n,P;for(n=0;n<2;n++){for(A=0,P=0;P<t.s;P++)P!=e&&(t.F[0][P]==t.F[n][e]||t.F[1][P]==t.F[n][e])&&++A;A==0&&(iQ(t,t.A[t.F[n][e]]),t.D[t.F[n][e]]=-1)}t.I[e]=512,Rf(t),t.U=0}function cX(t,e){var A,n;if(!e)return null;for(n=c(XA,re,6,(F9.length+63)/64|0,14,1),e=eb(e),GA(t.g,e),A=0;A<F9.length;A++)MA(t.g,K2[A]),CA(t.g,1,4)>0&&(n[A/64|0]=J(n[A/64|0],Wt(1,63-A%64)));return n}function wX(t,e,A,n){var P,r,i,f;for(f=c(F,m,6,t.o[e].g,15,1),zr(f,f.length,-1),r=C9(t.c,e),P=0;P<r.g;P++)A[P]!=-1&&(f[A[P]]=w.Math.abs(r.A[P]));for(i=0;i<f.length;i++)f[i]==-1&&(f[i]=n++);return f}function qb(t){var e,A,n,P,r,i,f,D,Q;for(Q=t.F.g,t.J=Mn(Q,Q.length),e=t.v.g,t.C=Mn(e,e.length),P=t.J,i=0,D=P.length;i<D;++i)A=P[i],t.o<A&&(t.o=A);for(n=t.C,r=0,f=n.length;r<f;++r)A=n[r],t.n<A&&(t.n=A)}function gX(t,e){var A,n,P,r,i,f,D,Q,o;if(t==null)return e;for(o=c(F,m,6,t.length+e.length,15,1),Q=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],o[Q++]=A;for(n=e,r=0,f=n.length;r<f;++r)A=n[r],o[Q++]=A;return o}function dX(t,e){switch(e){case 0:ab(t);return;case 1:K1(t),t.eb=w.Math.max(t.eb,6),P1(t.k),N1(t,new x1(t,1,!0));return;case 17:Ov(t),t.eb=w.Math.max(t.eb,2),P1(t.k),N1(t,new x1(t,1,!0));return}}function zb(t,e,A){var n,P,r,i;if(i=E3(e),P=(n=t.a.get(i),n??c(qn,A0,1,0,5,1)),P.length==0)t.a.set(i,P);else if(r=mk(e,P),r)return r.kd(A);return P[P.length]=new jU(e,A),++t.c,++t.b.b,null}function Kb(t,e,A){var n,P,r,i,f,D,Q,o;for(Q=-1,P=0,f=0;f<2;f++)for(n=t.j[e][f],D=0;D<t.e[n];D++)r=t.j[n][D],r!=e&&(i=t.n[n][D],o=NQ(t,i,r),P<o&&(!A||!(t.I[i]==257||t.I[i]==129))&&(P=o,Q=i));return Q}function Jb(t){var e,A,n,P;for(A=0,e=0,n=0;n<t.g.a.length+t.f.a.length;n++)P=n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length),P.s!=0&&(A+=P.s,e+=dP(P,P.r,P.s,(J1(),Bn))*P.s);return A==0?(J1(),J1(),Bn):e/A}function BX(t,e,A,n){var P,r,i,f,D;for(i=c(Pt,it,6,t.length+1,16,1),D=c(F,m,6,n,15,1),f=0;f<n;f++)P=A==null?f:A[f],P!=-1&&(D[f]=t[P],i[D[f]]=!0);for(r=0;r<e.length;r++)i[e[r]]||(e[r]=0);return D}function vX(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(n=0,A*=A,f=0;f<e.r;f++){for(Q=e.K[f].a,L=e.K[f].b,i=!1,D=0;D<t.V.r;D++)if(o=mt(t.V,D),s=Rt(t.V,D),P=o-Q,r=s-L,P*P+r*r<A){i=!0;break}i&&++n}return n==e.r}function HQ(){HQ=v1,new FP(255,255,255),new FP(128,128,128),new FP(0,0,0),new FP(0,255,0),new FP(255,255,0),new FP(255,200,0),new FP(255,0,0),new FP(0,255,255),new FP(0,0,255),new FP(255,0,255)}function FX(t,e,A){var n;return xb(t.V,e,A)?(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)),!0):(n=BK(t,e,A),n?(er(t.I,n),t.v=null,t.eb=w.Math.max(t.eb,1),P1(t.k),!0):!1)}function kX(t,e,A){A!=null&&A.length==0&&(A=null),A==null?t.u!=null&&(t.u[e]!=null&&t.D[e]==1&&(t.U=0),t.u[e]=null):(t.u==null&&(t.u=c(E,m8,10,t.N,0,2)),t.u[e]==null&&t.D[e]==1&&(t.U=0),t.u[e]=A)}function mX(t,e,A,n){var P,r,i,f;if(O(t.b,e)!=O(t.a,A))return!1;for(r=0;r<O(t.b,e);r++){for(f=_(t.b,e,r),P=!1,i=0;i<O(t.a,A);i++)if(n[f]==_(t.a,A,i)){P=!0;break}if(!P)return!1}return!0}function Yb(t,e){var A,n,P,r,i,f,D,Q,o;for(o=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],e[A]==0&&++o;if(o==0)return null;for(Q=c(F,m,6,o,15,1),o=0,n=t,r=0,f=n.length;r<f;++r)A=n[r],e[A]==0&&(Q[o++]=A);return Q}function bX(t,e){var A,n,P,r;for(t.j=new _A,n=0;n<e.g.a.length;n++)r=G(e.g,n),ut(r,1),S5(t.j,r,r.g,r.i,!r.L);for(t.d=new _A,A=0;A<e.f.a.length;A++)P=G(e.f,A),ut(P,1),S5(t.d,P,P.g,P.i,!P.L);Li(t.j),Li(t.d)}function jX(t,e){var A,n;return Ip(t,e,!1)?t.s!=null?(t.B=new d3(t,t.o),md(t.B,400),t.b=new Ji(new fD),cp(t)):(n=new XQ(e),DU(n,t.v),A=jZ(n,t.o),iy(t,A),A.p=\"SO#1\",A):null}function Xb(t,e){var A,n,P,r,i,f;for(A=t.b.a.length,P=G(t.b,e);e*2+1<A&&(n=(r=2*e+1,i=r+1,f=r,i<A&&t.a.Rb(G(t.b,i),G(t.b,r))<0&&(f=i),f),!(t.a.Rb(P,G(t.b,n))<0));)Zr(t.b,e,G(t.b,n)),e=n;Zr(t.b,e,P)}function k1(t){var e,A,n;for(A=t.length,n=0;n<A&&(zt(n,t.length),t.charCodeAt(n)<=32);)++n;for(e=A;e>n&&(zt(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return n>0||e<A?(Mt(n,e,t.length),t.substr(n,e-n)):t}function Zb(t,e,A,n,P){var r,i,f,D,Q;for(r=A[n],Q=!1,f=0;f<e.g;f++)if(f!=n&&A[f]==r){Q=!0;break}if(!Q)return P;for(i=0;i<e.g;i++)(i==n||A[i]>r)&&++A[i];++P;do D=P,X$(t,e,A),P=IK(t,A);while(D!=P);return P}function h5(t,e,A,n,P,r){var i,f,D,Q;if(i=n-A,i<7){FK(e,A,n,r);return}if(D=A+P,f=n+P,Q=D+(f-D>>1),h5(e,t,D,Q,-P,r),h5(e,t,Q,f,-P,r),r.Rb(t[Q-1],t[Q])<=0){for(;A<n;)e[A++]=t[D++];return}TK(t,D,Q,f,e,A,n,r)}function Wb(t,e){if(e instanceof Object)try{e.__java$exception=t;var A=t;Object.defineProperties(e,{cause:{get:function(){var n=A.ic();return n&&n.gc()}},suppressed:{get:function(){return A.hc()}}})}catch{}}function _b(t,e){var A,n,P;return n=t.a*t.a+t.b*t.b+t.c*t.c,P=e.a*e.a+e.b*e.b+e.c*e.c,n==0||P==0||(A=(t.a*e.a+t.b*e.b+t.c*e.c)/w.Math.sqrt(n*P),A>=1)?0:A<=-1?l1:w.Math.acos(A)}function RX(t,e,A){var n,P,r;P=k1((Mt(31,34,A.length),A.substr(31,3))),e1(P,\"A\")||e1(P,\"*\")?w1(t.j,e,1,!0):e1(P,\"Q\")?(r=c(F,m,6,1,15,1),r[0]=6,gf(t.j,e,r,!0)):(n=zA(P,67),$0(t.j,e,n))}function T5(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=a9(e,G(t.c,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return-1}function c5(t,e,A){var n,P,r,i;for(r=c(F,m,6,t.b.g+1,15,1),zr(r,r.length,-1),P=0;P<A.length;P++)A[P]!=0&&(r[A[P]]=P);for(i=c(F,m,6,t.b.g,15,1),zr(i,i.length,-1),n=0;n<e.length;n++)i[n]=r[e[n]];return i}function $b(t){var e,A;return t.d>0||(e=1,A=1,t.a<54?(t.a>=1&&(A=t.f),e+=w.Math.log10(w.Math.abs(A))):(e+=(t.a-1)*mo,D6((!t.c&&(t.c=jP(E1(t.f))),t.c),Qi(e)).e!=0&&++e),t.d=Bt(e)),t.d}function pX(t){var e;for(e=0;e<t.r;e++)switch(t.D[e]){case 1:case 5:case 6:case 7:case 8:case 9:case 14:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:continue;default:return!1}return!0}function MX(t){pf();var e,A,n,P,r,i;if(t==null)return null;for(e=c(E,I,6,t.length*8,15,1),n=0;n<t.length;n++)for(i=t[n],P=7;P>=0;P--)A=i&15,A>9&&(A+=7),e[n*8+P]=48+A<<24>>24,i>>=4;return on((r=e,w0(),r))}function y0(t,e,A,n,P){var r,i,f,D,Q,o;for(r=Ct(t.e,e),D=O(t.e,e),Q=1;Q<r;Q++)for(i=Q<D?t.f[Nt(t.e,e,Q)]:0,o=0;o<Q;o++)t.a[e][Q][o]==0&&(f=o<D?t.f[Nt(t.e,e,o)]:0,(i==A&&f==n||i==n&&f==A)&&(t.a[e][Q][o]=P))}function w5(){w5=v1,CE=B(d(ft,1),Dt,2,6,[\"mutagenic\",\"tumorigenic\",\"irritant\",\"reproductive effective\"]),Eo=B(d(ft,1),Dt,2,6,[\"Mutagenicity\",\"Tumorigenicity\",\"Irritating effects\",\"Reproductive effects\"])}function CX(t){var e;for(e=0;0<=(e=t.indexOf(\"\\\\\",e));)zt(e+1,t.length),t.charCodeAt(e+1)==36?t=(Mt(0,e,t.length),t.substr(0,e)+\"$\"+GD(t,++e)):t=(Mt(0,e,t.length),t.substr(0,e)+(\"\"+GD(t,++e)));return t}function HX(t,e,A,n){var P,r,i,f,D;for(D=new n1,r=0;r<e.r;r++)for(i=r+1;i<e.r;i++)P=new zi(r,i),f=D8(A.a,P)!=null?D8(A.a,P):(P9(),Y2),(f==(P9(),wi)||f==Y2)&&pn(new p3(e,r,i))<n&&Ft(D,new ZR(t,e,r,i));return D}function g5(t,e,A){var n;n=t.F[0][e],t.F[0][e]=t.F[0][A],t.F[0][A]=n,n=t.F[1][e],t.F[1][e]=t.F[1][A],t.F[1][A]=n,n=t.I[e],t.I[e]=t.I[A],t.I[A]=n,n=t.G[e],t.G[e]=t.G[A],t.G[A]=n,n=t.H[e],t.H[e]=t.H[A],t.H[A]=n,t.U=0}function VX(t,e){var A,n,P;if(e.j==0){try{A=L1((P=t.b.Gc(),P.getSelectedItem()),f1,Et)}catch(r){if(r=_1(r),Yt(r,42)){ED(t.c,\"Illegal text size.\");return}else throw At(r)}n=jl[F0(t.a)],Ad(t.e,Ki(t.d),A,n)}N9(t.c)}function EX(t){var e,A,n,P;for(t.Ab(2*t.S),P=new h1,n=0;n<t.L.s;n++)e=K(t.L,0,n),A=K(t.L,1,n),Jh(t.L,n)&&(P.a=W1(t.R,mt(t.L,e)),P.c=Z1(t.R,Rt(t.L,e)),P.b=W1(t.R,mt(t.L,A)),P.d=Z1(t.R,Rt(t.L,A)),$1(t,-2),t.qb(P))}function Ms(){Ms=v1,Tl=B(d(Ut,1),Tt,6,15,[m0,l1,I2,fA]),vE=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[0,0,0,2]),B(d(F,1),m,6,15,[0,0,1,2]),B(d(F,1),m,6,15,[0,1,1,3]),B(d(F,1),m,6,15,[2,2,3,2])])}function SX(t){var e,A,n,P;for(n=-.5299999713897705,Li(t),ut(t,7),e=0;e<t.g;e++){P=-1;try{P=Uy(t,e,2144)}catch(r){if(r=_1(r),!Yt(r,19))throw At(r)}for(A=0;A<_f.length;A++)if(n0(gl[A],P)){n+=_f[A];break}}return n}function ab(t){var e;t.I&&(t.I.a.length=0,t.eb=w.Math.max(t.eb,1),P1(t.k)),K1(t),e=t.V.L,Ri(t.V),ve(t.V,e),t.cb.r!=0?(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0))):(t.eb=w.Math.max(t.eb,1),P1(t.k))}function tj(t,e){var A,n,P,r,i,f;for(r=c(F,m,6,t.r,15,1),n=0;n<t.r;n++)r[n]=n;P=t.r;do--P;while(P>=0&&e[P]);for(A=0;A<P;A++)if(e[r[A]]){f=r[A],r[A]=r[P],r[P]=f,i=e[A],e[A]=e[P],e[P]=i;do--P;while(e[P])}return r}function IX(t){pf();var e,A,n,P;if(t.length==0||(t.length&7)!=0)return null;for(n=c(F,m,6,t.length/8|0,15,1),A=0;A<t.length;A++)P=A/8|0,e=(zt(A,t.length),t.charCodeAt(A)-48),e>16&&(e-=7),n[P]<<=4,n[P]+=e;return n}function f9(t,e,A){var n,P,r;if(t.length!=e.length)return-1;for(r=0,n=A.mc(),P=0;P<t.length-1;P++)if(r=BA(t[P],e[P],r,n+1,!0,A),n=BA(t[P],e[P],r,n+1,!1,A),r==-1||n==-1)return-1;return BA(t[P],e[P],r,n+1,!0,A)}function Cs(t,e){var A,n,P,r,i,f,D;for(D=c(Pt,it,6,t.g,16,1),n=0,r=t.i,P=0;P<r;P++)if(LT(e.a,P))for(f=0;f<2;f++)A=t.F[f][P],D[A]||(D[A]=!0,++n);return i=new SA(n,r),ve(i,!0),L9(t,i,D,!0,null),ut(i,7),i}function xX(t,e,A){var n,P,r,i,f,D,Q;P=Bt(T4*G8(t.V)),r=Bt(mt(t.V,K(t.V,0,A))),f=Bt(Rt(t.V,K(t.V,0,A))),i=Bt(mt(t.V,K(t.V,1,A))),D=Bt(Rt(t.V,K(t.V,1,A))),n=(Q=e.Lc(),Q.getLineWidth()),nL(e,P),Z9(e,r,f,i,D),nL(e,n)}function ej(t){switch(t){case 6:return 1;case 53:return 2;case 33:return 3;case 34:return 4;case 35:return 5;case 15:return 6;case 16:return 7;case 17:return 8;case 7:return 9;case 8:return 10;case 9:return 11}return 0}function NX(t){var e;for(t.e=new ch,t.d=new Bd,IN(t,new ls(t,t.i)),e=$n(t.i);!$7(t.d);)if(kJ(bz(t.d),e),ntt(t,e),t.e.a.c>=I1t){q1(),\"\"+Me(new bA(t.i));break}}function Hs(t){var e,A;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),A=Bt(w.Math.floor(w.Math.log(t)/.6931471805599453)),(!e||t!=w.Math.pow(2,A))&&++A,A):BT(E1(t))}function GX(t,e){var A,n,P,r,i,f;if(t.t[e]==0)return!1;for(f=!0,A=t.t[e],r=t.k[e],i=0,n=0;n<r;n++)P=t.j[e][n],i+=t.t[P];return w.Math.abs(A)<=w.Math.abs(i)&&w.Math.sign(A)!=w.Math.sign(i)&&(f=!1),f}function OX(t,e){var A,n,P,r,i,f;for(ut(t,1),i=0;i<2;i++)if(A=t.F[i][e],t.D[A]==7){for(n=t.F[1-i][e],f=0;f<t.k[n];f++)if(P=t.j[n][f],r=t.n[n][f],(t.D[P]==7||t.D[P]==8||t.D[P]==16)&&dt(t,r)>=2)return!0}return!1}function qX(t){var e;if(t.f!=null){for(e=0;e<t.f.length;e++)if((t.c[e]&~t.f[e])!=0)return!1}else return!1;return!t.d&&(t.d=qT(new WA(!1),t.e)),!t.a&&(t.a=qT(new WA(!1),t.b)),GA(t.g,t.d),MA(t.g,t.a),Rg(t.g)}function Aj(t){var e;e=$A(t.d),kP(t.k,!e),kP(t.c,!e),kP(t.n,!e),kP(t.i,!e),kP(t.j,!e),kP(t.b,!e),kP(t.g,!e),kP(t.f,!e&&dt(t.u,t.a)==2&&ze(t.u,t.a)!=0&&ze(t.u,t.a)!=3),kP(t.q,!e),kP(t.r,!e&&F0(t.q)!=1),kP(t.p,e),kP(t.o,e)}function Qr(){Qr=v1,wS=new Ir(\"UP\",0),lS=new Ir(\"DOWN\",1),yS=new Ir(\"CEILING\",2),hS=new Ir(\"FLOOR\",3),Hl=new Ir(\"HALF_UP\",4),TS=new Ir(\"HALF_DOWN\",5),ce=new Ir(\"HALF_EVEN\",6),cS=new Ir(\"UNNECESSARY\",7)}function d5(t,e,A){var n,P,r;for(n=!1,r=0;r<t.k[e];r++)if(!eA(t,t.n[e][r])&&t.o[e][r]==1&&(P=t.j[e][r],!(P<t.g&&f0(t.q,P))&&(t.D[P]==6&&of(t,P)==1||t.D[P]==16&&of(t,P)==2))){if(n||!A)return!0;n=!0}return!1}function zX(t,e){var A,n,P,r,i;for(A=c(Ut,Tt,6,t.v.length+t.u.length,15,1),n=Pr(t.i,e.d).c,r=new Zt(n);r.a<r.c.a.length;)if(P=_t(r),(Sk(e,P.c,P.b)?e.b:0)!=0)for(i=0;i<A.length;i++)cO(t.C,P,i)&&(A[i]+=P.a);return A}function dA(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.g;f++)gt(V(h0(t.R,t.B[f]),n),0)&&++D;if(D!=0)for(rP(t,e),qt(t,D,A),i=0;i<t.R.g;i++)Q=V(h0(t.R,t.B[i]),n),z(Q,0)!=0&&(qt(t,i,A),P!=1&&qt(t,O0(Q,r),P))}function KX(t,e){var A,n,P,r,i,f,D;for(i=Ct(t.R,e),f=c(F,m,6,i,15,1),P=0;P<i;P++)f[P]=_(t.R,e,P);for(n=i;n>1;n--){for(A=!1,r=1;r<n;r++)v6(t,e,f[r-1],f[r])&&(A=!0,D=f[r-1],f[r-1]=f[r],f[r]=D);if(!A)break}return f}function JX(t){var e,A,n,P,r,i,f;for(i=c(E,Wy,58,8,0,3),f=0;f<=7;f++)for(i[f]=c(E,m8,10,t[f].c,0,2),n=0,r=(A=new J8(new K8(new br(t[f]).a).b),new jr(A));Nr(r.a.a);)P=(e=H9(r.a),e.hd()),i[f][n++]=P;return i}function VQ(t,e){var A,n;for(t.D=nr(t.D,e),t.t=nr(t.t,e),t.A=nr(t.A,e),n=t.K.length,t.K=xz(t.K,e),A=n;A<e;A++)t.K[A]=new N0;t.B=nr(t.B,e),t.v=nr(t.v,e),t.C=aq(t.C,e),t.w!=null&&(t.w=aJ(t.w,e)),t.u!=null&&(t.u=tY(t.u,e)),t.N=e}function nj(t,e,A){var n,P,r,i;if(t.k=e,t.n=A,t.i!=null)for(i=t.i.length,t.o=c(Ut,Tt,6,i,15,1),t.p=c(Ut,Tt,6,i,15,1),r=0;r<i;r++)n=e-t.i[r].a,P=A-t.i[r].b,t.p[r]=w.Math.sqrt(n*n+P*P),t.o[r]=pA(e,A,t.i[r].a,t.i[r].b)}function YX(t){var e,A,n,P,r;for(r=new Wu(t),e=r.a.length-1;e>=0;e--)for(A=(ee(e,r.a.length),r.a[e]),P=0;P<r.a.length;P++)if(n=(ee(P,r.a.length),r.a[P]),e!=P&&Hv(n,A)){ee(e,r.a.length),r.a.splice(e,1);break}return r}function XX(t,e){var A,n,P,r,i,f,D;for(n=c(Pt,it,6,O(t.e,e),16,1),D=0,P=0;P<O(t.e,e);P++){for(f=0,i=-1,r=0;r<O(t.e,e);r++)n[r]||(A=Nt(t.e,e,r),f<t.f[A]&&(f=t.f[A],i=r));if(f==0)return D;D<<=8,D+=f,n[i]=!0}return D}function xn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)>0?new BP(t.a/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.b/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.c/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)):new BP(0,0,0)}function Vs(t){var e;if(t.p=new Qu,t.k!=null)for(t.e=c(OE,A0,105,t.k.length,0,1),e=0;e<t.k.length;e++)t.e[e]=new mu(t.k[e]);if(t.a!=null)for(t.b=c(OE,A0,105,t.a.length,0,1),e=0;e<t.a.length;e++)t.b[e]=new mu(t.a[e]);t.d=24}function ZX(t,e,A){var n,P;if(P=G(t.b,e),t.d.length<=t.c.length){for(n=0;n<t.a;n++)if(A[t.d[n]]!=null&&A[t.d[n]][t.c[P[n]]])return!0}else for(n=0;n<t.a;n++)if(A[t.d[P[n]]]!=null&&A[t.d[P[n]]][t.c[n]])return!0;return!1}function WX(t,e){F6();var A,n,P,r;if(af[e]!=null){for(n=0;n<af[e].length;n++)for(r=af[e][n],P=15;P>=0;P--)(r&3)==0&&tL(t,P,n,-1),r>>=2;for(A=0;A<af[e].length;A++)for(r=af[e][A],P=15;P>=0;P--)(r&3)==1&&tL(t,P,A,On),r>>=2}}function D9(t){var e,A,n;return t<0?0:t==0?32:(n=-(t>>16),e=n>>16&16,A=16-e,t=t>>e,n=t-256,e=n>>16&8,A+=e,t<<=e,n=t-S0,e=n>>16&4,A+=e,t<<=e,n=t-Gn,e=n>>16&2,A+=e,t<<=e,n=t>>14,e=n&~(n>>1),A+2-e)}function s0(t,e){var A=w;if(t===\"\")return A;var n=t.split(\".\");if(!(n[0]in A)&&A.execScript&&A.execScript(\"var \"+n[0]),e){var P=e.prototype.wd;P.e=e}for(var r;n.length&&(r=n.shift());)A=A[r]=A[r]||!n.length&&e||{};return A}function B5(t,e,A,n,P,r,i){var f,D;return f=_(t.g,t.s[e],n),f<t.D.length&&(!t.D[f]||t.f[f]==i)&&f!=t.u[e]&&(D=Nt(t.g,t.s[e],n),!r[D]&&!Ru(t.g,D)&&(t.s[++A]=f,t.u[A]=t.s[e],t.v[A]=D,r[D]=!0,P[f]?t.t[A]=!0:P[f]=!0)),A}function L2(t,e){var A,n,P,r,i;for(i=0,A=0,n=0;n<e;n++)i+=t[n].b*w.Math.sin(t[n].a),A+=t[n].b*w.Math.cos(t[n].a);return A==0?r=i>0?HA:uo:(r=w.Math.atan(i/A),A<0&&(r+=l1)),P=w.Math.sqrt(i*i+A*A)/e,new $P(r,P)}function Es(t){var e,A,n;if(t.d!=-1)return t.d;for(t.d=0,A=0;A<t.g.a.length+t.f.a.length;A++)for(n=A<t.g.a.length?G(t.g,A):G(t.f,A-t.g.a.length),e=0;e<n.r;e++)t.d<w.Math.abs(n.A[e])&&(t.d=w.Math.abs(n.A[e]));return t.d}function v5(t,e){ni();var A;return A=c(Oe,uA,6,4,15,1),A[0]=E4*((t&QP)>>16),A[1]=E4*((t&DP)>>8),A[2]=E4*(t&255),D_(A,e),t&On|Bt(w.Math.round(A[0]*255))<<16|Bt(w.Math.round(A[1]*255))<<8|Bt(w.Math.round(A[2]*255))}function F5(t,e,A,n,P,r){var i,f,D,Q,o;if(P!=0)for(z1(t)===z1(A)&&(t=t.slice(e,e+P),e=0),D=A,f=e,Q=e+P;f<Q;)i=w.Math.min(f+fP,Q),P=i-f,o=t.slice(f,i),o.splice(0,0,n,r?P:0),Array.prototype.splice.apply(D,o),f=i,n+=P}function s2(t,e){var A;if(e<0)throw At(new I8(\"Negative exponent\"));if(e==0)return X2;if(e==1||VT(t,X2)||VT(t,vr))return t;if(!SQ(t,0)){for(A=1;!SQ(t,A);)++A;return RP(zK(A*e),s2(tT(t,A),e))}return HY(t,e)}function _X(t,e,A){var n,P,r,i,f;for(f=tf(new WA(!0),t),P=-1,r=0;r<f.r;r++)if(n=f.u==null||f.u[r]==null?null:on((i=f.u[r],w0(),i)),n!=null&&n.endsWith(\"*\")){P=r;break}return P>=0?CR(f,P,e,A):c(ft,Dt,2,0,6,1)}function Pj(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=0;D<8;D++)if(bs(t.k[A][Q][D],t.e[P][f][D])!=0)return D<<8;return O1}function rj(t,e,A,n){var P;for(P=0;P<t.s;P++)if(t.F[0][P]==e&&t.F[1][P]==A||t.F[0][P]==A&&t.F[1][P]==e)return h8(t,P,n),t.U=0,P;return t.s>=t.O&&QQ(t,t.O*2),t.F[0][t.s]=e,t.F[1][t.s]=A,t.I[t.s]=n,t.G[t.s]=0,t.H[t.s]=0,t.U=0,t.s++}function ij(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=e.length,P=e,r=0,i=P.length;r<i;++r)n=P[r],L=t.a[n]&d1,(L==0||L>s)&&(t.a[n]&=GP,t.a[n]|=s);for(D=A,Q=0,o=D.length;Q<o;++Q)f=D[Q],L=t.c[f]&d1,(L==0||L>s)&&(t.c[f]&=GP,t.c[f]|=s)}function Ss(t,e){this.a=new AF(this),this.e=new Pm,this.b=new Lv,this.c=new sv,this.d=new eF(this),this.f=new bv,this.i=new yv,this.g=new Uv,this.j=new vF,this.k=new nd(this,t),this.n=new tF(this),this.o=new Pd(this,e),this.p=new Gv}function EQ(t,e,A){var n,P,r,i,f,D;return n=t.i[1].a-t.i[0].a,P=t.i[1].b-t.i[0].b,i=(t.i[0].a+t.i[1].a)/2,f=(t.i[0].b+t.i[1].b)/2,n==0?P<0^A>f:P==0?n<0^e>i:(r=-n/P,D=(t.i[0].a+r*r*e-r*A+r*t.i[0].b)/(1+r*r),n<0^D>i)}function ui(t){var e,A,n;for(n=!1,e=0;e<t.r;e++)t.D[e]==-1&&(n=!0,iQ(t,t.A[e]));for(A=0;A<t.s;A++)t.I[A]==512?n=!0:(t.D[t.F[0][A]]==-1||t.D[t.F[1][A]]==-1)&&(t.I[A]=512,n=!0);return n?(t.U=0,Rf(t)):null}function $X(t,e,A){var n,P,r,i,f,D;for(f=c(Pt,it,6,t.g,16,1),A[0]=e,D=1,f[e]=!0,r=0;r<D;r++)for(i=0;i<t.k[A[r]];i++)P=t.n[A[r]][i],((t.G[P]&64)!=0||dt(t,P)==2||oi(t,P))&&(n=t.j[A[r]][i],f[n]||(A[D++]=n,f[n]=!0));return D}function aX(t,e,A){var n,P,r,i,f;for(f=c(I8t,c0,162,A,0,1),i=c(F,m,6,A,15,1),r=0;r<A;r++)f[r]=new Fw;for(n=0;n<t.V.r;n++)f[e[n]].a+=mt(t.V,n),f[e[n]].b+=Rt(t.V,n),++i[e[n]];for(P=0;P<A;P++)f[P].a/=i[P],f[P].b/=i[P];return f}function tZ(t){var e,A,n,P;for(P=!1,A=0;A<t.V.r;A++)if(i0(t.V,A)){P=!0;break}if(n=Sm(t,P),n){for(K1(t),e=0;e<t.V.r;e++)(!P||i0(t.V,e))&&(de(t.V,e,2*n.a-mt(t.V,e)),Ve(t.V,e,2*n.b-Rt(t.V,e)));t.eb=w.Math.max(t.eb,1),P1(t.k)}}function fj(t,e,A){var n;R3();var P;this.a=new pR(new _A,t,A,this),GI(this.a,new i7(this)),this.c=e,this.f=A,this.e=new Lh,Qh(this.e,this.a),this.d=new b7,Qh(this.d,this.a),P=(n=this.Bc(),n.getClipboardHandler()),mI(this.a,new u7(P))}function Dj(t){Yp.call(this,t),this.d=c(F,m,6,this.v.length,15,1),this.c=c(F,m,6,this.u.length,15,1),this.a=c(RS,H2,168,1,0,1),this.a[0]=Xu(this,c(F,m,6,this.v.length,15,1),c(F,m,6,this.u.length,15,1)),this.b=-1}function k5(t){var e,A;for(this.i=$n(t),S_(this),ut(this.i,7),this.g=c(Pt,it,6,this.i.i,16,1),this.f=c(Pt,it,6,this.i.g,16,1),e=0;e<this.i.g;e++)A=eQ(X(this.i,e))[0],this.f[e]=P0(this.i,e)<A;NX(this),J_(this),bW(this),ZZ(this)}function eZ(t){t=t||{};var e=0;return t.matchAtomCharge===!0&&(e|=1),t.matchAtomMass===!0&&(e|=2),t.matchDBondToDelocalized===!0&&(e|=4),(t.matchAromDBondToDelocalized===!0||t.matchAromDBondToDelocalized===void 0)&&(e|=8),e}function uj(t,e){var A,n,P,r,i,f,D;for(D=kn(t.R),A=0;A<D.j.a.length;A++)if(D.e[A]&&wA(D,A,e)){for(P=G(D.j,A),r=0,i=P.length;r<i;++r)if(n=P[r],n!=e){for(f=0;f<O(t.R,n);f++)if(oi(t.R,Nt(t.R,n,f)))return!0}return!1}return!1}function cf(t,e,A){var n,P,r;if(n=X(t.j,e),n>=5&&n<=8||n==15||n==16||n==33||n==34||n==52){if(r=yf(t.j,e),r!=0)return!0;if(P=R1(t.j,e),n==5&&P>=0)return A&&b0(t.j,e,P-1),!0;if(n!=5&&P<=0)return A&&b0(t.j,e,P+1),!0}return!1}function AZ(t,e,A){var n,P,r,i,f;for(f=!1,i=1,e[A]=i,n=!0;n;){for(n=!1,P=0;P<t.b;P++)if(e[P]==i)for(r=0;r<t.b;r++)e[r]==0&&lz(t,P,r)&&(t.c[r]==-2?(e[r]=i+1,n=!0):t.c[r]!=t.c[A]&&(e[r]=i+1,f=!0));++i}return f}function nZ(t,e){var A;for(this.o=e,this.k=c(q2,V2,28,t.k.length,0,1),A=0;A<this.k.length;A++)this.k[A]=new pu(t.k[A]);t.j!=null&&(this.j=hL(t.j,t.j.length)),this.p=t.p==null||t.p.endsWith(\" (copy)\")?t.p:Su(t.p,\" (copy)\"),this.n=NaN}function Qj(t,e){var A,n,P,r,i;for(r=c(gS,c0,44,8,0,1),i=0;i<=7;i++)for(r[i]=new Ji(new _l),A=0;A<t.g;A++)P=e[A][i],P!=null&&(n=Be(r[i],P),n=n==null?c(F,m,6,1,15,1):Mn(n,n.length+1),n[n.length-1]=A,We(r[i],P,n));return r}function PZ(t,e){var A,n,P;if(t.t!=-1&&(nA(e,(P=KD(e),P!=0?P:el)),_F(t,e,t.t),t.w==19&&(n=M1(t.V,t.t),n!=0)))for(A=0;A<t.V.g;A++)A!=t.t&&M1(t.V,A)==n&&_F(t,e,A);t.u!=-1&&(nA(e,(P=KD(e),P!=0?P:el)),xX(t,e,t.u)),t.v&&t.v.Mb(e)}function rZ(t,e){var A,n,P,r,i;if(t.D[e]!=8||t.k[e]!=1)return!1;if(A=t.j[e][0],t.D[A]==15){for(i=t.k[A],n=0;n<i;n++)if(P=t.j[A][n],P!=e&&t.D[P]==8&&(r=o1(t,A,P),t.I[r]==2))return!0}return!1}function m5(t,e){var A,n;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=w.Math.min(t.length,e.length),n=0;n<A;n++)if((t[n]&GP)!=(e[n]&GP))return(t[n]&GP)<(e[n]&GP)?-1:1;return t.length==e.length?0:t.length<e.length?-1:1}function iZ(t,e,A,n,P){var r,i,f,D;if(z1(t)===z1(e)&&n==P){cR(t,n,A);return}for(f=0;f<n;f++){for(i=0,r=t[f],D=0;D<P;D++)i=at(at(yn(V(r,g1),V(e[D],g1)),V(A[f+D],g1)),V(Ot(i),g1)),A[f+D]=Ot(i),i=j0(i,32);A[f+P]=Ot(i)}}function b5(t,e){var A,n,P,r,i;for(r=E3(e),n=(A=t.a.get(r),A??c(qn,A0,1,0,5,1)),i=0;i<n.length;i++)if(P=n[i],m3(e,P.hd()))return n.length==1?(n.length=0,t.a.delete(r)):n.splice(i,1),--t.c,++t.b.b,P.jd();return null}function fZ(t){var e,A,n,P,r;for(A=0;A<t.R.g;A++)AA(t.e[A],A),a1(t.e[A],t.c+1,yn(2,t.f[A]));for(r=c(F,m,6,t.U+1,15,1),n=0;n<t.R.g;n++)++r[t.f[n]];for(P=1;r[P]==1;)++P;for(e=0;e<t.R.g;e++)if(t.f[e]==P){se(t.e[e],1);break}t.U=tP(t)}function j5(t,e){var A,n,P;if(t.a==null){for(t.a=c(Ut,Tt,6,t.o.r,15,1),t.d=c(Ut,Tt,6,(s8(),Sl).length,15,1),P=new Zt(e);P.a<P.c.a.length;)n=_t(P),n.g&&(t.d[n.vd()]+=n.td(t,t.a));for(t.e=0,A=0;A<t.o.r;A++)t.e+=t.a[A];t.c=-1}}function DZ(t,e){e=e||{};var A=e.smartsMode||\"smiles\",n=e.skipCoordinateTemplates||!1,P=e.makeHydrogenExplicit||!1,r=e.noCactvs||!1,i=e.singleDotSeparator||!1,f=e.createSmartsWarnings||!1;t.zc(A,n,P,r,i,f)}function SQ(t,e){var A,n,P;if(e==0)return(t.a[0]&1)!=0;if(e<0)throw At(new I8(\"Negative bit address\"));if(P=e>>5,P>=t.d)return t.e<0;if(A=t.a[P],e=1<<(e&31),t.e<0){if(n=ek(t),P<n)return!1;n==P?A=-A:A=~A}return(A&e)!=0}function oj(t,e,A,n,P,r,i){var f,D,Q;f=A==-1?(i[e].a-i[t.B[0]].a)/8:i[e].a-i[A].a,D=A==-1?(i[e].b-i[t.B[0]].b)/8:i[e].b-i[A].b,qt(t,Bt((n+f)/P),r),qt(t,Bt((n+D)/P),r),t.jb&&(Q=A==-1?(i[e].c-i[t.B[0]].c)/8:i[e].c-i[A].c,qt(t,Bt((n+Q)/P),r))}function Uj(t,e){var A,n,P,r;if(t.d!=e.d)return t.d>e.d?1:-1;for(P=t.a.length,r=e.a.length,A=w.Math.min(P,r),n=0;n<A;n++)if(--P,--r,t.a[P]!=e.a[r])return t.a[P]>e.a[r]?1:-1;return P!=r?P>r?1:-1:t.b!=e.b?t.b>e.b?1:-1:0}function Lj(t,e){var A,n,P,r;if(t.L){if(gt(V(t.C[e],1),0))return!1;if(t.w!=null&&t.w[e]!=null){for(n=t.w[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A==1||A>=5&&A<=9||A>=14&&A<=17||A>=32&&A<=35||A>=52&&A<=53))return!1}}return yq(t.D[e])}function uZ(t){var e,A,n,P,r,i;if(!wl)return xV;for(r=0,n=0,i=new VD(1),A=new _A,P=0;P<gi.a.a.length;P++)l2(new WA(!1),A,Eh(gi,P)),GA(i,t),MA(i,A),CA(i,1,i.c)>0&&(r+=jg(gi,P),++n);return e=n==0?-1:r/w.Math.sqrt(n),e+\"\t\"+n+\"\t\"+t.g}function R5(t,e){var A,n,P,r,i;return e&=63,A=t.h,n=(A&B8)!=0,n&&(A|=-1048576),e<22?(i=A>>e,r=t.m>>e|A<<22-e,P=t.l>>e|t.m<<22-e):e<44?(i=n?Pn:0,r=A>>e-22,P=t.m>>e-22|A<<44-e):(i=n?Pn:0,r=n?z0:0,P=A>>e-44),G0(P&z0,r&z0,i&Pn)}function sj(t,e){var A,n,P,r;for(r=0,n=new qB;r<e;){try{P=X1(t.i)}catch(i){if(i=_1(i),Yt(i,79))break;throw At(i)}if(P==null)break;P.startsWith(Uo)&&++r,P.startsWith(\">\")&&(A=IR(P),A!=null&&pz(n,A))}t.d=Qf(n.b,c(ft,Dt,2,0,6,1))}function wf(t,e,A,n,P,r){for(var i,f,D;t.r+n>t.N;)VQ(t,t.N*2);for(;t.s+n>t.O;)QQ(t,t.O*2);return i=tn(t,e,A),i!=-1?UR(t,i,n,P,r):(f=kf(t,e,A),f!=-1?_Q(t,f,n,P,r):(i=te(t,e,A,0),D=l1*(n-2)/n,U6(t,i,n,i,P,0,l1-D,r),t.U=0,!0))}function yj(t){var e,A,n,P,r,i,f,D,Q,o;for(D=0,n=t,r=0,f=n.length;r<f;++r)e=n[r],e==-1&&++D;if(D!=0)for(o=t,t=c(F,m,6,o.length-D,15,1),Q=0,A=o,P=0,i=A.length;P<i;++P)e=A[P],e!=-1&&(t[Q++]=e);return t.sort(pe(Q0.prototype.ld,Q0,[])),t}function QZ(t){var e,A,n,P;if(A=new U8,t.g.a.length!=0){for(P=new Wr(G(t.g,0)),e=1;e<t.g.a.length;e++)CD(P,G(t.g,e));Ft(A.g,P),A.d=-1}if(t.f.a.length!=0){for(n=new Wr(G(t.f,0)),e=1;e<t.f.a.length;e++)CD(n,G(t.f,e));Ft(A.f,n),A.d=-1}return A}function oZ(t,e){var A,n,P,r,i;for(t.i=c(F,m,6,t.g.g,15,1),n=0;n<t.f.g;n++)M1(t.f,n)!=0&&(t.i[e[M1(t.f,n)]]=H0(t.f,n));if(i=c(F,m,6,t.g.r,15,1),r=Ur(t.g,i,!1,!1),r>1)for(P=c(F,m,6,r,15,1),A=0;A<t.g.g;A++)t.i[A]|=P[i[A]]++<<5}function UZ(t,e){return!e&&(e={mode:3}),e=Object.assign({},e),\"ensureCoordinates\"in e?(e.ensureCoordinates=!!e.ensureCoordinates,NO(t,e.ensureCoordinates)):(typeof e.mode!==s9&&(e.mode=3),e.mode=Math.trunc(e.mode),dO(t,e.mode))}function gf(t,e,A,n){var P;if(A==null){t.w!=null&&(t.w[e]=null);return}if(A.length==1&&!n){P=A[0],t.D[e]!=P&&mf(t,e,P,0,-1,0),t.w!=null&&(t.w[e]=null);return}t.w==null&&(t.w=c(F,u0,7,t.N,0,2)),t.w[e]=A,n&&(t.C[e]=J(t.C[e],1)),t.U=0,t.L=!0}function LZ(t,e){var A,n,P,r,i,f,D;for(A=c(Ut,Tt,6,Ct(t.L,e),15,1),P=0;P<Ct(t.L,e);P++)A[P]=_0(t.L,e,_(t.L,e,P));for(A.sort(pe(ki.prototype.ld,ki,[])),r=sk(A,0),i=Gm(A,0,r),n=1;n<A.length;n++)f=sk(A,n),D=Gm(A,n,f),i<D&&(i=D,r=f);return r}function sZ(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=new wU(new fD),Q=e,o=0,L=Q.length;o<L;++o)for(D=Q[o],P=A,r=0,i=P.length;r<i;++r)n=P[r],f=c(F,m,6,2,15,1),f[0]=t.J[D],f[1]=t.C[n],We(s.a,f,(Er(),jo))==null;return JT(s,c(F,u0,7,0,0,2))}function u9(t,e){var A,n,P,r;if(r=t.d.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=vB(t,e,G(t.d,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return P<r&&vB(t,e,G(t.d,P))>0&&++P,-(P+1)}function yZ(t,e,A,n){var P,r,i,f,D,Q;if(P=t.e[e],f=c(F,m,6,P,15,1),Q=W5(t,e,A,n,f),Q==3)return!1;for(i=(t.v[e]&3)==Q?257:129,D=0;D<P;D++)(f[D]&1)==1&&(r=t.n[e][A[D]],t.I[r]=i,t.F[0][r]!=e&&(t.F[1][r]=t.F[0][r],t.F[0][r]=e));return!0}function lZ(t){var e,A,n,P;for(n=new Zt(t.g);n.a<n.c.a.length;)if(e=_t(n),e.r!=0)return!1;for(P=new Zt(t.f);P.a<P.c.a.length;)if(e=_t(P),e.r!=0)return!1;for(A=new Zt(t.a);A.a<A.c.a.length;)if(e=_t(A),e.r!=0)return!1;return!0}function hZ(t,e){var A,n,P;if(t.f=e,Bg(t.e,t.c,t.f),CA(t.e,4,8)==0)return t.a=null,0;for(t.a=t.e.F,A=t.a.a.length-1;A>=0;A--)for(P=G(t.a,A),n=0;n<P.length;n++)if(P[n]!=-1&&t.b[n]>0&&t.b[n]>_i(t.f,P[n])){cA(t.a,A);break}return t.a.a.length}function lj(t,e,A){var n,P,r,i,f;for(this.a=c(F,m,6,t.g,15,1),this.a[0]=e,A[e]=!0,r=0,i=0;r<=i;){for(P=O(t,this.a[r]),f=0;f<P;f++)n=_(t,this.a[r],f),w.Math.abs(t.A[n])==0&&n0(V(t.C[n],Pe),0)&&!A[n]&&(this.a[++i]=n,A[n]=!0);++r}}function TZ(t,e,A,n,P){var r,i,f,D,Q,o,L,s;return r=nP(e.D[A]),i=nP(e.D[P]),f=r>i?4:3,D=(Q=nP(e.D[A]),o=nP(e.D[n]),L=nP(e.D[P]),Q>L&&(Q=(s=U1(L),U1(L=Q),s).a),f9(B(d(F,1),m,6,15,[1,0,2]),B(d(F,1),m,6,15,[o,Q,L]),t)),D>=0?V0(t.a[D][f]):0}function hj(t,e,A){var n,P,r;if(t.p[e]==2||(t.p[e]==1||xP(t,e,!0))&&t.k[e]!=3||t.p[e]==0&&t.k[e]!=4)return 1;for(r=-2,P=0;P<t.k[e];P++)if(n=t.j[e][P],n!=A){if(r==-2)r=zU(t.d,n);else if(r!=zU(t.d,n))return 1}return t.k[e]-1}function cZ(t,e){var A,n,P,r,i;if(t.i.L){if(gt(V(h0(t.i,e),1),0))return!0;if(i=IA(t.i,e),i!=null){for(n=i,P=0,r=n.length;P<r;++P)if(A=n[P],A==5||A==6||A==7||A==8||A==15||A==16||A==33||A==34)return!0;return!1}}return _v(X(t.i,e))}function wZ(t,e,A){var n,P,r,i,f,D,Q,o,L;for(L=c(XA,re,6,1+t.d[t.d.length-1],14,1),n=0,i=e,D=0,o=i.length;D<o;++D)P=i[D],L[t.d[n]]=at(L[t.d[n]],P<<t.b[n]),++n;for(r=A,f=0,Q=r.length;f<Q;++f)P=r[f],L[t.d[n]]=at(L[t.d[n]],P<<t.b[n]),++n;return L}function p5(t,e){var A,n,P;this.a=t.F[0][e],this.b=t.F[1][e],n=M1(t,this.a),P=M1(t,this.b),n<P?(this.d=n,this.e=P):(this.d=P,this.e=n),this.c=t.H[e]&31,A=t.I[e]&127,A==16?this.c|=16:A==2?this.c|=2:A==4?this.c|=4:this.c|=1,this.i=(Dr(),ml)}function Is(t,e){var A,n,P;if(A=K(t.V,0,e),v0(t.V,A)!=0)return xi(t.V,A)||v0(t.V,A)!=1&&v0(t.V,A)!=2?-1:A;if(e0(t.V,A)==1){for(P=0;P<O(t.V,A);P++)if(EA(t.V,A,P)==2&&(n=_(t.V,A,P),e0(t.V,n)==2&&(v0(t.V,n)==1||v0(t.V,n)==2)))return n}return-1}function gZ(t){if(t.Xc()){var e=t.c;e.Yc()?t.n=\"[\"+e.k:e.Xc()?t.n=\"[\"+e.Vc():t.n=\"[L\"+e.Vc()+\";\",t.b=e.Uc()+\"[]\",t.j=e.Wc()+\"[]\";return}var A=t.g,n=t.d;n=n.split(\"/\"),t.n=Ls(\".\",[A,Ls(\"$\",n)]),t.b=Ls(\".\",[A,Ls(\".\",n)]),t.j=n[n.length-1]}function Tj(t){var e,A,n,P;e=t.M!=0?t.M:t.D!=0?t.D:-1,t.t=(ni(),A=(e&QP)>>16,n=(e&DP)>>8,P=e&255,(A+Bt(w.Math.round(Hf*(92-A)))<<16)+(n+Bt(w.Math.round(Hf*(160-n)))<<8)+P+Bt(w.Math.round(Hf*(255-P)))),t.u=$s(vy,e),t.H=-24321,t.I=-6291392}function IQ(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.j.i;A++)if(t.e[A]){for(r=!1,P=0;P<2;P++){for(n=K(t.j,P,A),e=!1,i=0;i<O(t.j,n);i++)if(A!=Nt(t.j,n,i)&&t.e[Nt(t.j,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,u2(t,A))}while(f)}function M5(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.k.i;A++)if(t.g[A]){for(r=!1,P=0;P<2;P++){for(e=!1,n=K(t.k,P,A),i=0;i<O(t.k,n);i++)if(A!=Nt(t.k,n,i)&&t.g[Nt(t.k,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,MQ(t,A))}while(f)}function cj(t){var e,A,n,P,r,i;for(t.e=c(Ut,Tt,6,t.d,15,1),A=new Zt(t.a);A.a<A.c.a.length;)e=_t(A),e.ec(t.i,t.e);for(i=-1e8,n=.1,r=0;r<t.d;r++)t.e[r]*=n,t.e[r]>i&&(i=t.e[r]);if(i>10){for(;i*n>10;)n*=.5;for(P=0;P<t.d;P++)t.e[P]*=n}return n}function dZ(t){t=t||{};var e=t.countMode||fE;switch(e){case fE:return 4;case\"existence\":return 1;case\"firstMatch\":return 2;case\"separated\":return 3;case\"rigorous\":return 5;case\"unique\":return 6;default:throw new Error(\"invalid count mode: \"+e)}}function xs(t,e){var A,n,P,r,i,f;return r=t.a*ol+t.b*1502,f=t.b*ol+11,A=w.Math.floor(f*oE),r+=A,f-=A*N4,r%=N4,t.a=r,t.b=f,e<=24?w.Math.floor(t.a*Mc[e]):(P=t.a*(1<<e-24),i=w.Math.floor(t.b*Cc[e]),n=P+i,n>=Fo&&(n-=w8),n)}function wj(t,e){var A,n,P,r;if(t.L){if(gt(V(t.C[e],1),0))return!1;if(t.w!=null&&t.w[e]!=null){for(n=t.w[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=21&&A<=30||A>=39&&A<=48||A==57||A>=72&&A<=80||A==89||A>=104&&A<=112))return!1}}return Pz(t.D[e])}function BZ(t,e,A,n,P,r){var i,f,D,Q,o,L,s;for(n8(t.k[A],n,P,r),s=t.o,L=c(Pt,it,6,s.r,16,1),D=c(F,m,6,s.r,15,1),D[0]=A,L[e]=!0,L[A]=!0,f=0,Q=0;f<=Q;){for(o=0;o<s.e[D[f]];o++)i=s.j[D[f]][o],L[i]||(L[i]=!0,D[++Q]=i,n8(t.k[i],n,P,r));++f}}function J0(t,e,A,n){var P;if(e==A)return-1;for(P=0;P<t.s;P++)if(t.F[0][P]==e&&t.F[1][P]==A||t.F[0][P]==A&&t.F[1][P]==e)return t.I[P]<n&&(t.I[P]=n),P;return t.s>=t.O&&QQ(t,t.O*2),t.F[0][t.s]=e,t.F[1][t.s]=A,t.I[t.s]=n,t.G[t.s]=0,t.H[t.s]=0,t.U=0,t.s++}function C5(t,e,A){var n,P,r,i,f,D;if(e==A)return 0;for(ut(t,1),i=c(F,m,6,t.r,15,1),r=c(F,m,6,t.r,15,1),r[0]=e,i[e]=1,P=0,f=0;P<=f;){for(D=0;D<t.e[r[P]];D++){if(n=t.j[r[P]][D],n==A)return i[r[P]];i[n]==0&&(r[++f]=n,i[n]=i[r[P]]+1)}++P}return-1}function xQ(t,e){var A,n;if(ut(t,1),t.k[e]==2&&t.o[e][0]==2&&t.o[e][1]==2){for(A=0;A<2;A++)for(n=0;n<t.e[t.j[e][A]];n++)if(_9(t,t.n[t.j[e][A]][n],t.j[e][A]))return t.n[t.j[e][A]][n]}else for(A=0;A<t.e[e];A++)if(_9(t,t.n[e][A],e))return t.n[e][A];return-1}function H5(t,e,A){var n,P,r,i,f,D;for(ut(t,1),r=c(F,m,6,t.g,15,1),D=c(Pt,it,6,t.g,16,1),r[0]=e,r[1]=A,D[e]=!0,D[A]=!0,P=1,i=1;P<=i;){for(f=0;f<t.k[r[P]];f++){if(n=t.j[r[P]][f],n==e&&P!=1)return-1;D[n]||(D[n]=!0,r[++i]=n)}++P}return i}function y2(t,e){var A;return e==null?null:(A=Be(t.c,e),A||((e.endsWith(\"<\")||e.endsWith(\"-\"))&&(A=Be(t.c,e.endsWith(\"<\")?hA(e,0,e.length-1)+\">\":e.endsWith(\"-\")?hA(e,0,e.length-1)+\"+\":e),A)?(A=new tp(A),We(t.c,e,A),A):null))}function vZ(t,e,A,n,P,r){var i,f,D,Q,o;for(f=new n1,i=L$(t,e),D=0;D<e.r;D++)for(Q=0;Q<D+1;Q++)o=aG(A,new zi(D,Q)),(o==(P9(),wi)||o==Y2)&&w.Math.abs(i[D])>vo&&w.Math.abs(i[Q])>vo&&pn(new p3(e,D,Q))<n&&Ft(f,new VF(e,D,Q,o,i[D],i[Q],P,r));return f}function FZ(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=2;D<8;D++)if(t.p[A][Q][D]==null||bs(t.p[A][Q][D],t.i[P][f][D])!=0)return D-2<<8;return 1536}function kZ(t,e,A,n){var P,r,i,f,D,Q,o;for(o=n.a.length,0<o?n.a=hA(n.a,0,0):0>o&&(n.a+=z8(c(Fr,re,6,-o,15,1))),D=mn(t.k,e)&&(t.j&4)==0,r=A,i=0,f=r.length;i<f;++i)P=r[i],n.a.length!=0&&(n.a+=\",\"),Q=(J1(),a0)[P],q(n,D?Q.toLowerCase():Q);return n.a}function mZ(t){var e,A;for(A=new gD,e=0;e<t.length;e++)switch(zt(e,t.length),t.charCodeAt(e)){case 38:A.a+=\"&&\";break;case 9:A.a+=\"&09\";break;case 10:A.a+=\"&0A\";break;case 32:A.a+=\"&20\";break;default:EB(A,(zt(e,t.length),t.charCodeAt(e)))}return A.a}function bZ(t,e,A,n,P){var r,i,f,D;if(t.j.length==0||t.n.a.length==0)return null;for(D=c(Pt,c0,12,e,0,2),f=c(Pt,it,6,n,16,1),i=0;i<P.length;i++)P[i]!=-1&&M1(t.f,i)==0&&(f[P[i]]=!0);for(r=0;r<A.length;r++)A[r]!=-1&&M1(t.g,r)==0&&(D[A[r]]=f);return D}function V5(t,e,A,n,P,r){var i,f,D,Q,o;for(n8(t.k[e],n,P,r),o=t.o,D=0;D<o.e[e];D++){if(i=o.j[e][D],f=!1,A!=null){for(Q=0;Q<A.length;Q++)if(i==A[Q]){f=!0;break}}f||(o.e[i]==1?n8(t.k[i],n,P,r):LA(o,o.n[e][D])?n8(t.k[i],n/3,P/3,r/3):BZ(t,e,i,n,P,r))}}function l2(t,e,A){var n,P,r,i;if(A==null||A.length==0){QT(t,e,null,null);return}n=A.indexOf(p0(32)),n>0&&n<A.length-1?QT(t,e,ln((r=(Mt(0,n,A.length),A.substr(0,n)),w0(),r)),ln((i=(zt(n+1,A.length+1),A.substr(n+1)),i))):QT(t,e,ln((P=A,w0(),P)),null)}function jZ(t,e){var A,n,P,r;for(t.f=z(e,0)==0?new n2:new $i(e),n=new Hu(t.d),A=null,P=0;P<12&&!(gt(t.n,0)&&(q1(),I1(E1(Date.now()),t.n)));P++){if(aj(t,n)||z(e,0)!=0)return n;A?A.e>n.e&&(r=A,A=n,n=r):(A=n,n=new Hu(t.d))}return A}function h2(t,e){var A,n,P,r,i,f;if(!t.b)return!1;for(P=!1,r=t.b.a.length-1;r>=0;r--)if(n=!1,i=G(t.b,r),i.a==2?n=e$(t,i.b,i.c,i.d,e):i.a==1&&(n=q_(t,i.b,e)),n){for(er(t.b,i),f=0;f<t.g[i.b].length;f++)A=t.g[i.b][f],t.n[A]=!1;P=!0}return P}function NQ(t,e,A){return dt(t,e)!=1?0:16-t.e[A]+16*w.Math.max(0,w.Math.min(9,t.q&&e<t.i?TP(t.q,e):0)-2)+((t.I[e]&384)==0||t.F[0][e]!=A?g8:0)+((t.v[A]&3)==0?S0:0)+(t.D[A]==1?O1:0)+(t.e[A]==1?Qe:0)+((t.G[e]&64)!=0?0:512)+(t.D[A]!=6?256:0)}function gj(t,e,A,n){var P,r,i,f,D,Q,o;for(P=c(F,m,6,O(t.i,A),15,1),f=0,i=0;i<O(t.i,A);i++)P[f]=_(t.i,A,i),!n[P[f]]&&ny(t,e,P[f])&&++f;if(f==0)return-1;if(f==1)return P[0];for(D=-1,Q=Et,r=0;r<f;r++)o=Gj(t.i,e,P[r],Et,n),o<Q&&(Q=o,D=P[r]);return D}function RZ(t,e){var A,n,P;e.j==1?N9(t.s):e.j==0?(XK(t),t.v=!0,N9(t.s)):z1(e.k)===z1(t.d)||z1(e.k)===z1(t.q)?Aj(t):z1(e.k)===z1(t.p)&&(P=F0(t.p),t.t!=P&&(n=t.t+F0(t.o),A=wT(t,P),n<P?$t(t.o,0):n<P+A?$t(t.o,n-P):$t(t.o,A-1),t.t=P))}function pZ(t,e){var A,n,P,r;return A=G9(t.R,e),n=sf(t.R,e,!1),P=sf(t.R,e,!0),r=-1,n!=P?A!=-1&&A>n?r=A<<24>>24:r=n<<24>>24:A!=-1?(A>P||A<P&&A>=G1(t.R,e))&&(r=A<<24>>24):!fs(t.R,e)&&Gh(t.R,e)!=0&&(r=G1(t.R,e),r-=Cu(t.R,e,r)),Iq(t,e,r),r}function MZ(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=G8(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length))*(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length)).s,A+=(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length)).s;return A!=0?A/e:1}function CZ(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=G8(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length))*(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length)).s,A+=(n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length)).s;return A!=0?A/e:1}function Ae(t,e){var A,n,P,r;if(t.L){if(gt(V(t.C[e],1),0))return!1;if(t.w!=null&&t.w[e]!=null){for(n=t.w[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=3&&A<=4||A>=11&&A<=13||A>=19&&A<=31||A>=37&&A<=51||A>=55&&A<=84||A>=87&&A<=112))return!1}}return zz(t.D[e])}function Ns(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return f8(t.c,0,e),0;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=a9(e,G(t.c,P)),A==0)return-1;if(n==0)break;A<0?P-=n:P+=n}return P<r&&a9(e,G(t.c,P))>0&&++P,f8(t.c,P,e),P}function HZ(t){var e,A,n,P,r,i,f,D,Q;if(Q=1,n=dP(t,t.r,t.s,(J1(),Bn)),n!=0)(n<1||n>3)&&(Q=1.5/n);else{for(D=wM,e=1;e<t.r;e++)for(A=0;A<e;A++)r=t.K[A].a-t.K[e].a,i=t.K[A].b-t.K[e].b,f=t.K[A].c-t.K[e].c,P=r*r+i*i+f*f,D>P&&(D=P);Q=3/w.Math.max(.75,D)}return Q}function VZ(t){var e,A,n,P;for(A=0;A<t.R.g;A++)AA(t.e[A],A),a1(t.e[A],2*t.c+4,Wt(t.f[A],t.c+4));for(P=!1,e=0;e<t.R.g;e++)P=P|Qy(t,e,3);for(n=0;n<t.R.i;n++)P=P|$Q(t,n,3);if(!P)return!1;for(;t.U<t.R.g&&(P=Fa(t),!!P);)g2(t),t.P&&h2(t.P,t.f);return!0}function dj(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;for(r=e.a[A],f=e.a[n],D=e.a[P],o=em(t.a,e,A,n,P),s=-1,L=0;L<5&&s<0;L++)i=t.a.g.a[r-1][L],Q=t.a.g.a[D-1][L],i>Q&&(i=(y=U1(Q),U1(Q=i),y).a),s=f9(B(d(F,1),m,6,15,[2,1,3,0]),B(d(F,1),m,6,15,[f,i,Q,o]),t);return s}function EZ(t,e,A,n,P){var r,i,f;for(r=0,i=0,f=0;f<n;f++)r=(Lr(),at(yn(V(A[f],g1),V(P,g1)),V(Ot(r),g1))),i=at(Y1(V(t[e+f],g1),V(r,g1)),i),t[e+f]=Ot(i),i=O0(i,32),r=j0(r,32);return i=at(Y1(V(t[e+n],g1),r),i),t[e+n]=Ot(i),Ot(O0(i,32))}function SZ(t,e,A,n){var P,r,i,f,D,Q;for(i=c(F,m,6,t.f.r,15,1),f=c(F,m,6,t.f.r,15,1),i[0]=A,i[1]=e,f[A]=1,f[e]=2,r=1,D=1;r<=D;){for(Q=0;Q<O(t.f,i[r]);Q++){if(P=_(t.f,i[r],Q),P==n)return 1+f[i[r]];f[P]==0&&Gi(t.f,P)&&(i[++D]=P,f[P]=f[i[r]]+1)}++r}return 0}function IZ(t,e,A,n){var P,r,i,f,D,Q,o;for(ut(t,1),n==null&&(n=c(Pt,it,6,t.r,16,1)),D=c(F,m,6,t.r,15,1),D[0]=e,n[e]=!0,i=0,Q=0,f=1;i<=Q;){for(r=A?t.j[D[i]].length:t.e[D[i]],o=0;o<r;o++)P=t.j[D[i]][o],P<n.length&&!n[P]&&(D[++Q]=P,n[P]=!0,++f);++i}return f}function Gs(t,e){var A,n,P,r,i,f;for(i=0;i<2;i++)if(A=K(t.i,i,e),X(t.i,A)==7&&O(t.i,A)==2&&(n=K(t.i,1-i,e),X(t.i,n)==6)){for(f=0;f<O(t.i,n);f++)if(P=_(t.i,n,f),r=Nt(t.i,n,f),(X(t.i,P)==8||X(t.i,P)==16)&&dt(t.i,r)==2&&O(t.i,P)==1)return!0}return!1}function xZ(t){var e,A,n;return A=t.l,(A&A-1)!=0||(n=t.m,(n&n-1)!=0)||(e=t.h,(e&e-1)!=0)||e==0&&n==0&&A==0?-1:e==0&&n==0&&A!=0?WL(A):e==0&&n!=0&&A==0?WL(n)+22:e!=0&&n==0&&A==0?WL(e)+44:-1}function GQ(t,e,A,n,P){t[e[0]][e[1]]?t[e[0]][e[1]].a.length==2||t[e[0]][e[1]].c<P?t[e[0]][e[1]]=new hT(e,A,n,P):t[e[0]][e[1]].c==P&&(t[e[0]][e[1]].a[0]=(t[e[0]][e[1]].a[0]+n)/2,t[e[0]][e[1]].b=gX(t[e[0]][e[1]].b,A)):t[e[0]][e[1]]=new hT(e,A,n,P)}function NZ(t,e,A){var n,P,r,i,f,D,Q;if(Ct(t.d,A)==1&&(r=_(t.d,A,0),pU(t.d,r))){for(n=e.k[A],P=e.k[r],D=new Ke(P.a-n.a,P.b-n.b,P.c-n.c),i=0;i<O(t.d,r);i++)if(f=_(t.d,r,i),Gi(t.d,f)&&(Q=_8(P,e.k[f]),_b(D,Q)>HA))return!1;return X8(X8(n,D),D),!0}return!1}function GZ(t){var e,A,n,P,r,i;for(e=0;e<t.k.i;e++)if(t.g[e]){for(r=!0,P=0;P<2&&r;P++)for(A=K(t.k,P,e),i=0;i<O(t.k,A)&&r;i++)e!=Nt(t.k,A,i)&&t.g[Nt(t.k,A,i)]&&(r=!1);if(r)for(g0(t.k,e,8),--t.c,n=0;n<2;n++)A=K(t.k,n,e),W0(t.k,A)&&(Wn(t.k,A,!1),--t.b)}}function OZ(t,e){e.j==0?(uK(t),t.B=!0,N9(t.v)):e.j==1?N9(t.v):z1(e.k)===z1(t.b)?e.a==1?(Y8(t.D,\"\"),aU(t.w,k4)):(Y8(t.D,Vi(t.A,t.a)),aU(t.w,_V)):z1(e.k)===z1(t.c)?(yA(t.f,!1),$t(t.n,0),$t(t.j,0)):z1(e.k)===z1(t.f)&&yA(t.c,!1)}function qZ(t,e,A,n,P){var r,i,f,D,Q,o;for(r=1/(1+w.Math.exp(t-5)),o=1-1/(1+w.Math.exp(e+5)),Q=1/(1+w.Math.exp(.012*A-6)),i=1-1/(1+w.Math.exp(n)),f=(.5+r/2)*(.5+o/2)*(.5+Q/2)*(.5+i/2),D=0;P!=null&&D<P.length;D++)P[D]==2?f*=.8:P[D]==3&&(f*=.6);return f}function Bj(t){var e,A,n,P,r,i,f;for(n=0,A=0;A<t.r;A++)(t.v[A]&512)!=0&&++n;if(n==0)return null;for(r=0,P=0;P<t.s;P++)(t.v[t.F[0][P]]&t.v[t.F[1][P]]&512)!=0&&++r;for(f=c(Pt,it,6,t.r,16,1),e=0;e<t.r;e++)f[e]=(t.v[e]&512)!=0;return i=new SA(n,r),L9(t,i,f,!1,null),i}function zZ(t,e){var A,n,P,r,i,f,D,Q;for(i=0,n=e,P=0,r=n.length;P<r;++P)A=n[P],A==-1&&++i;for(Q=c(F,m,6,e.length-i,15,1),D=0,f=0;f<e.length;f++)e[f]!=-1&&(Q[D]=H0(t.g,f)<<16|H0(t.H,e[f]),t.i!=null&&(Q[D]|=t.i[f]<<24),++D);return Q.sort(pe(Q0.prototype.ld,Q0,[])),Q}function Os(t,e){var A,n;A=-1,n=0,(t.H[e]&16)!=0&&(A=16,++n),(t.H[e]&64)!=0&&(A=64,++n),(t.H[e]&32)!=0&&(A=32,++n),(t.H[e]&4)!=0&&(A=4,++n),(t.H[e]&2)!=0&&(A=2,++n),(t.H[e]&8)!=0&&(A=8,++n),(t.H[e]&1)!=0&&(A=1,++n),A!=-1&&A!=(t.I[e]&127)&&(t.I[e]=A),n<2&&(t.H[e]&=-128)}function KZ(t,e){var A,n;t.c==e.c?t.i=(Dr(),So):ir(e.c)==1?(t.g=e.c==1?1:e.c==2?386:e.c==4?4:e.c==16?16:8,t.i=(Dr(),Bl)):(A=(t.c&16)!=0?0:(t.c&1)!=0?1:(t.c&2)!=0?2:3,n=(e.c&16)!=0?0:(e.c&1)!=0?1:(e.c&2)!=0?2:3,n==A?t.i=(Dr(),So):(t.f=n-A,t.i=(Dr(),vl)))}function JZ(t,e,A,n,P,r){var i,f,D,Q,o,L;return Q=o1(e,n,P),i=l8(t,e,A,n),f=l8(t,e,n,P),D=l8(t,e,P,r),L=f,f==0&&dt(e,Q)==1&&(i==1||D==1)&&(L=2),o=P_(e,A,n,P,r),o==4&&o1(e,A,P)==-1&&o1(e,n,r)==-1?40+L:o==5&&(e.a[A]==1||e.a[n]==1||e.a[P]==1||e.a[r]==1)?50+L:L}function YZ(t){var e,A,n;return!t.startsWith(K6)||!t.endsWith(J6)||(A=t.indexOf(p0(34),21),A==-1)?null:(n=(Mt(21,A,t.length),t.substr(21,A-21)),e=hA(t,21+n.length+1,t.length-17),e1(n,\"arrow\")?new np(e):e1(n,\"text\")?new uR(e):null)}function XZ(t){var e,A,n,P,r,i,f,D;for(ut(t,1),f=c(Oe,uA,6,t.g,15,1),n=c(F,m,6,t.g,15,1),D=0;D<t.g;D++){for(n[0]=D,P=c(F,m,6,t.g,15,1),P[D]=1,A=0,r=0;A<=r;){for(i=0;i<t.k[n[A]];i++)e=t.j[n[A]][i],P[e]==0&&(P[e]=P[n[A]]+1,n[++r]=e,f[D]+=P[e]-1);++A}f[D]/=r}return f}function ZZ(t){var e,A,n;for(t.n=c(F,m,6,t.j,15,1),t.k=c(F,m,6,t.j,15,1),t.o=c(F,m,6,t.j,15,1),e=0;e<t.i.g;e++)t.b[e]!=0&&(n=t.b[e]-1,t.a!=null&&(t.k[n]+=t.a[e]),t.c!=null&&(t.o[n]+=t.c[e]));for(A=0;A<t.i.i;A++)t.g[A]&&dt(t.i,A)==2&&(t.n[t.b[K(t.i,0,A)]-1]+=2)}function qs(){qs=v1,nc=w.Math.cos(C2),fc=w.Math.sin(C2),rc=w.Math.cos(v4),uc=w.Math.sin(v4),Co=w.Math.cos(fA),Ho=w.Math.sin(fA),Pc=w.Math.cos(wo),Dc=w.Math.sin(wo),ic=w.Math.cos($6),Qc=w.Math.sin($6),w.Math.cos(kC),w.Math.sin(kC)}function WZ(t){var e,A,n,P,r;return isNaN(t)?(ti(),Bc):t<-9223372036854776e3?(ti(),iS):t>=9223372036854776e3?(ti(),gc):(P=!1,t<0&&(P=!0,t=-t),n=0,t>=UP&&(n=Bt(t/UP),t-=n*UP),A=0,t>=oP&&(A=Bt(t/oP),t-=A*oP),e=Bt(t),r=G0(e,A,n),P&&rs(r),r)}function E5(t,e){ni();var A,n,P,r,i;return A=t&On,i=(t&QP)>>16,P=(t&DP)>>8,n=t&255,r=Bt(1/(1-e)),i==0&&P==0&&n==0?A|r<<16|r<<8|r:(i>0&&i<r&&(i=r),P>0&&P<r&&(P=r),n>0&&n<r&&(n=r),A|w.Math.min(Bt(i/e),255)<<16|w.Math.min(Bt(P/e),255)<<8|w.Math.min(Bt(n/e),255))}function _Z(t,e){var A,n,P,r,i,f,D,Q,o;for(D=kn(t.e),Q=G(D.k,e).length,f=G(D.k,e),o=!1,P=0;P<Q;P++)if(t.f[f[P]]==0){o=!0;break}if(o){for(A=(180*Q-360)/Q*.01745329238474369,i=G(D.j,e),r=0;r<Q;r++)i5(t,i[r],f[r==0?Q-1:r-1],f[r],A);if(Q<=4)for(n=0;n<Q;n++)t.f[f[n]]+=Q}}function OQ(t,e,A,n){this.b=c(oc,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=c(Ut,Tt,6,2,15,1),this.d=c(Ut,Tt,6,2,15,1),this.c[0]=Uu(this.b[0],A),this.d[0]=Lu(this.b[0],A),this.c[1]=Uu(this.b[1],n),this.d[1]=Lu(this.b[1],n),this.a=c(F,m,6,2,15,1),this.a[0]=1,this.a[1]=1}function $Z(t){ni();var e,A,n,P;return P=t.a>>16&255,n=t.a>>8&255,A=t.a&255,e=t.a>>24&255,P==0&&n==0&&A==0?new xL(5,5,5,e):(P>0&&P<5&&(P=5),n>0&&n<5&&(n=5),A>0&&A<5&&(A=5),new xL(w.Math.min(Bt(P/zf),255),w.Math.min(Bt(n/zf),255),w.Math.min(Bt(A/zf),255),e))}function zs(t,e){Lr();var A,n,P,r,i,f,D,Q,o;return e.d>t.d&&(f=t,t=e,e=f),e.d<63?wW(t,e):(i=(t.d&-2)<<4,Q=tT(t,i),o=tT(e,i),n=Ws(t,_r(Q,i)),P=Ws(e,_r(o,i)),D=zs(Q,o),A=zs(n,P),r=zs(Ws(Q,n),Ws(P,o)),r=v2(v2(r,D),A),r=_r(r,i),D=_r(D,i<<1),v2(v2(D,r),A))}function l8(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(P=e.a[A],r=e.a[n],o=o1(e,A,n),L=!0,y=(ut(e,7),e.q),s=0;s<y.j.a.length&&L;s++)for(f=G(y.k,s),D=0,Q=f.length;D<Q;++D)if(i=f[D],i==o&&e.b[s]==0){L=!1;break}return dt(e,o)==1&&L&&(LL(t.b,P)&&LL(t.b,r)||nv(t.b,P)&&nv(t.b,r))?1:0}function Q9(t,e){A9();var A,n,P,r;if(isNaN(t))return\"NaN\";if(!isNaN(t)&&!isFinite(t))return\"Infinity\";if(t==0)return\"0\";for(P=1,n=1;n<e;n++)P*=10;for(r=P*10,A=0;w.Math.abs(t)+.5<P;)t*=10,--A;for(;w.Math.abs(t)+.5>=r;)t/=10,++A;return Ntt(E1(t+(t<0?-.5:.5)),A,e,!0)}function aZ(t){var e,A,n,P,r,i;for(n=0,r=0;r<t.e.length;r++)for(e=t.e[r],A=Ct(t.j,e),i=0;i<A;i++)_(t.j,e,i)>e&&++n;for(t.f=c(F,m,6,n,15,1),t.g=c(F,m,6,t.j.r,15,1),n=0,P=0;P<t.e.length;P++)for(e=t.e[P],A=Ct(t.j,e),t.g[e]=P,i=0;i<A;i++)_(t.j,e,i)>e&&(t.f[n++]=Nt(t.j,e,i))}function tW(t,e,A){var n,P,r,i,f,D,Q,o;for(n=A.i,o=new n1,P=new ji,i=0;i<n;i++)LT(e.a,i)&&(f=A.F[0][i],D=A.F[1][i],xA(P,U1(f)),xA(P,U1(D)));for(r=0;r<n;r++)LT(e.a,r)||(f=A.F[0][r],D=A.F[1][r],(du(P,U1(f))||du(P,U1(D)))&&(Q=new Nm(e.a),DR(t,r,Q),o.a.push(Q)));return o}function eW(t){for(var e,A,n,P,r,i;;){for(r=c(Pt,it,6,t.U+1,16,1),n=-1,A=0;A<t.R.g;A++)yf(t.R,A)!=0&&(r[t.f[A]]&&n<t.f[A]&&(n=t.f[A]),r[t.f[A]]=!0);if(n==-1)break;for(P=0,e=0;e<t.R.g;e++)i=0,t.f[e]==n&&(i=++P),AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),a1(t.e[e],8,i);t.U=tP(t)}}function vj(t,e){var A,n,P,r,i;if(t.r==0)return null;for(n=t.K[0].a,r=t.K[0].b,P=t.K[0].a,i=t.K[0].b,A=1;A<t.r;A++)n>t.K[A].a?n=t.K[A].a:P<t.K[A].a&&(P=t.K[A].a),r>t.K[A].b?r=t.K[A].b:i<t.K[A].b&&(i=t.K[A].b);return e?(e.c=n,e.d=r,e.b=P-n,e.a=i-r):e=new lA(n,r,P-n,i-r),e}function Fj(t,e,A){var n,P,r,i;for(i=1,P=0;P<t.g.r;P++)t.i[3*P]=mt(t.g,P),t.i[3*P+1]=Rt(t.g,P),t.i[3*P+2]=oA(t.g,P);if(i=Ztt(t,e,A),i==0)for(n=0;n<t.g.r;n++)de(t.g,n,t.i[3*n]),Ve(t.g,n,t.i[3*n+1]),Yn(t.g,n,t.i[3*n+2]);for(r=new Zt(t.c);r.a<r.c.a.length;)_t(r),null.zd();return i}function AW(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(r=!1,P=0;P<2;P++)if(A=K(t.g,P,e),o=t.G[A],O(t.H,o)>2){for(s=K(t.g,1-P,e),D=Et,f=0;f<O(t.g,A);f++)n=_(t.g,A,f),n!=s&&D>n&&(D=n);for(y=t.G[s],Q=Et,i=0;i<O(t.H,o);i++)L=_(t.H,o,i),L!=y&&Q>L&&(Q=L);t.G[D]!=Q&&(r=!r)}return r}function nW(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(Q=new Zt(e);Q.a<Q.c.a.length;)if(D=_t(Q),D.vd()==1){for(f=D.f,L=t,s=0,y=L.length;s<y;++s){if(o=L[s],o==-1)return!1;for(A=!1,P=f,r=0,i=P.length;r<i;++r)if(n=P[r],o==n){A=!0;break}if(!A)return!1}return!0}return!1}function PW(t,e,A,n,P){var r,i,f,D,Q,o,L;if(A)return F$(e,n[1],n[2]);for(Q=j1(Pt,[c0,it],[12,6],16,[2,e.r],2),i=c(F,m,6,2,15,1),f=0;f<2;f++)i[f]=KQ(e,n[1+f],P[f],Q[f],null,null);for(L=i[0]<i[1]?0:1,o=c(F,m,6,i[L],15,1),D=0,r=0;r<e.r;r++)Q[L][r]&&(o[D++]=r);return t.a=L==1,o}function kj(t,e){var A,n,P,r,i,f;for(P=0;P<t.b;P++)if(t.e[P][e]&&t.c[P]!=-3){for(n=0;n<=t.j.g.length;n++)if(n!=e&&t.e[P][n])for(t.e[P][e]=!1,f=P<t.a?P:P<t.b?P-t.a:-1,i=WN(t,P<t.a?1:P<t.b?2:0),r=0;r<t.j.g[e].length;r++)A=t.j.g[e][r],g3(t.j,A)&&t.j.j[A]==f&&(t.j.j[A]=i<<24>>24)}}function df(t){var e,A,n,P,r;for(r=new C0,P=t.length,n=0;n<P;n++)switch(e=_m(t,n,t.length),A=e&d1,e){case 38:r.a+=\"&amp;\";break;case 60:r.a+=\"&lt;\";break;case 62:r.a+=\"&gt;\";break;case 34:r.a+=\"&quot;\";break;case 39:r.a+=\"&apos;\";break;default:r.a+=String.fromCharCode(A)}return r.a}function rW(t){var e,A,n,P;for(e=0;e<t.k.g;e++)if(X(t.k,e)==7&&R1(t.k,e)==0&&G1(t.k,e)>3&&e0(t.k,e)>0){for(P=0;P<O(t.k,e);P++)if(A=_(t.k,e,P),n=Nt(t.k,e,P),dt(t.k,n)>1&&rA(t.k,A)){c1(t.k,n)==4?g0(t.k,n,2):g0(t.k,n,1),b0(t.k,e,R1(t.k,e)+1),b0(t.k,A,R1(t.k,A)-1),aA(t.k,e,-1);break}}}function iW(t,e){var A,n,P,r,i,f;for(r=t.indexOf(e+\"=(\")+e.length+2,i=t.indexOf(p0(41),r),P=ue(t,r),A=L1((Mt(r,P,t.length),t.substr(r,P-r)),f1,Et),f=c(F,m,6,A,15,1),n=0;n<A;n++)r=gA(t,P),P=ue(t,r),(P==-1||P>i)&&(P=i),f[n]=L1((Mt(r,P,t.length),t.substr(r,P-r)),f1,Et);return f}function mj(t,e){var A;if(A=0,e<t.i&&(q8(t.q,e)||t.I[e]==8)||t.I[e]==8)A|=8;else switch(dt(t,e)){case 0:A|=16;break;case 1:A|=1;break;case 2:A|=2;break;case 3:A|=4;break;case 4:A|=32;break;case 5:A|=64}return(t.G[e]&64)!=0?A|=256:t.L||(A|=128),e<t.i&&Ee(t.q,e)?A|=KA:t.L||(A|=oP),A}function bj(t,e,A,n,P){var r;if(T2(e,A,n,P,3))return 60;if(T2(e,A,n,P,4))return 90;switch(r=e.a[n],Rn(t.a.b,r)){case 2:if(e.D[n]==8)return 105;if(ZD(t.a.b,r))return 180;break;case 3:if(u8(t.a.b,r)==3&&NA(t.a.b,r)==0)return e.D[n]==7?107:92;break;case 4:return 109.45}return 120}function fW(t,e,A){var n,P,r,i,f,D,Q,o;for(n=!1,D=0;D<e.j.a.length;D++)if(G(e.k,D).length==6){for(f=!0,Q=G(e.j,D),o=G(e.k,D),r=0;r<6;r++)if(!cf(t,Q[r],!1)||!t.e[o[r]]){f=!1;break}if(f){if(A)for(i=0;i<6;i++)cf(t,Q[i],!0);for(P=0;P<6;P+=2)u2(t,o[P]);n=!0;break}}return n}function a1(t,e,A){t.b==0&&(++t.c,t.b=63),t.b==63?(t.d[t.c]=J(t.d[t.c],A),t.b-=e):t.b>=e?(t.d[t.c]=Wt(t.d[t.c],e),t.d[t.c]=J(t.d[t.c],A),t.b-=e):(t.d[t.c]=Wt(t.d[t.c],t.b),t.d[t.c]=J(t.d[t.c],O0(A,e-t.b)),e-=t.b,++t.c,t.b=63-e,t.d[t.c]=J(t.d[t.c],V(A,(1<<e)-1)))}function jj(t,e,A,n){var P,r,i,f;if(n==1&&!gT(t,e)){if(O(t.b,e)==3)return-1;if(O(t.b,e)==3)return P=vm(t,e,A),H0(t.b,P[0])==H0(t.b,P[1])?P[2]:H0(t.b,P[0])==H0(t.b,P[2])?P[1]:P[0]}for(i=-1,f=-1,r=0;r<O(t.b,e);r++)P=_(t.b,e,r),P!=A&&i<H0(t.b,P)&&(i=H0(t.b,P),f=P);return f}function Rj(t){var e,A,n,P,r,i,f,D;for(t.c=0,A=new n1,P=1;P<t.e.length;P++)for(r=0;r<P;r++)f=w.Math.abs(t.a[P]-t.a[r]),D=w.Math.abs(t.b[P]-t.b[r]),n=w.Math.sqrt(f*f+D*D),n<.8&&(e=c(F,m,6,2,15,1),e[0]=t.e[P],e[1]=t.e[r],A.a.push(e)),i=1-w.Math.min(n,1),t.c+=i*i;return A}function DW(t){var e;return e=new LD,Ft(e.a,new ae(\"The polar surface area prediction is based on an atom-type based\",2)),Ft(e.a,new ae(\"increment system, published by P. Ertl, B. Rohde, P. Selzer\",2)),Ft(e.a,new ae(\"in J. Med. Chem. 2000, 43, 3714-3717\",2)),Ft(e.a,new ae(F4,2)),hK(t,e),e}function uW(t){var e,A,n,P,r,i,f;for(f=t.U&248,ut(t,1),i=c(F,m,6,t.g,15,1),A=0;A<t.g;A++)i[A]=xt(t,A);for(n=0;n<i.length;n++)if(i[n]!=0)for(r=0;r<i[n];r++)J0(t,n,i9(t,1),1);for(ut(t,1),P=.8*dP(t,t.r,t.s,(J1(),Bn)),e=0;e<i.length;e++)i[e]!=0&&ka(t,e,i[e],P);(f&8)!=0&&(t.U|=248&(8|f))}function pj(t){var e,A,n,P;for(P=!1,A=0;A<t.r;A++)gt(V(t.C[A],Pe),0)&&(t.D[A]=-1,P=!0);for(P&&ui(t),t.w!=null&&(t.w=null,P=!0),e=0;e<t.r;e++)gt(t.C[e],0)&&(t.C[e]=0,P=!0);for(n=0;n<t.s;n++)t.H[n]!=0&&(t.H[n]=0,P=!0),t.I[n]==8&&(t.I[n]=1,P=!0);return P&&(t.U=0),P}function QW(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(i=c(F,m,6,P,15,1),r=0;r<t.f.r;r++){for(D=0;D<Ct(t.f,r);D++){for(s=A[_(t.f,r,D)],Q=0;Q<D&&!(s<i[Q]);Q++);for(o=D;o>Q;o--)i[o]=i[o-1];i[Q]=s}for(L=Ct(t.f,r),AA(e[r],r),a1(e[r],n,A[r]),a1(e[r],(P-L)*(n+1),0),f=0;f<L;f++)a1(e[r],n+1,i[f])}}function Mj(t,e){var A,n;for(this.b=c(oc,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=c(Ut,Tt,6,2,15,1),this.d=c(Ut,Tt,6,2,15,1),this.a=c(F,m,6,2,15,1),A=0;A<2;A++){for(n=0;n<this.b[A].e.length;n++)this.c[A]+=Uu(this.b[A],n),this.d[A]+=Lu(this.b[A],n);this.a[A]=this.b[A].e.length}}function oW(t,e){var A,n,P,r;this.a=new Fh((n=Ey,n)),ut(t,15),r=(q1(),nn),this.b=e,P=t.Q!=null?t.Q:\"\",q(this.b,P+r),q(this.b,\"Actelion Java MolfileCreator 2.0\"+r+r),q(this.b,\"  0  0  0  0  0  0              0 V3000\"+r),this.c=1,A=MJ(t),A&&(this.c=HZ(t)),iM(this,t,A),q(this.b,hr+r)}function UW(t,e){var A,n,P;if(A=K(t.R,0,e),A>=t.R.g)return!1;if(t.db[A]==1||t.db[A]==2)return!0;if(t.db[A]==3)return!1;if(n=ws(t.R,A),n!=-1)return t.o[n]==1||t.o[n]==2;for(P=0;P<O(t.R,A);P++)if(EA(t.R,A,P)==2&&(t.db[_(t.R,A,P)]==1||t.db[_(t.R,A,P)]==2))return!0;return!1}function S5(t,e,A,n,P){var r,i,f,D,Q;for(t.L=t.L|e.L,i=c(F,m,6,e.r,15,1),D=ne(t,1),Q=ne(t,2),r=0;r<A;r++)(P||n0(V(e.C[r],Pe),0))&&(i[r]=Nn(e,t,r,D,Q));for(f=0;f<n;f++)(P||!ye(e,e.F[0][f])&&!ye(e,e.F[1][f]))&&o9(e,t,f,D,Q,i[e.F[0][f]],i[e.F[1][f]],!1);return t.M=t.M&&e.M,t.J=0,t.U=0,i}function LW(t,e,A){var n,P;if(e<3||(n=e-1,(t[n]==43||t[n]==45)&&--n,!an(t[n]&d1))||(--n,t[n]!=68&&t[n]!=82&&t[n]!=88&&t[n]!=122))return!1;for(A[0]=0;n>0&&tv(t[n-1]);)--n,++A[0];for(P=e+1;tv(t[n]);){if(t.length<=P||t[n]!==t[P])return!1;++n,++P}return!0}function sW(t,e){var A,n,P,r,i,f,D,Q,o;return Q=t.e,Q==0?(Ce(),vr):(n=t.d,A=t.a,n==1?(P=yn(V(A[0],g1),V(e,g1)),D=Ot(P),i=Ot(j0(P,32)),i==0?new RA(Q,D):new le(Q,2,B(d(F,1),m,6,15,[D,i]))):(f=n+1,r=c(F,m,6,f,15,1),r[n]=cs(r,A,n,e),o=new le(Q,f,r),Cn(o),o))}function yW(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  CHG\")&&(r=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),r>0))for(A=10,f=14,i=1;i<=r;++i,A+=8,f+=8)n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,P=L1(k1((Mt(f,f+3,e.length),e.substr(f,f+3-f))),f1,Et),b0(t.j,n,P)}function lW(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  ISO\")&&(P=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,i=L1(k1((Mt(f,f+3,e.length),e.substr(f,f+3-f))),f1,Et),O9(t.j,n,i)}function Cj(t,e){var A,n,P,r,i;if(n=e>>5,e&=31,n>=t.d)return t.e<0?(Ce(),Rc):(Ce(),vr);if(r=t.d-n,P=c(F,m,6,r+1,15,1),Sb(P,r,t.a,n,e),t.e<0){for(A=0;A<n&&t.a[A]==0;A++);if(A<n||e>0&&t.a[A]<<32-e!=0){for(A=0;A<r&&P[A]==-1;A++)P[A]=0;A==r&&++r,++P[A]}}return i=new le(t.e,r,P),Cn(i),i}function hW(t,e){var A,n,P,r,i,f,D;for(P=c(Pt,it,6,t.L.r,16,1),n=0;n<t.L.s;n++)Jh(t.L,n)&&(P[K(t.L,0,n)]=!0,P[K(t.L,1,n)]=!0);for(i=new iD,A=0;A<t.L.r;A++)r=ye(t.L,A)?e*.47:P[A]?e*.38:0,r!=0&&(f=W1(t.R,mt(t.L,A)),D=Z1(t.R,Rt(t.L,A)),i.c=f-r,i.d=D-r,i.b=r*2,i.a=r*2,t.v=RQ(t.v,i))}function TW(t){var e,A,n,P;for(P=new C0,A=0;A<t.g.a.length;A++)A!=0&&(P.a+=\".\"),q(P,Eu(new dD(G(t.g,A),2)));for(P.a+=\">\",n=0;n<t.a.a.length;n++)n!=0&&(P.a+=\".\"),q(P,Eu(new tg(G(t.a,n))));for(P.a+=\">\",e=0;e<t.f.a.length;e++)e!=0&&(P.a+=\".\"),q(P,Eu(new dD(G(t.f,e),2)));return P.a}function Hj(t,e){Lb(),this.n=t,this.a=e,this.i=C6(this.a._,p4),qz(this.i),this.g=C6(this.a._,p4),BJ(this.g),this.o=2*p8+YF(WU(this.i)/4|0),this.e=2*p8+YF($U(this.i)/4|0),this.c=C6(this.a._,nE),this.j=(Re==-1&&(Re=globalThis.devicePixelRatio||1),4/Re),this.b=5,this.k=-1,this.f=-1,this.a.db=this}function cW(t,e,A,n,P){if(!Ip(t,e,P))return!1;if(t.s==null)t.t=new XQ(e),DU(t.t,t.v),q5(t.t,t.o,-1);else{switch(t.b=new Ji(new fD),A){case 2:t.B=new qL(t,!1,t.o);break;case 3:t.B=new qL(t,!0,t.o);break;case 4:t.B=new d3(t,t.o);break;case 1:t.B=new Dj(t)}md(t.B,n)}return!0}function T2(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if(s=(ut(t,7),t.q),Q=new ji,xA(Q,U1(e)),xA(Q,U1(A)),xA(Q,U1(n)),o1(t,e,A)>=0&&o1(t,A,n)>=0){for(o=0;o<s.j.a.length;o++)if(G(s.k,o).length==P){for(L=new ji,i=G(s.j,o),f=0,D=i.length;f<D;++f)r=i[f],xA(L,U1(r));if(oQ(L,Q))return!0}}return!1}function Vj(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(t,1),r=0;r<t.r;r++)e[r]=-1;for(Q=0,P=0;P<t.r;P++)if(e[P]==-1){for(e[P]=Q,o=c(F,m,6,t.r,15,1),o[0]=P,D=0,L=0;D<=L;){for(f=n?t.j[o[D]].length:t.e[o[D]],s=0;s<f;s++)i=t.j[o[D]][s],e[i]==-1&&!A[t.n[o[D]][s]]&&(o[++L]=i,e[i]=Q);++D}++Q}return Q}function Ej(t){var e,A,n;if(t.L)for(ut(t,7),e=0;e<t.i;e++)n=ir(t.H[e]&127),(e<t.i&&(q8(t.q,e)||t.I[e]==8))&(t.H[e]&8)!=0&&(t.H[e]&=-9,--n),n!=0&&(A=t.I[e]&127,A==1?t.H[e]|=1:A==2?t.H[e]|=2:A==4?t.H[e]|=4:A==32?t.H[e]|=32:A==64?t.H[e]|=64:A==16?t.H[e]|=16:A==8&&(t.H[e]|=8))}function I5(t,e,A,n,P,r,i,f,D){var Q,o,L,s,y;return s=n<Mo.length&&Mo[n]?w.Math.min(3,r):0,y=P<Mo.length&&Mo[P]?w.Math.min(3,i):0,f=w.Math.min(7,f),D=w.Math.min(7,D),Q=f+(s<<3)+(w.Math.min(127,n)<<5),o=D+(y<<3)+(w.Math.min(127,P)<<5),L=A?8:e?8+t:t,(L<<24)+(Q<o?(Q<<12)+o:(o<<12)+Q)}function wW(t,e){var A,n,P,r,i,f,D,Q,o,L,s;return n=t.d,r=e.d,f=n+r,D=t.e!=e.e?-1:1,f==2?(o=yn(V(t.a[0],g1),V(e.a[0],g1)),s=Ot(o),L=Ot(j0(o,32)),L==0?new RA(D,s):new le(D,2,B(d(F,1),m,6,15,[s,L]))):(A=t.a,P=e.a,i=c(F,m,6,f,15,1),cK(A,n,P,r,i),Q=new le(D,f,i),Cn(Q),Q)}function Sj(t,e){var A,n,P,r,i,f;if(dt(t,e)!=1)return!1;for(r=0;r<2;r++){for(A=t.F[r][e],f=t.F[1-r][e];t.p[A]==2&&t.k[A]==2&&t.D[A]<10;)for(i=0;i<2;i++)if(n=t.j[A][i],n!=f){if(t.k[n]==1||(P=t.n[A][i],dt(t,P)==1&&P<e))return!0;f=A,A=n;break}if(t.k[A]==1)return!0}return!1}function Ij(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;for(y=c(Pt,it,6,n.length,16,1),f=t,Q=0,L=f.length;Q<L;++Q)if(r=f[Q],e[r]==0){if(n[A[r]]||y[A[r]])return!1;y[A[r]]=!0}for(s=-1,i=t,D=0,o=i.length;D<o;++D)if(r=i[D],e[r]==0){if(s==-1)s=P[r];else if(P[r]!=s)return!1}return!0}function xj(t,e,A,n){var P,r;if(e){if(P=t.a.Rb(A.c,e.c),P==0)return n.d=Sd(e,A.d),n.b=!0,e;r=P<0?0:1,e.a[r]=xj(t,e.a[r],A,n),WP(e.a[r])&&(WP(e.a[1-r])?(e.b=!0,e.a[0].b=!1,e.a[1].b=!1):WP(e.a[r].a[r])?e=PQ(e,1-r):WP(e.a[r].a[1-r])&&(e=Fv(e,1-r)))}else return A;return e}function Nj(t,e,A,n,P){var r,i,f;return r=A==-1?w.Math.abs(P[e].a-P[t.B[0]].a)/8:w.Math.abs(P[e].a-P[A].a),n<r&&(n=r),i=A==-1?w.Math.abs(P[e].b-P[t.B[0]].b)/8:w.Math.abs(P[e].b-P[A].b),n<i&&(n=i),t.jb&&(f=A==-1?w.Math.abs(P[e].c-P[t.B[0]].c)/8:w.Math.abs(P[e].c-P[A].c),n<f&&(n=f)),n}function Gj(t,e,A,n,P){var r,i,f,D,Q,o;if(e==A)return 0;for(t._b(1),D=c(F,m,6,t.r,15,1),f=c(F,m,6,t.r,15,1),f[0]=e,D[e]=1,i=0,Q=0;i<=Q&&D[f[i]]<=n;){for(o=0;o<t.e[f[i]];o++){if(r=t.j[f[i]][o],r==A)return D[f[i]];D[r]==0&&(P==null||P.length<=r||!P[r])&&(f[++Q]=r,D[r]=D[f[i]]+1)}++i}return-1}function gW(t,e,A){var n,P,r,i,f;return r=nJ(e,A),r==-1?-1:(P=(n=ue(e,r+1),n==-1?e.length:n),i=(Mt(A,r,e.length),e.substr(A,r-A)),f=(Mt(r+1,P,e.length),e.substr(r+1,P-(r+1))),(f.startsWith(\"(\")&&f.endsWith(\")\")||f.startsWith('\"')&&f.endsWith('\"'))&&(f=hA(f,1,f.length-1)),We(t,i,f),gA(e,P))}function iA(t,e){var A;return y1(e),A=2-t.e,A==0?t:A>0?A<vi.length&&t.a+Cl[Bt(A)]<54?new L3(t.f*vi[Bt(A)]):new ID(xO((!t.c&&(t.c=jP(E1(t.f))),t.c),Bt(A)),2):t.a<54&&-A<vi.length?DX(t.f,vi[Bt(-A)],e):Ca((!t.c&&(t.c=jP(E1(t.f))),t.c),Qi(-A),e)}function x5(t,e){CU();var A,n,P,r,i;for(P=0;P<t.r;P++)for(i=$n(t),$0(i,P,Ac),ut(i,15),n=0;n<i.g;n++)(i.v[n]&wn)!=0&&xQ(i,n)==-1&&(r=(ut(i,7),i.p[n]==2&&i.k[n]==2?Kb(i,n,!1):_s(i,n,!1)),r!=-1&&(t.I[r]=257,t.U=0,t.F[1][r]==n&&(A=t.F[0][r],t.F[0][r]=n,t.U=0,t.F[1][r]=A,t.U=0),Ne(t,n,e,0)))}function dW(t,e,A,n,P,r){s8();var i,f,D,Q,o,L,s,y,l,h,T;for(s=t.o,i=c(Pt,it,6,s.r,16,1),Q=c(F,m,6,s.r,15,1),Q[0]=e,i[e]=!0,l=A,h=0,T=l.length;h<T;++h)y=l[h],i[y]=!0;for(vf(t,e,n,P,r),D=0,o=0;D<=o;){for(L=0;L<s.e[Q[D]];L++)f=s.j[Q[D]][L],i[f]||(i[f]=!0,Q[++o]=f,vf(t,f,n,P,r));++D}}function BW(t){var e,A,n,P;if(t.g.L)for(e=0;e<t.g.s;e++)n=fe(t.g,e),(n&127)!=0&&(A=-1,P=0,(n&16)!=0&&(A=16,++P),(n&64)!=0&&(A=64,++P),(n&32)!=0&&(A=32,++P),(n&4)!=0&&(A=4,++P),(n&2)!=0&&(A=2,++P),(n&8)!=0&&(A=8,++P),(n&1)!=0&&(A=1,++P),A!=-1&&(g0(t.g,e,A),P==1&&Xe(t.g,e,127,!1)))}function vW(t,e,A){var n;switch(n=A.length<45?0:qr(k1((Mt(42,45,A.length),A.substr(42,3)))),n){case 0:break;case 1:w1(t.j,e,768,!0);break;case 2:w1(t.j,e,128,!0);break;case 3:w1(t.j,e,384,!0);break;default:w1(t.j,e,896,!0)}A.length>=48&&(zt(47,A.length),A.charCodeAt(47)==49)&&w1(t.j,e,je,!0)}function Oj(t,e,A,n,P){var r,i,f,D,Q,o;if(ut(t,7),!((t.v[e]&gn)==0||A&&!(e<t.g&&f0(t.q,e))))for(D=c(F,m,6,t.g,15,1),D[0]=e,n[e]=!0,f=0,Q=0;f<=Q;){for(o=0;o<t.k[D[f]];o++)i=t.n[D[f]][o],!P[i]&&(t.G[i]&64)!=0&&(!A||i<t.i&&Ee(t.q,i))&&(P[i]=!0,r=t.j[D[f]][o],n[r]||(n[r]=!0,D[++Q]=r));++f}}function Bf(t,e,A,n,P,r){var i,f,D,Q,o,L;for(t.a[A]=e<<16>>16,t.c[A]=t.c[A]+t.c[n]<<16>>16,t.d[A][0]=P<<16>>16,t.d[A][1]=r<<16>>16,L=t.a.length-1,D=c(Kt,t1,6,L,15,1),Q=c(Kt,t1,6,L,15,1),o=c(Kt,ie,16,L,0,2),f=0,i=0;i<t.a.length;i++)i!=n&&(D[f]=t.a[i],Q[f]=t.c[i],o[f]=t.d[i],++f);t.a=D,t.c=Q,t.d=o}function or(t){var e;switch(e=-1,t.w){case 18:e=9;break;case 2:t.t!=-1&&i0(t.V,t.t)||t.u!=-1&&bP(t.V,t.u)?e=t.W?4:t.Z?3:2:t.t!=-1||t.u!=-1?e=11:t.v?e=t.W?4:t.Z&&!Yt(t.v,64)?3:2:e=t.Z?t.d?8:6:t.d?7:5;break;case 4:e=1;break;case 22:e=0;break;case 21:e=12;break;default:e=11}t.s!=e&&(t.s=e,BB(t._,e))}function vf(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;L=n.a,s=n.b,y=n.c,r=w.Math.cos(P),Q=w.Math.sin(P),o=1-r,i=t.k[e].a-A.a,f=t.k[e].b-A.b,D=t.k[e].c-A.c,UU(t,e,A.a+(o*L*L+r)*i+(o*L*s+Q*y)*f+(o*L*y-Q*s)*D),LU(t,e,A.b+(o*L*s-Q*y)*i+(o*s*s+r)*f+(o*s*y+Q*L)*D),sU(t,e,A.c+(o*L*y+Q*s)*i+(o*y*s-Q*L)*f+(o*y*y+r)*D)}function FW(t,e){var A,n,P,r,i,f,D,Q;for(Q=new n1,A=0;A<e.r;A++)if(n=e.a[A],!(e.e[A]<=1&&ZD(t.b,n)))for(r=0;r<e.e[A];r++)for(f=e.j[A][r],i=0;i<e.e[A];i++)D=e.j[A][i],!(f>D)&&EK(t,e,f,A,D)&&(P=new ob(t,e,f,A,D),(w.Math.abs(P.d)>go||w.Math.abs(P.e)>go)&&Q.a.push(P));return Q}function kW(t,e,A,n,P){var r,i,f,D,Q,o,L;switch(r=e.a[A],i=e.a[P],Q=l8(t,e,A,n),L=l8(t,e,n,P),D=r<=i?Q:L,o=r<i?L:Q,f=em(t,e,A,n,P),f){case 1:return D>0||D==o?1:2;case 2:return 3;case 3:return 5;case 4:return 4;case 5:return D>0||D==o?6:7;case 6:return 8;case 7:return D>0||D==o?9:10;case 8:return 11}return 0}function mW(t,e){var A,n,P;if(t.c)return 3;for(P=new Zt(t.e);P.a<P.c.a.length;)n=_t(P),n.a!=so&&n.a!=Et&&(n.a=e[n.a]);switch(A=!1,t.e.a.length){case 2:if(G(t.e,0).a>=so||G(t.e,1).a>=so)return 3;A=PY(t,e);break;case 3:Ft(t.e,new f3(t,Et,t.b));case 4:A=VJ(t);break;default:return 3}return t.d^A?1:2}function qj(t,e,A){var n,P;if(dt(t,e)!=1)return!1;if((t.v[A]&3)!=0)return!0;for(P=0;P<t.s;P++)if(P!=e&&t.I[P]==2&&(t.F[0][P]==A&&(t.v[t.F[1][P]]&3)!=0||t.F[1][P]==A&&(t.v[t.F[0][P]]&3)!=0))return!0;for(n=0;n<t.s;n++)if(n!=e&&t.I[n]==1&&(t.F[0][n]==A||t.F[1][n]==A)&&(t.G[n]&3)!=0)return!0;return!1}function bW(t){var e,A,n,P;for(n=0;n<t.i.s;n++)for(P=0;P<2;P++)e=K(t.i,P,n),A=K(t.i,1-P,n),X(t.i,e)==1&&ge(t.i,e)>1&&X(t.i,A)>1&&t.b[A]!=0&&(ge(t.i,e)==2?(t.a==null&&(t.a=c(F,m,6,t.i.r,15,1)),++t.a[A]):(t.c==null&&(t.c=c(F,m,6,t.i.r,15,1)),++t.c[A]),B7(t.i,e));(t.a!=null||t.c!=null)&&ui(t.i)}function jW(t){var e,A,n,P,r,i,f,D,Q;if(t.b){for(e=c(F,m,6,t.F.a.length,15,1),n=0;n<e.length;n++)for(e[n]=n,r=G(t.a,n),i=0,f=r.length;i<f;++i)P=r[i],P&&(e[n]+=o0);for(e.sort(pe(Q0.prototype.ld,Q0,[])),Q=new n1,D=new n1,A=0;A<e.length;A++)Ft(Q,G(t.F,e[A]&d1)),Ft(D,G(t.a,e[A]&d1));t.F=Q,t.a=D}}function RW(t){return t.t!=-1?(jQ(t.V,t.t),t.t=-1,t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)),!0):t.u!=-1?(l5(t.V,t.u),t.u=-1,t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)),!0):t.v&&!t.v.j?(er(t.I,t.v),t.v=null,t.eb=w.Math.max(t.eb,1),P1(t.k),!0):!1}function pW(t,e){var A,n,P,r;for(P=2+2*w.Math.sqrt(t.d.r),n=0;n<t.d.r;n++)Ct(t.d,n)!=1&&(UU(e,n,P*Hn(t.f)-P/2),LU(e,n,P*Hn(t.f)-P/2),sU(e,n,P*Hn(t.f)-P/2));for(A=0;A<t.d.r;A++)Ct(t.d,A)==1&&(r=_(t.d,A,0),UU(e,A,e.k[r].a+4*Hn(t.f)-2),LU(e,A,e.k[r].b+4*Hn(t.f)-2),sU(e,A,e.k[r].c+4*Hn(t.f)-2));GU(e)}function MW(t,e,A){var n,P,r,i;if(n=A[t.a],P=A[t.b],t.i==(Dr(),Fl))return J0(e,n,P,t.g),!0;if(r=o1(e,n,P),t.i==Bl)return g0(e,r,t.g),!0;if(t.i==vl){if(i=dt(e,r)+t.f,i>=0&&i<=3)return g0(e,r,(J1(),i==0?16:i==1?1:i==2?386:i==3?4:i==4?32:64)),!0}else if(t.i==kl)return e.I[r]=512,!0;return!1}function N5(t,e,A,n){var P;switch(P=A/2,n&b1){case b1:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+e.a-P;break}case 0:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d+t.v.a+P,e&&t.w.b>e.d+e.a-P&&(t.w.b=e.d+e.a-P);break;case B8:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+P;break}case v8:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d-P,e&&t.w.b<e.d+P&&(t.w.b=e.d+P)}}function zj(t,e){var A,n;for(this.k=c(gr,B9,26,t.g.a.length+t.f.a.length,0,1),n=0;n<t.g.a.length+t.f.a.length;n++)this.k[n]=n<t.g.a.length?G(t.g,n):G(t.f,n-t.g.a.length);for(this.n=t.g.a.length,this.a=c(gr,B9,26,t.a.a.length,0,1),A=0;A<t.a.a.length;A++)this.a[A]=G(t.a,A);this.o=!1,this.c=1,this.g=e,Vs(this)}function CW(t,e){var A,n,P,r,i,f,D,Q;for(Q=kn(t.H),f=0;f<Q.j.a.length;f++)if(Pf(Q,f,e)){for(D=c(F,m,6,2,15,1),P=0;P<2;P++)for(D[P]=Et,n=K(t.H,P,e),r=0;r<O(t.H,n);r++)A=_(t.H,n,r),A!=K(t.H,1-P,e)&&D[P]>A&&(D[P]=A);return i=0,wA(Q,f,D[0])&&++i,wA(Q,f,D[1])&&++i,i==2?2:i==1?1:2}return 0}function HW(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  RGP\")&&(P=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,i=L1(k1((Mt(f,f+3,e.length),e.substr(f,f+3-f))),f1,Et),i>=1&&i<=20&&$0(t.j,n,zA(\"R\"+i,2))}function Kj(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(L=A[n],i=A[n+1]-L,s=c(V1t,A0,177,i,0,1),D=0;D<i;D++)s[D]=new x0,s[D].c=t[D+L],s[D].b=e[D+L],s[D].a=D+L;for(P=new K0,o=n;o>1;o--){for(Q=0;Q<i;Q++)s[Q].c+=t[s[Q].b]<<16,s[Q].b=e[s[Q].b];for(ai(s,0,s.length,P),r=1,f=0;f<i;f++)t[s[f].a]=r,f!=i-1&&KB(s[f],s[f+1])!=0&&++r}}function VW(t){var e,A,n,P,r,i;if(t.R.g==0){t.N=\"\";return}for(r=0,n=!1,P=!1,A=0;A<t.R.g;A++)r<M1(t.R,A)&&(r=M1(t.R,A)),Fn(t.R,A)?n=!0:P=!0;if(r==0){t.N=\"\";return}for(i=W8(r),Q3(t,!0),qt(t,i,4),qt(t,n?1:0,1),qt(t,P?1:0,1),e=0;e<t.R.g;e++)qt(t,M1(t.R,t.B[e]),i),n&&P&&qt(t,Fn(t.R,t.B[e])?1:0,1);t.N=OL(t)}function G5(t,e,A,n){var P,r,i;for(P=0;P<2;P++)if(r=t.j[A[1]][P],r!=A[0])return r==e||(i=t.n[A[1]][P],A[0]=A[1],A[1]=r,t.k[r]==1)?!1:(n!=null&&(t.v[A[0]]&q0)==0&&(t.v[A[1]]&q0)==0&&(n[0]=w.Math.max(n[0],i)),t.k[r]==2&&t.p[r]==2&&t.D[r]<=7?G5(t,e,A,n):!0);return!1}function EW(t){var e;for(t.S=c(Pt,it,6,t.R.g,16,1),e=0;e<t.R.g;e++)if(X(t.R,e)==7){if(O(t.R,e)==4){t.S[e]=!0;continue}if(O(t.R,e)==3){if(Or(t.R,e)==3){t.S[e]=!0;continue}if(R1(t.R,e)==1){t.S[e]=!0;continue}if(xP(t.R,e,!0))continue;if((t.Q&32)!=0){t.S[e]=!0;continue}if(Ys(t.R,e)){t.S[e]=!0;continue}}}}function Ks(t){var e,A,n,P,r,i;for(U8.call(this),i=t&&t.g?t.g.a.length:0,r=t&&t.f?t.f.a.length:0,e=t&&t.a?t.a.a.length:0,n=0;n<i;n++)Ft(this.g,new Wr(G(t.g,n)));for(P=0;P<r;P++)Ft(this.f,new Wr(G(t.f,P)));for(A=0;A<e;A++)Ft(this.a,new Wr(G(t.a,A)));this.b=new Ts(t.b),t.e!=null&&(this.e=t.e),this.c=t.c||bQ(t)}function SW(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(s=0,L=-1,i=0;i<t.j.g;i++){o=G(e.g,s),ut(o,1);do++L==o.g&&(L=0,o=C9(e,++s));while(o.L&&gt(V(o.C[L],Pe),0));tA(o,L,A[i],A[i]<=P)}for(Q=0,D=-1,r=0;r<t.d.g;r++){f=G(e.f,Q),ut(f,1);do++D==f.g&&(D=0,f=ph(e,++Q));while(f.L&&gt(V(f.C[D],Pe),0));tA(f,D,n[r],n[r]<=P)}}function Jj(t){var e,A,n,P,r;if(t.l==0&&t.m==0&&t.h==0)return\"0\";if(t.h==B8&&t.m==0&&t.l==0)return\"-9223372036854775808\";if(t.h>>19!=0)return\"-\"+Jj(Ai(t));for(A=t,n=\"\";!(A.l==0&&A.m==0&&A.h==0);){if(P=mL(Jf),A=o6(A,P,!0),e=\"\"+og(zn),!(A.l==0&&A.m==0&&A.h==0))for(r=9-e.length;r>0;r--)e=\"0\"+e;n=e+n}return n}function IW(t,e){var A,n,P,r;if(!dl)return 0;if($f[e].cc(Me(new bA(t)))!=-1)return 3;for(r=new VD(1),A=new _A,P=0;P<dr[e].a.length;P++)if(l2(new WA(!1),A,G(dr[e],P)),GA(r,t),MA(r,A),CA(r,1,r.c)>0)return 3;for(n=0;n<Br[e].a.length;n++)if(l2(new WA(!1),A,G(Br[e],n)),GA(r,t),MA(r,A),CA(r,1,r.c)>0)return 2;return 1}function c2(t,e){var A,n,P,r;return r=w.Math.sin(e),A=w.Math.cos(e),n=1-A,P=j1(Ut,[c0,Tt],[15,6],15,[3,3],2),P[0][0]=t.a*t.a*n+A,P[1][1]=t.b*t.b*n+A,P[2][2]=t.c*t.c*n+A,P[0][1]=t.a*t.b*n-t.c*r,P[1][2]=t.b*t.c*n-t.a*r,P[2][0]=t.c*t.a*n-t.b*r,P[0][2]=t.a*t.c*n+t.b*r,P[1][0]=t.b*t.a*n+t.c*r,P[2][1]=t.c*t.b*n+t.a*r,P}function Yj(t,e,A){var n;if(O(t.b,e)==2)return 1;if(n=vm(t,e,A),O(t.b,e)==3)return H0(t.b,n[0])==H0(t.b,n[1])?gT(t,e)?2:1:gT(t,e)?1:0;if(O(t.b,e)==4){if(H0(t.b,n[0])==H0(t.b,n[1])&&H0(t.b,n[0])==H0(t.b,n[2]))return 3;if(H0(t.b,n[0])==H0(t.b,n[1])||H0(t.b,n[0])==H0(t.b,n[2])||H0(t.b,n[1])==H0(t.b,n[2]))return 1}return 0}function xW(t,e){var A,n,P,r,i;return n=V(e,g1),z(t,0)>=0?(r=Sn(t,n),i=n9(t,n)):(A=j0(t,1),P=e>>>1,r=Sn(A,P),i=n9(A,P),i=at(Wt(i,1),V(t,1)),(e&1)!=0&&(z(r,i)<=0?i=Y1(i,r):qg(Y1(r,i),n)?(i=at(i,Y1(n,r)),r=Y1(r,1)):(i=at(i,Y1(Wt(n,1),r)),r=Y1(r,2)))),J(Wt(i,32),V(r,g1))}function Xj(t,e){var A,n,P;for(A=j1(Ut,[c0,Tt],[15,6],15,[2,3],2),n=0;n<2;n++)A[n][0]=Mr(e,t.f[n])-Mr(e,t.f[4]),A[n][1]=Cr(e,t.f[n])-Cr(e,t.f[4]),A[n][2]=Hr(e,t.f[n])-Hr(e,t.f[4]);return P=c(Ut,Tt,6,3,15,1),P[0]=A[0][1]*A[1][2]-A[0][2]*A[1][1],P[1]=A[0][2]*A[1][0]-A[0][0]*A[1][2],P[2]=A[0][0]*A[1][1]-A[0][1]*A[1][0],P}function NW(t){var e,A,n,P;for(t.L=!0,t.$=c(E,I,6,t.R.g,15,1),t.i=c(E,I,6,t.R.i,15,1),P=U2(t,!0);t.U<t.R.g&&P;){for(e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],t.c+4,J(Wt(t.f[e],4),t.db[e]<<2));for(A=0;A<t.R.i;A++)se(t.e[K(t.R,0,A)],t.o[A]),se(t.e[K(t.R,1,A)],t.o[A]);if(n=tP(t),t.U==n)break;t.U=n,P=U2(t,!0)}}function O5(t,e){var A,n,P,r,i,f;for(ut(t,e?15:1),t.r=t.g,t.s=t.i,f=c(Pt,it,6,t.g,16,1),P=0;P<t.g;P++)t.e[P]!=t.k[P]&&(A=sf(t,P,!1),f[P]=t.e[P]==t.k[P]+1&&q9(t,t.n[P][t.k[P]]),t.e[P]=t.k[P],A!=-1&&(i=sf(t,P,!0),A!=i&&(r=((t.v[P]&b8)>>>27)-1,(r==-1||r<A)&&aA(t,P,A))));if(e)for(n=0;n<t.g;n++)f[n]&&oy(t,n);t.U=0}function GW(t,e){var A,n;return!_v(X(t.k,e))||X(t.k,e)==6&&(!W0(t.k,e)||R1(t.k,e)>0)||(A=eP(t.k,e)==null||u3(t.k,e)[0]==9?0:u3(t.k,e)[0],n=_i(t.k,e)-A,n<1)?!1:X(t.k,e)==16||X(t.k,e)==34||X(t.k,e)==52?O(t.k,e)==2&&R1(t.k,e)<=0?!1:n!=2:!0}function dt(t,e){if(t.L&&(t.H[e]&127)!=0){if((t.H[e]&9)!=0)return 1;if((t.H[e]&2)!=0)return 2;if((t.H[e]&4)!=0)return 3;if((t.H[e]&32)!=0)return 4;if((t.H[e]&64)!=0)return 5;if((t.H[e]&16)!=0)return 0}switch(t.I[e]&127){case 1:case 8:return 1;case 2:return 2;case 4:return 3;case 32:return 4;case 64:return 5;default:return 0}}function Ur(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(t,1),r=0;r<t.r;r++)e[r]=-1;for(Q=0,P=0;P<t.r;P++)if(e[P]==-1&&(!A||(t.v[P]&q0)!=0)){for(e[P]=Q,o=c(F,m,6,t.r,15,1),o[0]=P,D=0,L=0;D<=L;){for(f=n?t.j[o[D]].length:t.e[o[D]],s=0;s<f;s++)i=t.j[o[D]][s],e[i]==-1&&(!A||(t.v[i]&q0)!=0)&&(o[++L]=i,e[i]=Q);++D}++Q}return Q}function Zj(t,e,A){var n,P,r;return r=w.Math.sqrt((t.i[0].a-e)*(t.i[0].a-e)+(t.i[0].b-A)*(t.i[0].b-A)),r<8?1:(P=w.Math.sqrt((t.i[1].a-e)*(t.i[1].a-e)+(t.i[1].b-A)*(t.i[1].b-A)),P<8?2:(n=w.Math.sqrt((t.i[1].a-t.i[0].a)*(t.i[1].a-t.i[0].a)+(t.i[1].b-t.i[0].b)*(t.i[1].b-t.i[0].b)),r+P<n+5?3:0))}function q5(t,e,A){var n,P,r;for(t.f=z(e,0)==0?new n2:new $i(e),t.a=new n1,new n1,t.c=c(Ut,Tt,6,2,15,1),t.c[0]=Ge,t.c[1]=Ge,t.e=!1,P=0,r=0,n=0;n<t.d.i;n++)!eA(t.d,n)&&dt(t.d,n)==1&&Ct(t.d,K(t.d,0,n))>1&&Ct(t.d,K(t.d,1,n))>1&&(LA(t.d,n)?z9(t.d,n)>4&&++r:++P);t.b=A==-1?1<<1+P+(r/2|0):A,FR(t,w.Math.min(8,t.b))}function Wj(t){var e,A,n,P,r;for(P=W1(t.R,mt(t.L,0)),A=W1(t.R,mt(t.L,0)),r=Z1(t.R,Rt(t.L,0)),n=Z1(t.R,Rt(t.L,0)),e=0;e<t.L.r;e++)P>W1(t.R,mt(t.L,e))&&(P=W1(t.R,mt(t.L,e))),A<W1(t.R,mt(t.L,e))&&(A=W1(t.R,mt(t.L,e))),r>Z1(t.R,Rt(t.L,e))&&(r=Z1(t.R,Rt(t.L,e))),n<Z1(t.R,Rt(t.L,e))&&(n=Z1(t.R,Rt(t.L,e)));return new lA(P,r,A-P,n-r)}function _j(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;return r=e.a[A],i=e.a[P],D=l8(t.a,e,A,n),Q=l8(t.a,e,n,P),o=(L=e.a[A],s=e.a[n],y=e.a[P],l=kW(t.a,e,A,n,P),L>y&&(L=(h=U1(y),U1(y=L),h).a),f9(B(d(F,1),m,6,15,[2,1,3,0]),B(d(F,1),m,6,15,[s,L,y,l]),t)),f=r>i||r==i&&D<Q?1:0,o>=0?V0(t.b[o][4+f]):TZ(t.a.i,e,A,n,P)}function $j(){var t,e,A,n,P,r;for(r=new un(new mi((A=A2(\"/resources/druglikenessNoIndex.txt\"),w0(),A))),this.a=new n1;P=X1(r),P!=null;){if(n=P.indexOf(p0(9)),n==-1)throw At(new H1(\"line without TAB\"));t=(Mt(0,n,P.length),P.substr(0,n)),e=hD(Te((zt(n+1,P.length+1),P.substr(n+1)))),Ft(this.a,new hg(t,e))}}function aj(t,e){var A,n,P,r,i;if(t.d.r<2)return!0;for(i=new Zt(t.j);i.a<i.c.a.length;)r=_t(i),r.g=!0;for(P=0;P<t.k.length;P++)t.k[P]=!1;for(pW(t,e),A=new Xd(e),ty(t,e,A,0),n=0;NK(e)&&n<3&&!(gt(t.n,0)&&(q1(),I1(E1(Date.now()),t.n)))&&Da(t,e)!=0;n++)ty(t,e,A,2);return ty(t,e,A,3),ty(t,e,A,4),Uz(e)}function OW(t,e,A,n){var P,r,i,f,D,Q;return r=n==e.length-1?0:n+1,f=n==0?e.length-1:n-1,i=r==e.length-1?0:r+1,dt(t.f,A[n])==2&&(P=ze(t.f,A[n]),P==1||P==2)?(Tk(t,e[f],e[n],e[r])^Tk(t,e[i],e[r],e[n])&&(P=P==1?2:1),P):A8(t.f,A[n])?(D=As(kn(t.f),A[f],A[n]),Q=As(kn(t.f),A[r],A[n]),D!=-1||Q!=-1?D==Q?2:1:2):0}function qW(t,e,A,n,P,r){var i,f,D,Q,o,L;for(i=e.a[A],o=B(d(F,1),m,6,15,[e.a[n],e.a[P],e.a[r]]),f=0;f<4;f++){for(L=c(F,m,6,3,15,1),Q=0;Q<3;Q++)L[Q]=t.a.g.a[o[Q]-1][f+1];if(L.sort(pe(Q0.prototype.ld,Q0,[])),D=f9(B(d(F,1),m,6,15,[1,0,2,3]),B(d(F,1),m,6,15,[i,L[0],L[1],L[2]]),t),D>=0)return V0(t.b[D][4])}return 0}function zW(t){yy();var e,A,n,P,r,i,f,D,Q,o;if(t==null||t.length==0)return null;for(i=null,t=rf(t.toLowerCase(),\"-\"),D=W4,Q=0,o=D.length;Q<o;++Q)for(f=D[Q],r=c8(f[0],\";\"),A=r,n=0,P=A.length;n<P;++n){if(e=A[n],e1(rf(e.toLowerCase(),\"-\"),t))return e;if(rf(e.toLowerCase(),\"-\").startsWith(t))if(i==null)i=e;else return\"\"}return i}function z5(t,e){var A,n,P,r,i,f,D,Q;if(i=!1,e0(t.g,e)==0)for(r=1;r<O(t.g,e);r++)for(f=0;f<r;f++)n=_(t.g,e,r),P=_(t.g,e,f),t.G[n]>t.G[P]^n>P&&(i=!i);else for(r=0;r<O(t.g,e);r++){for(A=_(t.g,e,r),Q=0,D=c(F,m,6,3,15,1),f=0;f<O(t.g,A);f++)D[Q]=_(t.g,A,f),D[Q]!=e&&++Q;Q==2&&t.G[D[0]]>t.G[D[1]]^D[0]>D[1]&&(i=!i)}return i}function KW(t){var e,A,n,P,r;for(r=w.Math.max(t.D.g,t.u.g),t.a=W8(r),t.s=2,A=0;A<t.D.g;A++)t.s=w.Math.max(t.s,O(t.D,A)+qi(t.D,A));for(n=0;n<t.u.g;n++)t.s=w.Math.max(t.s,O(t.u,n)+qi(t.u,n));for(P=w.Math.max(2,(62+t.a+t.s*(t.a+5))/63|0),t.b=c(K4,H2,101,r,0,1),e=0;e<r;e++)t.b[e]=new xU(P);t.F=new qA(t.D,1),t.v=new qA(t.u,1)}function K5(t,e){var A,n,P,r,i;for(i=!1,n=0;n<t.V.r;n++)if(i0(t.V,n)){i=!0;break}if(r=Sm(t,i),r){for(K1(t),A=0;A<t.V.r;A++)(!i||i0(t.V,A))&&(e?de(t.V,A,2*r.a-mt(t.V,A)):Ve(t.V,A,2*r.b-Rt(t.V,A)));for(P=0;P<t.V.s;P++)(!i||bP(t.V,P))&&(c1(t.V,P)==257?g0(t.V,P,129):c1(t.V,P)==129&&g0(t.V,P,257));t.eb=w.Math.max(t.eb,1),P1(t.k)}}function tR(t){var e,A,n,P,r;for(n=Hp(t);n;){for(r=!1,A=0;A<O(t.D,n.b);A++)t.I[_(t.D,n.b,A)]==0&&(r=!0);for(P=!1,e=0;e<O(t.u,n.a);e++)t.B[_(t.u,n.a,e)]==0&&(P=!0);if(r&&P)break;t.I[n.b]=_y,t.B[n.a]=_y,n=Hp(t)}if(!n){for(A=0;A<t.I.length;A++)t.I[A]==_y&&(t.I[A]=0);for(e=0;e<t.B.length;e++)t.B[e]==_y&&(t.B[e]=0)}return n}function JW(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(o=e.p,D=e.n,Q=Z0(t,o[2]),L=ri(_8(Q,Z0(t,o[1]))),f=c2(L,D==o[1]?A:-A),P=e.o,r=0,i=P.length;r<i;++r)n=P[r],n!=D&&(s=t.k[n].a-Q.a,y=t.k[n].b-Q.b,l=t.k[n].c-Q.c,UU(t,n,s*f[0][0]+y*f[0][1]+l*f[0][2]+Q.a),LU(t,n,s*f[1][0]+y*f[1][1]+l*f[1][2]+Q.b),sU(t,n,s*f[2][0]+y*f[2][1]+l*f[2][2]+Q.c))}function YW(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(e,1),l=t.k,h=0,T=l.length;h<T;++h)y=l[h],Q=A[y.a],o=A[y.b],L=o1(e,Q,o),L==-1?J0(e,Q,o,y.e):y.e==-1?e.I[L]=512:y.e!=-2&&g0(e,L,y.e);if(f=ui(e),t.a.length!=0)for(ut(e,7),P=t.a,r=0,i=P.length;r<i;++r)n=P[r],D=f==null?A[n]:f[A[n]],s=e.v[D]&3,me(e,D,s==1?2:1,!1),oy(e,D);return f}function XW(t,e,A){var n,P,r,i,f;if(t.V.L){if(ye(t.V,e)||ye(t.V,A)||(n=IA(t.V,e),P=IA(t.V,A),n==null^P==null))return!1;if(n!=null){if(n.length!=P.length)return!1;for(r=0;r<n.length;r++)if(n[r]!=P[r])return!1}if(i=gt(V(h0(t.V,e),1),0),f=gt(V(h0(t.V,A),1),0),i!=f)return!1}return X(t.V,e)==X(t.V,A)}function eR(){eR=v1,jS=B(d(Kt,1),t1,6,15,[0,60,120,180,240,300]),mS=B(d(Kt,1),t1,6,15,[17,17,17,17,17,17]),bS=B(d(Kt,2),ie,16,0,[B(d(Kt,1),t1,6,15,[-20,20]),B(d(Kt,1),t1,6,15,[40,80]),B(d(Kt,1),t1,6,15,[100,140]),B(d(Kt,1),t1,6,15,[160,200]),B(d(Kt,1),t1,6,15,[220,260]),B(d(Kt,1),t1,6,15,[280,320])])}function J5(t,e){var A,n,P,r;return A=t.F[0][e],n=t.F[1][e],P=rA(t,A),r=rA(t,n),!P&&!r?e<t.i&&Ee(t.q,e)?UC:L4+dt(t,e)/10:P&&r||P&&Ae(t,n)||r&&Ae(t,A)?co:P&&Xk(t,n,A)||r&&Xk(t,A,n)?Ny:P&&vk(t,n,A)||r&&vk(t,A,n)?g4:P&&n<t.g&&f0(t.q,n)||r&&A<t.g&&f0(t.q,A)?1.9500000476837158:L4}function ZW(t){var e,A;for(t=V(t,l9),A=0;A<(T6(),di).length;A++)if(n0(t,di[A]))return VE[A];return e=new bn(\"R\"),gt(V(t,w8),0)&&(e.a+=\"0\"),gt(V(t,h9),0)&&(e.a+=\"3\"),gt(V(t,T9),0)&&(e.a+=\"4\"),gt(V(t,c9),0)&&(e.a+=\"5\"),gt(V(t,w9),0)&&(e.a+=\"6\"),gt(V(t,g9),0)&&(e.a+=\"7\"),gt(V(t,Vf),0)&&(e.a+=\"8\"),e.a}function WW(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(L=Qp(t.D),f=Qp(t.u),i=c(gS,c0,44,8,0,1),y=Qj(t.D,L),Q=Qj(t.u,f),o=0;o<=7;o++)for(i[o]=new Ji(new _l),r=(n=new J8(new K8(new br(y[o]).a).b),new jr(n));Nr(r.a.a);)P=(A=H9(r.a),A.hd()),s=Be(y[o],P),D=Be(Q[o],P),D!=null&&(e=c(F,u0,7,2,0,2),e[0]=s,e[1]=D,We(i[o],P,e));return i}function _W(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(A=e.a,s=e.i,i=1;i<A.length;i++)if(A[i]!=null){for(f=0;f<i;f++)if(A[i][f]!=0){for(o=t.f[i][f],L=new Nk(s,o,A[i][f],t.C),D=!1,Q=null,n=Pr(t.i,e.d).c,r=new Zt(n);r.a<r.c.a.length;){if(P=_t(r),lJ(P,L)){D=!0;break}hJ(P,L)&&(!Q&&(Q=new n1),Q.a.push(P))}D||(Q&&Ds(n,Q),n.a.push(L))}}}function Y5(t,e){var A,n,P,r;if(t.p[e]==2&&t.k[e]==2&&t.o[e][0]==2){for(P=0;P<2;P++)if(A=tm(t,e,t.j[e][P]),A!=-1)for(r=0;r<t.k[A];r++)n=t.n[A][r],(t.I[n]==257||t.I[n]==129)&&t.F[0][n]==A&&(t.I[t.n[A][r]]=1);return}if(t.p[e]==0||t.D[e]>=15)for(P=0;P<t.e[e];P++)n=t.n[e][P],(t.I[n]==257||t.I[n]==129)&&t.F[0][n]==e&&t.F[0][n]==e&&(t.I[n]=1)}function AR(t,e,A){var n,P,r,i,f;if(t.b){for(t.C=c(Pt,it,6,e.length,16,1),P=new Zt(t.b);P.a<P.c.a.length;)if(n=_t(P),t.f==null||A==-1&&t.f[n.a]==-1&&t.f[n.b]==-1||A!=-1&&(t.f[n.a]==A||t.f[n.b]==A)){if(f=c(F,m,6,n.c+2,15,1),r=B2(t.H,f,t.G[n.a],t.G[n.b],n.c+1,e,null)-1,r<n.d||r>n.c)return!1;for(i=1;i<=r;i++)t.C[f[i]]=!0}}return!0}function $W(t){var e,A,n,P,r,i;if(t.L.L){for(i=t.W,$1(t,-7),e=0;e<t.L.g;e++)ye(t.L,e)&&t.ub(W1(t.R,mt(t.L,e))-i,Z1(t.R,Rt(t.L,e))-i,2*i);for(t.Ab(2*t.W),r=new h1,P=0;P<t.L.s;P++)A=K(t.L,0,P),n=K(t.L,1,P),gt(V(V(h0(t.L,A),h0(t.L,n)),Pe),0)&&(r.a=W1(t.R,mt(t.L,A)),r.c=Z1(t.R,Rt(t.L,A)),r.b=W1(t.R,mt(t.L,n)),r.d=Z1(t.R,Rt(t.L,n)),t.qb(r))}}function aW(t,e){var A,n,P,r,i,f,D,Q,o;for(o=new n1,A=0;A<e.r;A++)for(i=0;i<e.e[A];i++)for(n=e.j[A][i],f=0;f<e.e[n];f++)if(P=e.j[n][f],A!=P)for(D=0;D<e.e[P];D++)r=e.j[P][D],!(n==r||A==r)&&r>A&&(Q=new Zk(t,e,A,n,P,r),(w.Math.abs(Q.e)>.001||w.Math.abs(Q.f)>.001||w.Math.abs(Q.g)>.001)&&o.a.push(Q));return o}function nR(t){var e,A,n,P,r,i,f,D,Q;for(Q=0,ut(t,7),n=0;n<t.i;n++)if(dt(t,n)==1&&(t.G[n]&64)==0){for(f=!0,i=0;i<2;i++){if(e=t.F[i][n],t.k[e]==1){f=!1;break}if(t.D[e]==7&&!(e<t.g&&f0(t.q,e))){for(A=t.F[1-i][n],D=0;D<t.k[A];D++)if(P=t.j[A][D],r=t.n[A][D],r!=n&&dt(t,r)>1&&!(P<t.g&&f0(t.q,P))&&rA(t,P)){f=!1;break}}}f&&!Sj(t,n)&&++Q}return Q}function BA(t,e,A,n,P,r){var i,f,D,Q;if(A=w.Math.max(0,A),n=w.Math.min(r.mc(),n),i=(n-A)/2|0,D=A,f=n,r.lc(D,t)>e||r.lc(f-1,t)<e)return-1;for(;n>=A;){if(i=A+((n-A)/2|0),Q=r.lc(i,t),Q==e)if(P&&i>D&&r.lc(i-1,t)==e)n=i;else if(!P&&i<f-1&&r.lc(i+1,t)==e)A=i;else return i;else Q>e?n=i:Q<e&&(A=i);if(n-A==1&&r.lc(A,t)<e&&r.lc(n,t)>e)break}return-1}function PR(t,e,A){var n,P,r,i;if(O(t.c,e)==2)return 1;if(n=_K(t,e,A),O(t.c,e)==3)return H0(t.c,n[0])==H0(t.c,n[1])?e0(t.c,e)==1&&X(t.c,e)<10||mn(t.c,e)||xP(t.c,e,!0)?2:1:e0(t.c,e)==1&&X(t.c,e)<10||mn(t.c,e)||xP(t.c,e,!0)?1:0;if(O(t.c,e)==4){for(P=0;P<n.length;P++)for(i=H0(t.c,n[P]),r=P+1;r<n.length;r++)if(i==H0(t.c,n[r]))return 1}return 0}function X5(t,e,A,n){var P,r,i,f,D;for(r=new VP(t.f,e.e.length+A.e.length-n,e.i|A.i),P=0,f=0;f<e.e.length;f++)r.e[P]=e.e[f],r.k[P]=e.k[f],r.a[P]=e.a[f],r.b[P++]=e.b[f];for(i=0;i<A.e.length;i++)D=L8(e,A.e[i]),D==-1?(r.e[P]=A.e[i],r.k[P]=A.k[i],r.a[P]=A.a[i],r.b[P++]=A.b[i]):r.k[D]<A.k[i]&&(r.k[D]=A.k[i],r.a[D]=A.a[i],r.b[D]=A.b[i]);return r}function Z5(t,e,A,n){var P,r,i,f;if(f=new h1,!(e.a==e.b&&e.c==e.d)){for(f.a=e.a,f.c=e.c,f.b=e.b,f.d=e.d,i=Wm(f),P=0;P<t.$.a.length;P++)if(r=G(t.$,P),!(r.c>i.c+i.b||r.d>i.d+i.a||i.c>r.c+r.b||i.d>r.d+r.a)){if(t2(t,f.a,f.c,P)){if(t2(t,f.b,f.d,P))return;Xs(t,f,0,P),Z5(t,f,A,n);return}if(t2(t,f.b,f.d,P)){Xs(t,f,1,P),Z5(t,f,A,n);return}}E_(t,f,A,n)}}function t_(t){var e,A,n,P,r,i,f,D,Q;for(D=c(F,m,6,t.j.r,15,1),n=0;n<t.j.s;n++)if(c1(t.j,n)==8)for(i=0;i<2;i++)D[K(t.j,i,n)]=1;for(P=0;P<t.j.s;P++)for(Q=dt(t.j,P),r=0;r<2;r++)D[K(t.j,r,P)]+=Q;for(A=0;A<t.j.s;A++)if(dt(t.j,A)==1){for(r=0;r<2;r++)if(f=K(t.j,1-r,A),Ae(t.j,f)&&(e=K(t.j,r,A),rA(t.j,e)&&D[e]>j3(t.j,e))){g0(t.j,A,16);continue}}}function ut(t,e){var A,n,P,r;if(Fp(t,e),(e&~t.U)!=0){for((t.U&15)!=0&&t.r>1&&hs(t.K[0],t.K[1])&&U9(new a8(0),t),t.c&&(e|=128),A=0;A<t.r;A++)t.v[A]&=-67223560;for(n=0;n<t.i;n++)t.G[n]&=-64;P=0,r=0,(e&32)!=0?(P=32,r=1):(e&64)!=0&&(P=64,r=3),(e&128)!=0&&(P|=128,r|=32),t.d=new qA(t,r),l6(t.d),qG(t.d),bK(t.d),H$(t)&&(t.d=new qA(t,r)),t.U|=24|P}}function e_(t,e,A){var n,P,r,i,f,D,Q;for(gh(t.p),t.o[0]=e,t.p[e]=!0,r=0,i=0;r<=i;){for(f=0;f<t.j[t.o[r]].length;f++){if(P=t.j[t.o[r]][f],P==A){for(n=1,D=r;D!=0;)++n,D=t.q[D];for(Q=c(F,m,6,n,15,1),Q[0]=t.k[t.o[r]][f],n=1;r!=0;)Q[n++]=t.n[r],r=t.q[r];return Q}t.p[P]||(t.p[P]=!0,++i,t.o[i]=P,t.n[i]=t.k[t.o[r]][f],t.q[i]=r)}++r}return null}function A_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;for(L=e.b-e.a,l=e.d-e.c,D=w.Math.sqrt(L*L+l*l),Q=2*Ot(E1(w.Math.round(D/(4*t.Y)))),s=L/(Q-1),h=l/(Q-1),V9(t.L,o1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n]),o=e.a-t.Y/2,y=e.c-t.Y/2,$1(t,P),f=0;f<(Q/2|0);f++)t.ub(o,y,t.Y),o+=s,y+=h;for($1(t,r),i=0;i<(Q/2|0);i++)t.ub(o,y,t.Y),o+=s,y+=h;$1(t,t.Q)}function n_(t){for((t.Q&1)!=0&&(t.Q&2)==0&&(t.g=Mn(t.f,t.R.g)),(t.Q&O1)==0&&(t.W=c(Pt,it,6,t.R.g,16,1),t.V=c(Pt,it,6,t.R.i,16,1),t.U<t.R.g&&(VZ(t),(t.Q&O1)==0&&(g2(t),t.P&&h2(t.P,t.f)))),t.g==null&&(t.Q&1)!=0&&(t.Q&2)!=0&&(t.g=Mn(t.f,t.R.g));t.U<t.R.g;)fZ(t),(t.Q&O1)==0&&(g2(t),t.P&&h2(t.P,t.f));(t.Q&O1)==0&&(g2(t),A1t(t),va(t))}function P_(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if(o1(t,e,A)==-1||o1(t,A,n)==-1||o1(t,n,P)==-1)return 0;if(o1(t,P,e)>=0)return 4;for(L=(ut(t,7),t.q),s=new ji,xA(s,U1(e)),xA(s,U1(A)),xA(s,U1(n)),xA(s,U1(P)),Q=0;Q<L.j.a.length;Q++)if(G(L.k,Q).length==5){for(o=new ji,i=G(L.j,Q),f=0,D=i.length;f<D;++f)r=i[f],xA(o,U1(r));if(oQ(o,s))return 5}return 0}function r_(t,e,A){var n,P,r,i,f,D,Q,o,L;for(o=c(Pt,it,6,A.r,16,1),o[t[0]]=!0,i=0,f=0;i<=f&&A.p[t[i]]<2;){for(Q=0;Q<A.k[t[i]];Q++)n=A.j[t[i]][Q],P=A.n[t[i]][Q],e[P]&&(o[n]||(t[++f]=n,o[n]=!0),e[P]=!1);++i}for(D=f;D>=0;D--)if(A.D[t[D]]<=8)for(L=0;L<A.e[t[D]];L++)r=A.j[t[D]][L],!o[r]&&A.o[t[D]][L]!=0&&(t[++f]=r,o[r]=!0);return f+1}function i_(t,e){var A,n,P,r,i,f,D,Q;for(r=t,n=e.j[r][0];e.e[r]!=1&&e.p[r]==2&&(Q=n,n=r,r=e.j[r][0]==Q?e.j[r][1]:e.j[r][0],r!=t););for(D=r,i=n,P=2;e.e[i]!=1&&e.p[i]==2&&(Q=D,D=i,i=e.j[i][0]==Q?e.j[i][1]:e.j[i][0],++P,i!=r););for(A=c(F,m,6,P,15,1),A[0]=r,A[1]=n,f=2;f<P;f++)A[f]=e.j[A[f-1]][0]==A[f-2]?e.j[A[f-1]][1]:e.j[A[f-1]][0];return A}function f_(t){var e,A;if(t.indexOf(\"[\")>=0){if(e=t.indexOf(\" NOT[\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return-(A+1);if(e=t.indexOf(\" [\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return A+1;if(e=t.indexOf(\" 'NOT[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return-(A+2);if(e=t.indexOf(\" '[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return A+2;q1()}return 0}function D_(t,e){var A,n,P,r,i,f,D,Q;if(i=YA[0]*t[0]+YA[1]*t[1]+YA[2]*t[2],i==0){t[0]=0,t[1]=0,t[2]=0;return}for(A=e/i,Q=0,D=0,P=0;P<3;P++)t[P]*=A,t[P]<1?D+=YA[P]:(Q+=(t[P]-1)*YA[P],t[P]=1);if(Q!=0){for(f=0,r=0;r<3;r++)t[r]<1&&(t[r]+=Q/D,t[r]>1&&(f+=(t[r]-1)*YA[r],t[r]=1));if(f!=0)for(n=0;n<3;n++)t[n]<1&&(t[n]+=f/YA[n],t[n]>1&&(t[n]=1))}}function Js(t,e,A,n){var P,r,i,f,D,Q,o,L;for(P=0;P<t.g;P++)if(t.D[P]==A&&t.t[P]==0&&xt(t,P)>0)for(f=!1,Q=0;Q<t.k[P];Q++){if(t.o[P][Q]==1&&(r=t.j[P][Q],t.D[r]==n)){for(L=!1,D=!1,o=0;o<t.k[r];o++){if(i=t.j[r][o],t.t[i]<0){D=!0;break}i!=P&&t.D[i]==8&&t.o[r][o]==2&&(L=!0)}if(!D&&L){if(t.t[P]=-1,t.U=0,--e,e==0)return 0;f=!0}}if(f)break}return e}function u_(t,e,A,n,P){var r,i,f,D;if((e.v[A]&3)!=0&&(e.v[A]&4)==0&&n0(V(e.C[A],k8),0)&&(f=w.Math.abs(e.A[A]),f!=0)){for(i=0;i<t.c.g.a.length;i++)for(r=C9(t.c,i),D=0;D<r.g;D++)if(w.Math.abs(r.A[D])==f)return!!(e.k[A]==n.k[P]||gt(V(r.C[D],je),0)||(r.v[D]&b1)>>18!=(e.v[A]&b1)>>18)}return!1}function Q_(t,e){var A,n,P,r,i,f,D;if(e.startsWith(\"M  ALS\")&&(n=L1(k1((Mt(7,10,e.length),e.substr(7,3))),f1,Et)-1,n>=0)){for(i=L1(k1((Mt(10,13,e.length),e.substr(10,3))),f1,Et),P=(zt(14,e.length),e.charCodeAt(14)==84),D=c(F,m,6,i,15,1),A=16,r=0;r<i;++r,A+=4)f=k1((Mt(A,A+4,e.length),e.substr(A,A+4-A))),D[r]=zA(f,1);$0(t.j,n,6),gf(t.j,n,D,P)}}function qQ(t,e,A,n){var P,r,i,f,D;f=(e.b-e.a)/10,D=(e.d-e.c)/10,P=new h1,V9(t.L,o1(t.L,A,n))?(r=-3,i=-3):(r=t.p[A],i=t.p[n]),$1(t,r),P.a=e.a,P.c=e.c,P.b=e.a+f*2,P.d=e.c+D*2,t.qb(P),P.a=e.a+f*4,P.c=e.c+D*4,P.b=e.a+f*5,P.d=e.c+D*5,t.qb(P),$1(t,i),P.a=e.a+f*5,P.c=e.c+D*5,P.b=e.a+f*6,P.d=e.c+D*6,t.qb(P),P.a=e.a+f*8,P.c=e.c+D*8,P.b=e.b,P.d=e.d,t.qb(P),$1(t,t.Q)}function W5(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if((t.q&&e<t.g?UA(t.q,e):0)>24||(r=t.e[e],P==null&&(P=c(F,m,6,r,15,1)),!C_(t,e,A,n,P)))return 3;for(D=-1,Q=0;Q<r;Q++)if((P[Q]&1)==1){if(i=t.I[t.n[e][A[Q]]],D!=-1&&D!=i)return 3;D=i}return o=w.Math.abs(P[0]-P[1])==2?1:0,f=P[o]-P[o+1],s=w.Math.abs(f)==3^P[o]<P[o+1],L=r==3||(P[3]&1)==1,s^L^D==129?1:2}function w2(t,e,A,n){var P,r,i,f;if(t.L.r==0)return null;for(i=t.Db(A,n),ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),xk(t),t.U.a.length=0,t.$.a.length=0,t.B=e,qm(t),t.Cb(t.X),t.K=!0,r=0;r<t.L.r;r++)aQ(t,r,null);return t.K=!1,P=t.R.c*G8(t.L),ym(t,P),N5(t,A,P,n),!A||YG(A,t.v)?i:(f=new ry(t.v,A,P,n),Gu(f,t.R),Yu(f,t.v),rB(f,t.w),i?(Gu(f,i),i):f)}function o_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(P=c(F,m,6,n,15,1),r=0,i=0;i<e.e.length;i++)for(f=0;f<A.e.length;f++)e.e[i]==A.e[f]&&(P[r++]=e.e[i]);D=n==1?(Q=L8(e,P[0]),o=L8(A,P[0]),Iv(A,e.a[Q]-A.a[o],e.b[Q]-A.b[o]),L=Dp(t,e,P[0]),s=Dp(t,A,P[0]),y=0,XL(t,e,P[0])==1&&XL(t,A,P[0])==1&&(y=fA),Tf(A,A.a[o],A.b[o],L-s+y+l1),X5(t,e,A,1)):Jtt(t,e,A,P,n),rk(t,e,A,D)}function U_(t,e){var A,n,P,r,i,f;if((t.o[e]==1||t.o[e]==2)&&!A8(t.R,e)){i=!1;try{for(r=0;r<2;r++)if(A=K(t.R,r,e),O(t.R,A)==3){for(n=c(F,m,6,2,15,1),P=0,f=0;f<O(t.R,A);f++)Nt(t.R,A,f)!=e&&(n[P++]=_(t.R,A,f));t.f[n[0]]>t.f[n[1]]^v6(t,A,n[0],n[1])&&(i=!i)}}catch(D){if(D=_1(D),Yt(D,19)){t.i[e]=3;return}else throw At(D)}t.o[e]==1^i?t.i[e]=1:t.i[e]=2}}function L_(t){var e,A,n;for(this.c=new n1,n=0,e=0;e<t.g;e++)n+=xt(t,e);if(n>0)throw At(new ZP(\"molecule needs explicit hydrogen atoms for force field calculations\"));for(this.g=t,this.d=3*t.r,this.e=c(Ut,Tt,6,this.d,15,1),this.i=c(Ut,Tt,6,this.d,15,1),this.f=!1,this.j=20,A=0;A<t.r;A++)this.i[3*A]=t.K[A].a,this.i[3*A+1]=t.K[A].b,this.i[3*A+2]=t.K[A].c}function rR(t){var e,A,n,P,r,i,f,D,Q,o;for(this.a=new Jn,e=0;e<t.r;e++)for(Jr(this.a,new zi(e,e),(P9(),Uc)),A=0;A<t.e[e];A++)for(D=t.j[e][A],f=new zi(e,D),Jr(this.a,f,sc),n=0;n<t.e[D];n++)for(Q=t.j[D][n],i=new zi(e,Q),(!Kr(this.a,i)||z1(D8(this.a,i))===z1(wi))&&Jr(this.a,i,Lc),P=0;P<t.e[Q];P++)o=t.j[Q][P],r=new zi(e,o),Kr(this.a,r)||Jr(this.a,r,wi)}function s_(t){e1(t,H4)&&!KE?(Hi(),r3(H4,new Ss(\"/resources/forcefield/mmff94/outofplane.csv\",\"/resources/forcefield/mmff94/torsion.csv\")),KE=!0):e1(t,V4)&&!JE?(Hi(),r3(V4,new Ss(PE,\"/resources/forcefield/mmff94/94s/torsion.csv\")),JE=!0):e1(t,Jy)&&!YE&&(Hi(),r3(Jy,new Ss(PE,\"/resources/forcefield/mmff94/94s/torsionPlus.csv\")),YE=!0)}function y_(t,e){return!e&&(e={keepAbsoluteCoordinates:!1,mode:3}),e=Object.assign({},e),e.keepAbsoluteCoordinates=!!e.keepAbsoluteCoordinates,\"sortByIDCode\"in e?(e.sortByIDCode=!!e.sortByIDCode,BN(t,e.keepAbsoluteCoordinates,e.sortByIDCode)):(typeof e.mode!==s9&&(e.mode=3),e.mode=Math.trunc(e.mode),_x(t,e.keepAbsoluteCoordinates,e.mode))}function Ff(t,e,A,n){var P,r,i,f;for(this.e=t,this.g=A,this.a=n,i=-1,f=0;f<Ct(this.e,this.a);f++){if(P=_(this.e,this.a,f),r=Nt(this.e,this.a,f),P==this.g){c1(this.e,r)==386&&(this.j=-1);continue}_9(this.e,r,this.a)&&(this.i&&(t.v[n]|=o0),this.i=!0),i==e[P]?(this.d=P,this.f=!0,this.c=LA(this.e,r)):i<e[P]?(i=e[P],this.d=this.b,this.b=P):this.d=P}}function l_(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  RAD\")&&(P=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)switch(n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,i=L1(k1((Mt(f,f+3,e.length),e.substr(f,f+3-f))),f1,Et),i){case 1:Je(t.j,n,16);break;case 2:Je(t.j,n,32);break;case 3:Je(t.j,n,48)}}function iR(t){var e,A,n,P,r,i,f,D;for(t.t=new n1,n=1,r=0,A=0;A<t.u.g;A++)M1(t.u,A)!=0&&!Fn(t.u,A)&&(r=w.Math.max(r,M1(t.u,A)));if(r!=0){for(P=c(F,m,6,r+1,15,1),e=0;e<t.u.g;e++)M1(t.u,e)!=0&&!Fn(t.u,e)&&(P[M1(t.u,e)]=e+1);for(f=0;f<t.D.g;f++)D=M1(t.D,f),D!=0&&D<=r&&!Fn(t.D,f)&&P[D]!=0&&(i=P[D]-1,t.I[f]=n,t.B[i]=n++,Ft(t.t,new FD(f,i)))}return t.t.a.length}function Ce(){Ce=v1;var t;for(X2=new RA(1,1),Ko=new RA(1,10),new RA(1,2),vr=new RA(0,0),Rc=new RA(-1,1),US=B(d(Fi,1),_e,23,0,[vr,X2,new RA(1,2),new RA(1,3),new RA(1,4),new RA(1,5),new RA(1,6),new RA(1,7),new RA(1,8),new RA(1,9),Ko]),Jo=c(Fi,_e,23,32,0,1),t=0;t<Jo.length;t++)Jo[t]=ku(Wt(1,t),0)?be(Wt(1,t)):mP(be(E0(Wt(1,t))))}function fR(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(r=e.e,r==0)throw At(new I8(DE));return P=e.d,n=e.a,P==1?n$(t,n[0],r):(y=t.a,l=t.d,A=l!=P?l>P?1:-1:sQ(y,n,l),A<0?B(d(Fi,1),_e,23,0,[vr,t]):(h=t.e,f=l-P+1,o=P,D=h==r?1:-1,i=c(F,m,6,f,15,1),Q=vp(i,f,y,l,n,P),L=new le(D,f,i),s=new le(h,o,Q),Cn(L),Cn(s),B(d(Fi,1),_e,23,0,[L,s])))}function _5(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if($R(t,e,A,n),Ed(t.p))return null;if(t.k!=null)for(s=t.k,y=0,l=s.length;y<l;++y)L=s[y],_h(t.p,L);if(t.g)for(T=new Zt(t.g);T.a<T.c.a.length;)h=_t(T),DN(t.p,h);if(t.e!=null)for(i=t.e,D=0,o=i.length;D<o;++D)P=i[D],hU(P.R);if(t.b!=null)for(r=t.b,f=0,Q=r.length;f<Q;++f)P=r[f],hU(P.R);return g=t.p,t.p=new Qu,g}function h8(t,e,A){var n,P,r,i,f;return r=!1,i=t.I[e],A==511?r=_$(t,e):Cq(t,e,A)&&(A==257||A==129?(n=qj(t,e,t.F[0][e]),P=qj(t,e,t.F[1][e]),A==i?(n==P||P)&&(f=t.F[0][e],t.F[0][e]=t.F[1][e],t.F[1][e]=f,r=!0):(!n&&P&&(f=t.F[0][e],t.F[0][e]=t.F[1][e],t.F[1][e]=f),t.I[e]=A,r=!0)):(t.I[e]=A,r=!0)),r&&(t.U=(i&127)==(A&127)?t.U&7:0,t.H[e]=0),r}function h_(t){var e,A,n,P,r,i,f,D;if(f=null,A=t.indexOf(\"[\"),n=t.indexOf(\"]\",A),A>=0&&n>0){for(e=c(F,m,6,16,15,1),D=(Mt(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=0,i=!0;i&&P<16;)A=D.indexOf(\",\"),r=null,A==-1?(r=D,i=!1):(r=(Mt(0,A,D.length),D.substr(0,A)),D=(zt(A+1,D.length+1),D.substr(A+1))),e[P++]=zA(r,1);f=c(F,m,6,P,15,1),PA(e,0,f,0,P)}return f}function DR(t,e,A){var n,P,r,i;if(!t.b&&!t.c)aD(A,e);else if(t.c){if(aD(A,e),Kr(t.f,U1(e)))for(i=D8(t.f,U1(e)),P=0;P<i.size();P++)for(n=i.getAtIndex(P),r=0;r<n.length;r++)aD(A,n[r])}else if(t.b&&(aD(A,e),Kr(t.e,U1(e))))for(i=D8(t.e,U1(e)),P=0;P<i.size();P++)for(n=i.getAtIndex(P),r=0;r<n.length;r++)aD(A,n[r]);A.a.length==1?A.b=A.a[0]:A.b=Mu(A.a)}function uR(t){var e,A,n,P;for(dU.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)n=(Mt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(zt(A+1,t.length+1),t.substr(A+1)):(Mt(A+1,e,t.length),t.substr(A+1,e-(A+1))),e1(n,\"text\")?this.e=$_(P):e1(n,\"x\")?Uq(this,P):e1(n,\"y\")?oq(this,P):e1(n,\"size\")?aO(this,P):e1(n,\"style\")&&vq(this,P)}function T_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(y=e.length,D=y,zt(0,e.length),e.charCodeAt(0)==45?(L=-1,s=1,--y):(L=1,s=0),r=(Zs(),sS)[10],P=y/r|0,T=y%r,T!=0&&++P,f=c(F,m,6,P,15,1),A=LS[8],i=0,l=s+(T==0?r:T),h=s;h<D;h=l,l=h+r)n=L1((Mt(h,l,e.length),e.substr(h,l-h)),f1,Et),Q=(Lr(),cs(f,f,i,A)),Q+=JK(f,i,n),f[i++]=Q;o=i,t.e=L,t.d=o,t.a=f,Cn(t)}function QR(t){var e;switch(ut(t,31),e=t.J&d1,t.J&GP){case o0:return null;case q0:return e==1?\"meso\":\"\"+e+\" meso diastereomers\";case 0:return\"unknown chirality\";case Fy:return\"both enantiomers\";case v8:return\"this enantiomer\";case 327680:return\"this or other enantiomer\";case Ti:return\"two epimers\";default:return e==1?\"one stereo isomer\":\"\"+e+\" stereo isomers\"}}function oR(t){var e;for(t.U=0,t.D=c(F,m,6,t.N,15,1),t.t=c(F,m,6,t.N,15,1),t.A=c(F,m,6,t.N,15,1),t.K=c(q2,V2,28,t.N,0,1),e=0;e<t.N;e++)t.K[e]=new N0;t.B=c(F,m,6,t.N,15,1),t.v=c(F,m,6,t.N,15,1),t.C=c(XA,re,6,t.N,14,1),t.w=null,t.u=null,t.F=j1(F,[u0,m],[7,6],15,[2,t.O],2),t.I=c(F,m,6,t.O,15,1),t.G=c(F,m,6,t.O,15,1),t.H=c(F,m,6,t.O,15,1)}function c_(t,e,A,n,P,r,i){var f,D,Q,o,L;if(O(t.j,A)==3&&(v0(t.j,A)==1||v0(t.j,A)==2)&&O(t.d,r)==3&&(v0(t.d,r)==1||v0(t.d,r)==2)){for(L=e>n,Q=-1,D=0;D<O(t.j,A);D++)if(Q=_(t.j,A,D),Q!=e&&Q!=n){(Q>n&&Q<e||Q<n&&Q>e)&&(L=!L);break}for(o=P>i,f=0;f<O(t.d,r);f++)if(Q=_(t.d,r,f),Q!=P&&Q!=i){(Q>i&&Q<P||Q<i&&Q>P)&&(o=!o);break}return L==o==(v0(t.j,A)==v0(t.d,r))}return!0}function $5(t,e){var A,n,P,r,i,f;for(i=(t.U&4)!=0,f=!1,P=!1,r=!1,A=null,n=0;n<t.V.r;n++)if(i0(t.V,n))if(f){if(r!=EQ(A,mt(t.V,n),Rt(t.V,n))){P=!0;break}}else{if(f=!0,!i)break;A=G(t.I,0),r=EQ(A,mt(t.V,n),Rt(t.V,n))}return e?i?P?(Lm(t,!0),!0):f?(dF(t,!0),!1):(Lm(t,!1),!0):(dF(t,f),!1):i&&(P||!f)}function w_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;for(f=0,s=0;s<A.c.length;s++)for(P=A.e[A.c[s]],T=XD(X(t.k,P)),y=0;y<n.c.length;y++)r=n.e[n.c[y]],l=T+XD(X(t.k,r)),Q=w.Math.abs(e.k[P].a-e.k[r].a),Q<l&&(o=w.Math.abs(e.k[P].b-e.k[r].b),o<l&&(L=w.Math.abs(e.k[P].c-e.k[r].c),L<l&&(D=w.Math.sqrt(Q*Q+o*o+L*L),D<l&&(h=(l-D)/l,i=h*h,f+=i))));return 20*f}function g_(t){var e,A,n,P,r;for(t.a=t.d.f,t.b=c(Pt,it,6,t.k.g,16,1),t.c=c(Pt,it,6,t.k.i,16,1),t.g=new n1,e=lb(t);e!=-1;){if(A=t.g.a.length,cF(t,new K3(e,-1,-1,!1,!1),A),O(t.k,e)!=0)for(fb(t,A,!1);A<t.g.a.length-1;){for(;tz(t,G(t.g,A).a);)fb(t,A,!0);++A}e=lb(t)}for(t.q=c(F,m,6,t.k.g,15,1),n=0,r=new Zt(t.g);r.a<r.c.a.length;)P=_t(r),t.q[P.a]=n++}function IP(t,e,A){var n,P,r;if(A!=null&&(A.length==0?A=null:(n=zA(A,321),(n!=0&&n==t.D[e]||e1(A,\"?\"))&&($0(t,e,n),A=null))),A==null){if(t.u!=null&&t.u[e]!=null)return t.u[e]=null,t.D[e]==1&&(t.U=0),!0}else if(t.u==null&&(t.u=c(E,m8,10,t.N,0,2)),t.u[e]==null||!e1(on((r=t.u[e],w0(),r)),A))return t.u[e]=ln((P=A,w0(),P)),t.D[e]==1&&(t.U=0),!0;return!1}function UR(t,e,A,n,P){var r,i,f,D,Q,o;if(n&&G1(t,e)>1||!n&&G1(t,e)>2)return!1;for(i=0,r=c(Ut,Tt,6,4,15,1),D=0;D<t.s;D++){for(Q=0;Q<2;Q++)if(t.F[Q][D]==e){if(i==2){i=3;break}r[i++]=_0(t,e,t.F[1-Q][D])}if(i==3)break}return i==3?!1:(o=i==1?r[0]+l1:w.Math.abs(r[0]-r[1])>l1?(r[0]+r[1])/2:(r[0]+r[1])/2+l1,f=l1*(A-2)/A,U6(t,e,A,e,n,o-f/2,l1-f,P),t.U=0,!0)}function a5(t){var e,A,n,P,r;if(P=new ig(new S8),r=new kg,t.k!=null)for(n=0;n<t.k.length;n++)for(e=0;e<t.k[n].s;e++)Fs(P,t.e[n].R.c*ET(t.k[n],e)),Fs(r,uT(P)),P.b.a.length<r.b.a.length&&Fs(P,uT(r));return A=P.b.a.length+r.b.a.length,A==0?m_(t):t.p.c*(A%2==0?(hD(P.b.a.length==0?null:G(P.b,0))+hD(r.b.a.length==0?null:G(r.b,0)))/2:hD(P.b.a.length==0?null:G(P.b,0)))}function LR(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;for(L=!1,s=0,Q=0;Q<A;Q++)t.I[Q]!=16&&(t.H[Q]&d8)==0&&++s;if(s==0){for(o=0;o<A;o++)(t.H[o]&d8)==0&&++s;L=!0}if(s==0){if(e<2)return n;for(l=Ge,r=1;r<e;r++)for(i=0;i<r;i++)y=dT(P[r],P[i]),y>0&&y<l&&(l=y);return l!=Ge?.6*l:n}for(f=0,D=0;D<A;D++)(L||t.I[D]!=16)&&(t.H[D]&d8)==0&&(f+=dT(P[t.F[1][D]],P[t.F[0][D]]));return f/s}function sR(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(o=-1,L=-1,s=-1,r=c(Pt,it,6,O(t.c,e),16,1),D=0;D<O(t.c,e);D++)if(!r[D]&&(P=_(t.c,e,D),P!=A&&(i=H0(t.c,P),L<i))){for(f=!1,Q=D+1;Q<O(t.c,e);Q++)if(n=_(t.c,e,Q),n!=A&&H0(t.c,n)==i){if(r[Q]=!0,f)return P;f=!0}f?s=P:(L=i,o=P)}return o==-1&&(e0(t.c,e)==1&&X(t.c,e)<10||mn(t.c,e)||xP(t.c,e,!0))?s:o}function d_(t){var e,A,n,P,r,i,f,D,Q,o,L;for(n=W8(t.f.g),D=2,A=0;A<t.f.g;A++)D=w.Math.max(D,Ct(t.f,A));for(r=(62+2*n+D*(n+1))/63|0,P=c(K4,H2,101,t.f.r,0,1),e=0;e<t.f.r;e++)P[e]=new xU(r),AA(P[e],e);for(L=c(F,m,6,t.f.r,15,1),i=0;i<t.f.i;i++)f=ze(t.f,i),(f==1||f==2)&&(se(P[K(t.f,0,i)],f),se(P[K(t.f,1,i)],f));Q=hm(P,L);do o=Q,QW(t,P,L,n,D),Q=hm(P,L);while(o!=Q);return L}function yR(t,e,A,n){HQ();var P,r,i,f,D,Q;if(i=0,Q=0,P=0,n==null&&(n=c(Oe,uA,6,3,15,1)),D=w.Math.min(t,w.Math.min(e,A)),f=w.Math.max(t,w.Math.max(e,A)),P=f,r=f-D,r==0)return P=D,i=0,n[0]=i,n[1]=Q,n[2]=P,n;if(f!=0)Q=r/f;else return Q=0,i=0,n[0]=i,n[1]=Q,n[2]=P,n;return t==f?i=(e-A)/r:e==f?i=2+(A-t)/r:i=4+(t-e)/r,i*=60,i<0&&(i+=360),n[0]=i/360,n[1]=Q,n[2]=P,n}function B_(t){var e,A,n,P,r,i,f,D,Q,o;for(Q=kn(t.d),o=Q.j.a.length,n=0;n<o;n++){for(e=G(Q.k,n),i=0;i<e.length;i++)Kr(t.f,U1(e[i]))||Jr(t.f,U1(e[i]),new n1),f=D8(t.f,U1(e[i])),f.add(e);if(Q.e[n])for(r=0;r<e.length;r++)Kr(t.e,U1(e[r]))||Jr(t.e,U1(e[r]),new n1),f=D8(t.e,U1(e[r])),f.add(e)}for(D=Bt(t.d.i/32+.96875),A=0;A<t.d.i;A++)P=new T3(D),DR(t,A,P),xA(t.g,P)}function v_(t,e,A,n,P,r){var i,f,D,Q,o,L,s;for(Q=wk(e)-wk(t),i=Cb(e,Q),D=G0(0,0,0);Q>=0&&(f=YJ(t,i),!(f&&(Q<22?D.l|=1<<Q:Q<44?D.m|=1<<Q-22:D.h|=1<<Q-44,t.l==0&&t.m==0&&t.h==0)));)o=i.m,L=i.h,s=i.l,i.h=L>>>1,i.m=o>>>1|(L&1)<<21,i.l=s>>>1|(o&1)<<21,--Q;return A&&rs(D),r&&(n?(zn=Ai(t),P&&(zn=Lk(zn,(ti(),dc)))):zn=G0(t.l,t.m,t.h)),D}function L1(t,e,A){var n,P,r,i,f;if(t==null)throw At(new _P(y9));for(r=t.length,i=r>0&&(zt(0,t.length),t.charCodeAt(0)==45||(zt(0,t.length),t.charCodeAt(0)==43))?1:0,n=i;n<r;n++)if(AJ((zt(n,t.length),t.charCodeAt(n)))==-1)throw At(new _P(b2+t+'\"'));if(f=parseInt(t,10),P=f<e,isNaN(f))throw At(new _P(b2+t+'\"'));if(P||f>A)throw At(new _P(b2+t+'\"'));return f}function lR(t,e){var A,n,P,r,i,f,D,Q;for(t.q=new gU(t,e|t.f),n=c(F,m,6,t.g,15,1),P=0;P<t.i;P++)TP(t.q,P)!=0&&(t.G[P]|=64,++n[t.F[0][P]],++n[t.F[1][P]]);for(A=0;A<t.g;A++)n[A]==2?t.v[A]|=Qe:n[A]==3?t.v[A]|=O1:n[A]>3&&(t.v[A]|=gn);for(Q=0;Q<t.q.j.a.length;Q++)for(i=jh(t.q,Q),D=Qg(t.q,Q),f=i.length,r=0;r<f;r++)t.v[i[r]]|=8,t.G[D[r]]|=128,t.I[D[r]]==386&&(t.I[D[r]]=2)}function F_(t,e){var A,n,P,r;if(e>0&&(e=Us(t,e,9)),e>0&&(e=Us(t,e,17)),e>0&&(e=Us(t,e,35)),e>0&&(e=Us(t,e,53)),e>0){for(A=0;A<t.g;A++)if(t.t[A]>0){for(P=!1,r=0;r<t.k[A];r++)if(n=t.j[A][r],t.t[n]==0&&rA(t,n)&&xt(t,n)>0){if(t.t[n]=-1,t.U=0,--e,e==0)return 0;P=!0;break}if(P)continue}}return e>0&&(e=Js(t,e,8,16)),e>0&&(e=Js(t,e,8,15)),e>0&&(e=Js(t,e,8,6)),e>0&&(e=Js(t,e,7,16)),e}function hR(t,e){var A,n,P,r,i,f,D,Q;for(P=0;P<t.g.i;P++)if((fe(t.g,P)&F8)!=0){if(r=ze(t.g,P),r==0)continue;if(A=K(t.g,0,P),n=K(t.g,1,P),t.f==null||e==-1&&t.f[A]==-1&&t.f[n]==-1||e!=-1&&(t.f[A]==e||t.f[n]==e)){if(i=t.G[A],f=t.G[n],D=o1(t.H,i,f),Q=ze(t.H,D),Q==0&&(A8(t.H,D)&&(Q=CW(t,D)),Q==0)||r==3||Q==3)continue;if(AW(t,P)==(r==Q))return!1}}return!0}function k_(t,e,A){var n,P,r,i,f,D;f=E1(vi[A]),i=Y1(E1(t.e),A),D=E1(t.f),r=Sn(D,f),P=n9(D,f),z(P,0)!=0&&(n=Si(Wt(z(P,0)<0?E0(P):P,1),f)?-1:I1(Wt(z(P,0)<0?E0(P):P,1),f)?1:0,r=at(r,zQ(Ot(r)&1,(z(P,0)==0?0:z(P,0)<0?-1:1)*(5+n),e.b)),w.Math.log10($9(z(r,0)<0?E0(r):r))>=e.a&&(r=Sn(r,10),i=Y1(i,1))),t.e=Am($9(i)),t.d=e.a,t.f=$9(r),t.a=BT(r),t.c=null}function TR(t,e,A,n){var P,r,i,f,D,Q,o;for(Q=0,r=V(n,g1),f=A-1;f>=0;f--)o=J(Wt(Q,32),V(e[f],g1)),z(o,0)>=0?(D=Sn(o,r),Q=n9(o,r)):(P=j0(o,1),i=n>>>1,D=Sn(P,i),Q=n9(P,i),Q=at(Wt(Q,1),V(o,1)),(n&1)!=0&&(z(D,Q)<=0?Q=Y1(Q,D):qg(Y1(D,Q),r)?(Q=at(Q,Y1(r,D)),D=Y1(D,1)):(Q=at(Q,Y1(Wt(r,1),D)),D=Y1(D,2)))),t[f]=Ot(V(D,g1));return Ot(Q)}function m_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(L=Ge,s=W6,l=Ge,h=W6,P=0,t.k!=null)for(f=0;f<t.k.length;f++)for(A=0;A<t.k[f].r;A++)o=W1(t.e[f].R,S7(t.k[f],A).a),y=Z1(t.e[f].R,S7(t.k[f],A).b),L=w.Math.min(L,o),s=w.Math.max(s,o),l=w.Math.min(l,y),h=w.Math.max(h,y),++P;return P<=1?t.d:(r=s-L,i=h-l,D=(r+i)/2,Q=3*P,e=r*i,n=D/(1-Q),w.Math.sqrt(n*n-e/(1-Q))-n)}function b_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(Q=t.i.N,o=0,r=0;r<A;r++)Q>e[r]&&(Q=e[r],o=r);for(h=c(F,m,6,A,15,1),D=o>0?o-1:A-1,L=o<A-1?o+1:0,i=e[D]<e[L],P=0;P<A;P++)h[P]=e[o],i?--o<0&&(o=A-1):++o==A&&(o=0);for(l=new Zt(t.j);l.a<l.c.a.length;)if(y=_t(l),y.length==A){for(n=!0,f=0;f<A;f++)if(y[f]!=h[f]){n=!1;break}if(n)return}Ft(t.j,h),s=mb(t,h),Ft(t.k,s),ij(t,h,s)}function j_(t,e,A,n,P,r,i){return!(X(t.j,A)==8&&e0(t.j,A)==0&&uQ(t.j,e)&&uQ(t.d,n)&&r!=O1||X(t.j,A)==8&&O(t.j,A)==2&&uQ(t.j,Mq(t.j,e,A))&&r<768||X(t.j,e)==8&&(uQ(t.j,A)||uQ(t.d,P))&&r<512||!i&&(X(t.j,A)!=6||!_q(t.j,e))||X(t.j,A)==8&&X(t.j,e)!=6&&r!=O1||X(t.j,e)==5&&X(t.j,A)==6&&r<768)}function t6(t,e,A){var n,P;return P=Jp(t,e,(A&16)==0),P==null?null:(n=new bn(P[0]),A!=0&&(n.a+=\"#\",(A&1)!=0&&P.length>1&&P[1]!=null&&(n.a+=\"\"+P[1])),A&=-2,A!=0&&(n.a+=\"#\",(A&2)!=0&&P.length>2&&P[2]!=null&&(n.a+=\"\"+P[2])),A&=-3,A!=0&&(n.a+=\"#\",(A&4)!=0&&P.length>3&&P[3]!=null&&(n.a+=\"\"+P[3])),A&=-5,A!=0&&(n.a+=\"#\",(A&8)!=0&&P.length>4&&P[4]!=null&&(n.a+=\"\"+P[4])),n.a)}function cR(t,e,A){var n,P,r,i,f;for(r=0;r<e;r++){for(n=0,f=r+1;f<e;f++)n=at(at(yn(V(t[r],g1),V(t[f],g1)),V(A[r+f],g1)),V(Ot(n),g1)),A[r+f]=Ot(n),n=j0(n,32);A[r+e]=Ot(n)}for(XF(A,A,e<<1),n=0,P=0,i=0;P<e;++P,i++)n=at(at(yn(V(t[P],g1),V(t[P],g1)),V(A[i],g1)),V(Ot(n),g1)),A[i]=Ot(n),n=j0(n,32),++i,n=at(n,V(A[i],g1)),A[i]=Ot(n),n=j0(n,32);return A}function wR(t){var e,A,n,P,r,i,f,D,Q,o;i=u6(t),D=t.r;do--D;while(D>=0&&i[D]);for(e=0;e<D;e++)if(i[e]){r6(t,e,D),o=i[e],i[e]=i[D],i[D]=o;do--D;while(i[D])}if(t.g=D+1,t.r==t.g){t.i=t.s;return}for(f=c(Pt,it,6,t.s,16,1),r=0;r<t.s;r++)A=t.F[0][r],n=t.F[1][r],(i[A]||i[n])&&(f[r]=!0);Q=t.s;do--Q;while(Q>=0&&f[Q]);for(P=0;P<Q;P++)if(f[P]){g5(t,P,Q),f[P]=!1;do--Q;while(f[Q])}t.i=Q+1}function R_(t,e,A){var n,P,r,i,f,D,Q;for(D=c(F,m,6,t.g,15,1),i=c(F,m,6,t.g,15,1),Q=c(Pt,it,6,t.i.g,16,1),n=K(t.i,0,e),P=K(t.i,1,e),D[0]=n,D[1]=P,i[1]=-1,Q[P]=!0,f=1;f>=1;){if(++i[f],i[f]==O(t.i,D[f])){Q[D[f]]=!1,--f;continue}if(r=_(t.i,D[f],i[f]),!(Q[r]||A[r])){if(r==n&&f>1){if(b_(t,D,f+1),t.j.a.length>=Qe)return;continue}f+1<t.g&&(++f,D[f]=r,Q[r]=!0,i[f]=-1)}}}function Lr(){Lr=v1;var t,e;for(m9=c(Fi,_e,23,32,0,1),tD=c(Fi,_e,23,32,0,1),pc=B(d(F,1),m,6,15,[1,10,100,1e3,fP,xy,1e6,1e7,1e8,Jf]),t=1,e=0;e<=18;e++)m9[e]=(Ce(),z(t,0)>=0?be(t):mP(be(E0(t)))),tD[e]=ku(Wt(t,e),0)?be(Wt(t,e)):mP(be(E0(Wt(t,e)))),t=yn(t,5);for(;e<tD.length;e++)m9[e]=RP(m9[e-1],m9[1]),tD[e]=RP(tD[e-1],(Ce(),Ko))}function p_(t,e){var A,n,P,r,i,f,D,Q,o,L;if(o=Nd(t.f)!=1?1:hj(e,t.p[1],t.k[0]),L=Nd(t.g)!=1?1:hj(e,t.p[2],t.k[1]),!(o==1&&L==1)){for(i=360/w.Math.max(o,L)|0,A=0,n=0,r=0;r<t.d.length&&t.d[r]<i;r++)n+=t.c[r],++A;if(A!=0){for(Q=c(Kt,t1,6,A,15,1),f=c(Kt,t1,6,A,15,1),D=c(Kt,ie,16,A,0,2),P=0;P<A;P++)Q[P]=t.d[P],f[P]=(t.c[P]*100/n|0)<<16>>16,D[P]=t.e[P];t.d=Q,t.c=f,t.e=D}}}function e6(t,e){var A,n,P,r,i,f,D,Q,o,L;if(f=c(F,m,6,t.r,15,1),i=Ur(t,f,!1,e),i<=1)return null;for(D=c(F,m,6,i,15,1),n=0;n<t.g;n++)++D[f[n]];for(o=0,L=D[0],Q=1;Q<i;Q++)L<D[Q]&&(L=D[Q],o=Q);for(A=0;A<t.r;A++)f[A]!=o&&(t.D[A]=-1);for(r=0;r<t.s;r++)(!e&&t.I[r]==16||f[t.F[0][r]]!=o)&&(t.I[r]=512);P=Rf(t),t.U=0;try{Kp(t,!0,!0)}catch(s){if(s=_1(s),!Yt(s,19))throw At(s)}return P}function M_(t){for(var e,A,n,P,r,i,f;;){for(r=null,e=0;e<t.f.r;e++){for(f=0,P=0;P<Ct(t.f,e);P++)t.c[Nt(t.f,e,P)]||++f;f==1&&(i=u$(t,e),(!r||i.a.length>r.a.length)&&(r=i))}if(!r)break;for(A=new VP(t.f,r.a.length,!1),n=0;n<r.a.length;n++)t.b[r.a[n]]=!0,n<r.a.length-1&&(t.c[r.b[n]]=!0),A.e[n]=r.a[n],A.a[n]=w.Math.cos(C2)*n,A.b[n]=(n&1)==1?0:.5,A.k[n]=128+r.a.length;CP(t.d,A)}}function C_(t,e,A,n,P){var r,i,f,D;if(i=t.e[e],t.p[e]!=0||e<t.g&&f0(t.q,e)||t.k[e]<3||i>4)return!1;for(D=c(Pt,it,6,4,16,1),f=0;f<i;f++){if(r=3.9269908169872414-n[f],w.Math.abs($6-r%HA)>.0872664675116539||(P[f]=3&Bt(r/HA),D[P[f]]))return!1;if(D[P[f]]=!0,(P[f]&1)==0){if(t.I[t.n[e][A[f]]]!=1)return!1}else if(!_9(t,t.n[e][A[f]],e))return!1}return D[0]&&D[2]}function H_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(s=c(F,m,6,t.g,15,1),y=$X(t,e,s),i=!1,r=!1,L=new n1,P=0;P<y;P++)(t.v[s[P]]&4)!=0&&(Q=A6(t,s[P],n),(Q==1||Q==2)&&(f=A.v[n[s[P]]]&3,(f==1||f==2)&&(Q==f?i=!0:r=!0)),D=c(F,m,6,2,15,1),D[0]=s[P],D[1]=Q,L.a.push(D));if(!i||!r)for(o=new Zt(L);o.a<o.c.a.length;)Q=_t(o),D=Q[1],(D==1||D==2)&&r&&(D=D==1?2:1),me(A,n[Q[0]],D,!0)}function zQ(t,e,A){var n;switch(n=0,A.b){case 7:if(e!=0)throw At(new I8(\"Rounding necessary\"));break;case 0:n=e==0?0:e<0?-1:1;break;case 2:n=w.Math.max(e==0?0:e<0?-1:1,0);break;case 3:n=w.Math.min(e==0?0:e<0?-1:1,0);break;case 4:w.Math.abs(e)>=5&&(n=e==0?0:e<0?-1:1);break;case 5:w.Math.abs(e)>5&&(n=e==0?0:e<0?-1:1);break;case 6:w.Math.abs(e)+t>5&&(n=e==0?0:e<0?-1:1)}return n}function V_(t,e){var A,n;if(A=dT(Z0(e,t.f[1]),Z0(e,t.f[0])),t.a.length==2){if(A<1.02*t.a[0])return gK(t,e.o,A);if(A>t.a[1])return _7((A-t.a[1])/A)}else if(n=t.c==10?Ux(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):t.c==5?Bx(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):_7(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)),w.Math.abs(n)>.009999999776482582)return n;return 0}function Ys(t,e){var A,n,P,r,i;if(e<t.g&&f0(t.q,e)||t.p[e]!=0||gt(V(t.C[e],d9),0)||(n=t.v[e]&gn,(n==0?0:n==Qe?2:n==O1?3:4)<3)||(i=t.q&&e<t.g?UA(t.q,e):0,i>7))return!1;for(r=0;r<t.q.j.a.length&&!(ah(t.q,r)==i&&wA(t.q,r,e));)++r;if(r>=Qe&&r==t.q.j.a.length)return!1;for(P=0;P<t.k[e];P++)if(A=t.n[e][P],!Pf(t.q,r,A)&&Ttt(t,e,r,t.j[e][P],A))return!0;return!1}function E_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;D=(e.c-e.d)/9,y=(e.b-e.a)/9,Q=e.b+D,l=e.d+y,o=e.b-D,h=e.d-y,L=(e.a+Q)/2,T=(e.c+l)/2,s=(e.a+o)/2,g=(e.c+h)/2,i=new WD(3),f=new WD(4),Ie(i,e.a,e.c),Ie(i,L,T),Ie(i,s,g),Ie(f,s,g),Ie(f,L,T),Ie(f,Q,l),Ie(f,o,h),V9(t.L,o1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n],t.L.P!=1&&(r=y5(t,A),P==wu(t.L,A)&&(P=r))),$1(t,P),t.sb(i),$1(t,r),t.sb(f),$1(t,t.Q)}function S_(t){var e,A,n,P,r,i,f,D;ut(t.i,1),f=t.i.g;do--f;while(f>=0&&X(t.i,f)==1);for(e=0;e<f;e++)if(X(t.i,e)==1){r6(t.i,e,f);do--f;while(X(t.i,f)==1)}if(f!=t.i.g-1){for(i=c(Pt,it,6,t.i.i,16,1),r=0;r<t.i.i;r++)A=K(t.i,0,r),n=K(t.i,1,r),(X(t.i,A)==1||X(t.i,n)==1)&&(i[r]=!0);D=t.i.i;do--D;while(D>=0&&i[D]);for(P=0;P<D;P++)if(i[P]){g5(t.i,P,D),i[P]=!1;do--D;while(i[D])}}}function I_(t,e,A){var n,P,r,i,f,D;for(f=new C0,n=rX(t,e),f.a+=\" rb:\",D=f.a.length,r=0;r<n.length;r++)n[r]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=r);for(f.a+=\" ti:\",D=f.a.length,i=0;i<n.length;i++)n[i]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=n[i]);for(f.a+=\" (\",D=f.a.length,P=0;P<n.length;P++)n[P]!=-1&&(f.a.length!=D&&(f.a+=\",\"),Mh(f,A.i[P][n[P]]));return q(f,(A9(),\") \"+Q9(e.a,3))),f.a}function Xs(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;A==0?(L=e.a,y=e.c,s=e.b,l=e.d):(L=e.b,y=e.d,s=e.a,l=e.c),o=G(t.$,n),D=s>L?o.c+o.b:o.c,Q=l>y?o.d+o.a:o.d,P=s-L,r=l-y,w.Math.abs(P)>w.Math.abs(r)?y==l?(i=D,f=y):(i=L+P*(Q-y)/r,s>L==D>i?f=Q:(i=D,f=y+r*(D-L)/P)):L==s?(i=L,f=Q):(f=y+r*(D-L)/P,l>y==Q>f?i=D:(i=L+P*(Q-y)/r,f=Q)),A==0?(e.a=i,e.c=f):(e.b=i,e.d=f)}function A6(t,e,A){var n,P,r,i,f,D,Q,o,L;if(L=t.v[e]&3,L==1||L==2){if(f=!1,t.p[e]==2&&t.k[e]==2&&t.o[e][0]==2&&t.o[e][1]==2&&t.D[e]<=7)for(i=0;i<t.k[e];i++){for(n=t.j[e][i],o=0,Q=c(F,m,6,3,15,1),D=0;D<t.k[n];D++)Q[o]=t.j[n][D],Q[o]!=e&&++o;o==2&&Q[0]<Q[1]^A[Q[0]]<A[Q[1]]&&(f=!f)}else for(i=1;i<t.k[e];i++)for(D=0;D<i;D++)P=t.j[e][i],r=t.j[e][D],P<r^A[P]<A[r]&&(f=!f);f&&(L=L==1?2:1)}return L}function x_(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(t.u=c(Pt,c0,12,t.k.r,0,2),A=1;A<t.k.r;A++)t.u[A]=c(Pt,it,6,A,16,1);for(o=t.q,L=0,s=o.length;L<s;++L)for(Q=o[L],i=1;i<Q.d.length;i++)for(D=0;D<i;D++)JB(t,Q.e[Q.d[i]],Q.e[Q.d[D]]);for(e=0;e<t.k.g;e++)for(r=1;r<Ct(t.k,e);r++)for(f=0;f<r;f++)JB(t,_(t.k,e,r),_(t.k,e,f));if(t.e!=null)for(n=1;n<t.k.r;n++)for(P=0;P<n;P++)t.e[n]!=t.e[P]&&(t.u[n][P]=!0)}function N_(t){var e,A,n,P,r,i,f,D;if(!t.k||t.k.r==0)return\"\";for(ut(t.k,15),t.d=new qA(t.k,129),P=t.d.T,t.o=c(Pt,it,6,P+1,16,1),t.n=c(Pt,it,6,P+1,16,1),t.i=j1(F,[u0,m],[7,6],15,[2,32],2),e=0;e<t.k.g;e++)D=De(t.k,e)-1,D!=-1&&++t.i[D][OA(t.k,e)];for(g_(t),Ha(t),att(t),n=new C0,A=new C0,r=!0,f=new Zt(t.g);f.a<f.c.a.length;)i=_t(f),i.g==-1&&(r?r=!1:n.a+=\".\"),xtt(t,i,n,A);return n.a}function gR(t,e){var A,n,P,r;for(Ri(t.V),t.L=c(gr,B9,26,e.g.a.length+e.f.a.length,0,1),t.Y=e.g.a.length,P=0;P<e.g.a.length+e.f.a.length;P++)t.L[P]=P<e.g.a.length?G(e.g,P):G(e.f,P-e.g.a.length),CD(t.V,t.L[P]);for(ve(t.V,e.c||bQ(e)),K1(t),t.M=c(F,m,6,t.V.r,15,1),A=0,n=0;n<t.L.length;n++)for(r=0;r<t.L[n].r;r++)t.M[A++]=n;t.I=new QU,t.U=5,t.eb=w.Math.max(t.eb,5),P1(t.k),N1(t,new x1(t,1,!1))}function G_(t){var e,A,n,P,r,i;if(t.L.L){for($1(t,320),e=0;e<t.L.g;e++)P=h0(t.L,e),z(P,0)!=0&&((t.G&8)!=0||gt(V(P,{l:je,m:896,h:1048448}),0))&&t.ub(W1(t.R,mt(t.L,e))-t.Z/2,Z1(t.R,Rt(t.L,e))-t.Z/2,t.Z);for(r=0;r<t.L.i;r++)i=fe(t.L,r),i!=0&&((t.G&8)!=0||(i&-8388481)!=0)&&(A=K(t.L,0,r),n=K(t.L,1,r),t.ub((W1(t.R,mt(t.L,A))+W1(t.R,mt(t.L,n))-t.Z)/2,(Z1(t.R,Rt(t.L,A))+Z1(t.R,Rt(t.L,n))-t.Z)/2,t.Z))}}function dR(t){t.r&&($5(t,!1),null.zd(),null.zd(),(t.U&4)!=0&&(null.zd(),null.zd()),(t.U&4)!=0&&null.zd()),(t.U&4)!=0&&t.w==19&&(null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd()),t.w==18&&(null.zd(),null.zd(),null.zd()),t.g&&t.t!=-1&&(wu(t.V,t.t),null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd(),null.zd()),null.zd()}function KQ(t,e,A,n,P,r){var i,f,D,Q,o;for(ut(t,1),P&&(zL(P),P.d=null,P.L=!1),D=c(F,m,6,t.r,15,1),n==null?n=c(Pt,it,6,t.r,16,1):xu(n,n.length),D[0]=e,D[1]=A,n[e]=!0,n[A]=!0,f=1,Q=1;f<=Q;){for(o=0;o<t.e[D[f]];o++){if(i=t.j[D[f]][o],i==e&&f!=1)return-1;n[i]||(n[i]=!0,D[++Q]=i)}++f}return P&&(r==null&&(r=c(F,m,6,n.length,15,1)),L9(t,P,n,!1,r),mf(P,r[e],0,0,-1,0)),n[e]=!1,Q}function O_(t){var e,A,n,P,r,i,f,D;for(A=0;A<t.j.i;A++)if(t.e[A])for(P=0;P<2;P++){for(f=K(t.j,P,A),e=!1,i=0;i<O(t.j,f);i++)if(A!=Nt(t.j,f,i)&&t.e[Nt(t.j,f,i)]){e=!0;break}if(!e){for(D=A,n=K(t.j,1-P,A);D!=-1;)for(t.d[f]=!1,t.e[D]=!1,--t.c,g0(t.j,D,8),D=-1,f=n,r=0;r<O(t.j,f);r++)if(t.e[Nt(t.j,f,r)])if(D==-1)D=Nt(t.j,f,r),n=_(t.j,f,r);else{f=-1,D=-1;break}f!=-1&&(t.d[n]=!1);break}}}function q_(t,e,A){var n,P,r,i,f,D,Q,o;for(r=t.g[e],P=1,D=0;D<r.length;D++)if(n=r[D],t.f[n]&&t.k[n]==2){P=2;break}for(i=c(F,u0,7,32,0,2),Q=0;Q<r.length;Q++)n=r[Q],t.f[n]&&t.k[n]==P&&(i[t.j[n]]=uf(i[t.j[n]],(A[n]<<16)+n));for(o=0;o<32;o++)i[o]!=null&&i[o].sort(pe(Q0.prototype.ld,Q0,[]));if(ju(i,new qe),m5(i[0],i[1])==0)return!1;for(f=0;f<i[0].length;f++)n=i[0][f]&d1,t.k[n]=0,t.j[n]=-1;return!0}function z_(t){var e,A,n,P,r,i,f,D,Q,o,L;for(n=c(F,m,6,t.O,15,1),e=0;e<t.R.g;e++){for(o=O(t.R,e)+qi(t.R,e),Q=0,r=0;r<Le(t.R,e);r++)if(r<O(t.R,e)||r>=Ct(t.R,e)){for(L=2*t.f[_(t.R,e,r)],A=Nt(t.R,e,r),dt(t.R,A)==2&&(eA(t.R,A)||++L),f=0;f<Q&&!(L<n[f]);f++);for(D=Q;D>f;D--)n[D]=n[D-1];n[f]=L,++Q}for(AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),i=o;i<t.O;i++)a1(t.e[e],t.c+1,0);for(P=0;P<o;P++)a1(t.e[e],t.c+1,n[P])}}function K_(t,e){var A,n,P,r,i,f,D,Q;if(e.startsWith(\"M  SUB\")&&(r=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),r>0)){for(A=10,Q=14,i=1;i<=r;++i,A+=8,Q+=8)if(n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,f=L1(k1((Mt(Q,Q+3,e.length),e.substr(Q,Q+3-Q))),f1,Et),f==-2)w1(t.j,n,O1,!0);else if(f>0){for(D=0,P=0;P<t.j.s;P++)(K(t.j,0,P)==n||K(t.j,1,P)==n)&&++D;f>D&&w1(t.j,n,S0,!0)}}}function BR(t,e){var A,n,P,r,i,f;return P=tk(t),f=tk(e),P==f?t.e==e.e&&t.a<54&&e.a<54?t.f<e.f?-1:t.f>e.f?1:0:(n=t.e-e.e,A=(t.d>0?t.d:w.Math.floor((t.a-1)*mo)+1)-(e.d>0?e.d:w.Math.floor((e.a-1)*mo)+1),A>n+1?P:A<n-1?-P:(r=(!t.c&&(t.c=jP(E1(t.f))),t.c),i=(!e.c&&(e.c=jP(E1(e.f))),e.c),n<0?r=RP(r,Qi(-n)):n>0&&(i=RP(i,Qi(n))),ss(r,i))):P<f?-1:1}function J_(t){var e,A,n,P,r,i,f,D,Q,o,L;for(t.b=c(F,m,6,t.i.g,15,1),f=c(F,m,6,t.i.g,15,1),n=c(Pt,it,6,t.i.i,16,1),L=0,A=0;A<t.i.i;A++)if(!n[A]&&t.g[A])for(++L,t.b[K(t.i,0,A)]=L,t.b[K(t.i,1,A)]=L,n[A]=!0,Q=0;Q<2;Q++)for(e=K(t.i,Q,A),t.b[e]=L,i=0,D=0,f[0]=e;i<=D;){for(o=0;o<O(t.i,f[i]);o++)r=Nt(t.i,f[i],o),!n[r]&&t.g[r]&&(n[r]=!0,P=_(t.i,f[i],o),t.b[P]==0&&(t.b[P]=L,f[++D]=P));++i}t.j=L}function Y_(t,e,A,n,P){var r,i;if(r=at(V(e[0],g1),V(n[0],g1)),t[0]=Ot(r),r=O0(r,32),A>=P){for(i=1;i<P;i++)r=at(r,at(V(e[i],g1),V(n[i],g1))),t[i]=Ot(r),r=O0(r,32);for(;i<A;i++)r=at(r,V(e[i],g1)),t[i]=Ot(r),r=O0(r,32)}else{for(i=1;i<A;i++)r=at(r,at(V(e[i],g1),V(n[i],g1))),t[i]=Ot(r),r=O0(r,32);for(;i<P;i++)r=at(r,V(n[i],g1)),t[i]=Ot(r),r=O0(r,32)}z(r,0)!=0&&(t[i]=Ot(r))}function n6(t,e,A,n,P){s8();var r,i,f,D,Q,o,L,s,y,l,h;for(D=0;D<e.length;D++)X8(A,t.k[e[D]]);for(ZU(A,1/e.length),Q=0;Q<e.length;Q++)P[Q][0]=t.k[e[Q]].a-A.a,P[Q][1]=t.k[e[Q]].b-A.b,P[Q][2]=t.k[e[Q]].c-A.c;for(l=j1(Ut,[c0,Tt],[15,6],15,[3,3],2),o=0;o<e.length;o++)for(L=0;L<3;L++)for(s=0;s<3;s++)l[L][s]+=P[o][L]*P[o][s];for(h=new sy(l),r=h.e,y=0,f=1;f<3;f++)r[f]<r[y]&&(y=f);i=h.a,n.a=i[0][y],n.b=i[1][y],n.c=i[2][y]}function X_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;if(o=c(Pt,it,6,e.r,16,1),s=KQ(e,t.k[0],t.p[1],o,null,null),P=0,t.k[0]!=t.p[2]&&(P=C5(e,t.k[0],t.p[2])),Q=!1,s>n-P-s&&(s=n-P-s,Q=!0),Q&&P!=0){for(l=t.k[0],i=t.p[1];e.p[l]==2&&e.k[l]==2&&e.D[l]<10;)for(o[l]=!0,L=0;L<2;L++)if(f=e.j[l][L],f!=i){i=l,l=f;break}}for(y=0,D=A[t.p[1]],t.o=c(F,m,6,s,15,1),r=0;r<e.r;r++)A[r]==D&&o[r]^Q&&(t.o[y++]=r);t.n=t.p[Q?2:1]}function vR(t,e){Xg();var A,n,P,r;n=new Ks(t);try{for(r=new Th,QA(r,\"$RXN\"+Zf),Ni(r.a,e??\"\"),QA(r,Zf+(\"\"+Zf)),QA(r,Yy+t6(t,!0,27)),QA(r,Zf),QA(r,\"  \"+n.g.a.length+\"  \"+n.f.a.length+Zf),P=MZ(n),A=0;A<n.g.a.length+n.f.a.length;A++)QA(r,\"$MOL\"+Zf),nx(new j6(A<n.g.a.length?G(n.g,A):G(n.f,A-n.g.a.length),P,null),r);this.a=r.a}catch(i){if(i=_1(i),Yt(i,19))q1();else throw At(i)}}function Z_(t){var e,A,n,P,r,i,f,D,Q,o;for(r=dP(t,t.r,t.s,Bn),i=r*r/16,n=1;n<t.r;n++)for(P=0;P<n;P++)if(D=t.K[P].a-t.K[n].a,Q=t.K[P].b-t.K[n].b,o=t.K[P].c-t.K[n].c,D*D+Q*Q+o*o<i)throw At(new H1(\"The distance between two atoms is too close.\"));for(ut(t,1),e=0,A=0;A<t.g;A++){if(G1(t,A)>(f=En(t,A),f+en(t,A,f,t.D[A])))throw At(new H1(\"atom valence exceeded\"));e+=t.t[A]}if(e!=0)throw At(new H1(\"unbalanced atom charge\"))}function JQ(t,e){var A,n,P,r,i,f,D,Q,o;return A=t.K[e[0]],n=t.K[e[1]],P=t.K[e[2]],r=t.K[e[3]],D=new Ke(n.a-A.a,n.b-A.b,n.c-A.c),Q=new Ke(P.a-n.a,P.b-n.b,P.c-n.c),o=new Ke(r.a-P.a,r.b-P.b,r.c-P.c),i=new Ke(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new Ke(Q.b*o.c-Q.c*o.b,-(Q.a*o.c-Q.c*o.a),Q.a*o.b-Q.b*o.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function YQ(t,e){var A,n,P,r,i,f,D,Q,o;return A=Z0(t,e[0]),n=Z0(t,e[1]),P=Z0(t,e[2]),r=Z0(t,e[3]),D=new Ke(n.a-A.a,n.b-A.b,n.c-A.c),Q=new Ke(P.a-n.a,P.b-n.b,P.c-n.c),o=new Ke(r.a-P.a,r.b-P.b,r.c-P.c),i=new Ke(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new Ke(Q.b*o.c-Q.c*o.b,-(Q.a*o.c-Q.c*o.a),Q.a*o.b-Q.b*o.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function FR(t,e){var A,n,P,r,i,f;for(P=null,r=t.a.a.length+e,f=e*12,n=new n1,i=0;i<f&&t.a.a.length<r&&!(gt(t.n,0)&&(q1(),I1(E1(Date.now()),t.n)));i++)!P&&(P=new Hu(t.d)),aj(t,P)?jR(t,P,t.a,0)&&(P=null):jR(t,P,n,1)&&(P=null);t.a.a.length==0&&n.a.length!=0&&(A=Qf(n,c(CS,LE,97,0,0,1)),ju(A,new Ww),MP(t.a,new JD(new lU(A),0,w.Math.min(e,A.length))),t.e=!0),(t.a.a.length<r||t.a.a.length==t.b)&&(t.e=!0)}function kf(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(s=-1,l=dP(t,t.r,t.s,Bn),y=Ge,n=0;n<t.s;n++)h=t.K[t.F[0][n]].a,g=t.K[t.F[0][n]].b,T=t.K[t.F[1][n]].a,k=t.K[t.F[1][n]].b,o=T-h,L=k-g,P=w.Math.sqrt(o*o+L*L),r=(h+T)/2,i=(g+k)/2,o=e-r,L=A-i,!(w.Math.sqrt(o*o+L*L)>P/2)&&(T==h?Q=w.Math.abs(h-e):(f=(k-g)/(h-T),D=-f*h-g,Q=w.Math.abs((f*e+A+D)/w.Math.sqrt(f*f+1))),Q<l&&Q<y&&(y=Q,s=n));return s}function W_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(P=K(t.i,0,e),r=K(t.i,1,e),D=c(F,m,6,t.i.g,15,1),Q=c(F,m,6,t.i.g,15,1),o=c(F,m,6,t.i.g,15,1),D[0]=P,D[1]=r,Q[P]=1,Q[r]=2,o[P]=-1,o[r]=P,f=1,L=1;f<=L;){for(s=0;s<O(t.i,D[f]);s++){if(i=_(t.i,D[f],s),f>1&&i==P){for(l=c(F,m,6,Q[D[f]],15,1),n=D[f],y=0;y<l.length;y++)l[y]=n,n=o[n];return l}Q[i]==0&&!A[i]&&(D[++L]=i,Q[i]=Q[D[f]]+1,o[i]=D[f])}++f}return null}function __(t,e){var A,n,P,r,i,f,D,Q,o,L;for(o=Et,D=-1,L=-1,Q=-1,n=0;n<t.j.i.g;n++)if(g3(t.j,n)&&t.j.k[n]!=0)for(f=0;f<e.length;f++)P=e[f]<t.a?e[f]:e[f]<t.b?e[f]-t.a:-1,r=e[f]<t.a?1:e[f]<t.b?2:0,t.j.k[n]==r&&t.j.j[n]==P&&o>t.j.a[n]+(r==1?o0:0)&&(o=t.j.a[n]+(r==1?o0:0),D=P,L=r,Q=e[f]);for(A=0;A<t.j.i.g;A++)g3(t.j,A)&&t.j.k[A]==L&&t.j.j[A]==D&&(t.j.k[A]=0,t.j.j[A]=-1);for(i=0;i<t.j.g.length;i++)t.e[Q][i]=!1}function $_(t){var e,A,n,P,r;if(A=t.indexOf(p0(38)),A==-1)return t;for(P=0,r=new gD;A!=-1;)Ni(r,(Mt(P,A,t.length),t.substr(P,A-P))),zt(A+1,t.length),t.charCodeAt(A+1)==38?(r.a+=\"&\",P=A+2):(e=(zt(A+1,t.length),t.charCodeAt(A+1)),e=e-(e<65?48:e<97?65:97),n=(zt(A+2,t.length),t.charCodeAt(A+2)),n=n-(n<65?48:n<97?65:97),EB(r,16*e+n&d1),P=A+3),A=t.indexOf(p0(38),P);return Ni(r,(zt(P,t.length+1),t.substr(P))),r.a}function a_(t){var e,A,n,P,r,i,f,D,Q,o;e=t.a,A=t.b,n=t.c,n=d0(n,A),n=Y1(n,(r=d0(Wt(A,14),j0(A,18)),r)),e=d0(e,n),e=Y1(e,(i=d0(Wt(n,11),j0(n,21)),i)),A=d0(A,e),A=Y1(A,(f=d0(Wt(e,25),j0(e,7)),f)),n=d0(n,A),n=Y1(n,(D=d0(Wt(A,16),j0(A,16)),D)),e=d0(e,n),e=Y1(e,(Q=d0(Wt(n,4),j0(n,28)),Q)),A=d0(A,e),A=Y1(A,(o=d0(Wt(e,14),j0(e,18)),o)),n=d0(n,A),n=Y1(n,(P=d0(Wt(A,24),j0(A,8)),P)),t.a=e,t.b=A,t.c=n}function t$(t){var e,A,n,P,r,i;for(t.L=!0,r=U2(t,!1);t.U<t.R.g&&r;){for(e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),i=t.db[e]<<7,(t.db[e]==1||t.db[e]==2)&&t.bb[e]!=0&&(i|=t.bb[e]<<5,i|=t.ab[e]),a1(t.e[e],18,Wt(i,9));for(A=0;A<t.R.i;A++)n=t.o[A]<<7,(t.o[A]==1||t.o[A]==2)&&c1(t.R,A)==1&&t.n[A]!=0&&(n|=t.n[A]<<5,n|=t.k[A]),se(t.e[K(t.R,0,A)],n),se(t.e[K(t.R,1,A)],n);if(P=tP(t),t.U==P)break;t.U=P,r=U2(t,!1)}}function qA(t,e){this.R=t,this.Q=e,ut(this.R,7),this.c=W8(this.R.g),(this.Q&O1)==0&&EW(this),this.jb=(e&64)!=0||rT(this.R),this.b=qq(this.R)==0,(this.Q&O1)==0&&(this.db=c(E,I,6,this.R.g,15,1),this.fb=c(Pt,it,6,this.R.g,16,1),this.ib=c(Pt,it,6,this.R.g,16,1),this.o=c(E,I,6,this.R.i,15,1),this.q=c(Pt,it,6,this.R.i,16,1),this.p=c(Pt,it,6,this.R.i,16,1)),this.d=!1,Q1t(this),(this.Q&O1)==0&&pa(this),n_(this)}function e$(t,e,A,n,P){var r,i,f,D,Q,o;for(D=null,r=null,o=0;o<t.g[e].length;o++)i=t.g[e][o],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?r=uf(r,(P[i]<<16)+i):t.k[i]==n&&t.j[i]==A&&(D=uf(D,(P[i]<<16)+i)));if(f=m5(D,r),f==0)return!1;if(f<0)for(Q=0;Q<t.g[e].length;Q++)i=t.g[e][Q],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?(t.k[i]=n<<24>>24,t.j[i]=A<<24>>24):t.k[i]==n&&t.j[i]==A&&(t.k[i]=0,t.j[i]=-1));return!0}function A$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(f=c(F,m,6,t.f.r,15,1),D=c(F,m,6,t.f.r,15,1),Q=c(F,m,6,t.f.r,15,1),o=c(F,m,6,t.f.r,15,1),f[0]=A,Q[A]=1,o[0]=-1,i=0,L=0;i<=L;){for(s=0;s<Ct(t.f,f[i]);s++){if(P=_(t.f,f[i],s),l=Nt(t.f,f[i],s),P==e){for(r=Q[f[i]],n=c(F,m,6,r,15,1),n[0]=l,y=1;y<r;y++)n[y]=D[i],i=o[i];return n}Q[P]==0&&(f[++L]=P,D[L]=l,Q[P]=Q[f[i]]+1,o[L]=i)}if(i==L)return null;++i}return null}function n$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;return y=t.a,l=t.d,h=t.e,l==1?(n=V(y[0],g1),P=V(e,g1),r=Sn(n,P),Q=n9(n,P),h!=A&&(r=E0(r)),h<0&&(Q=E0(Q)),B(d(Fi,1),_e,23,0,[(Ce(),z(r,0)>=0?be(r):mP(be(E0(r)))),z(Q,0)>=0?be(Q):mP(be(E0(Q)))])):(f=l,D=h==A?1:-1,i=c(F,m,6,f,15,1),o=B(d(F,1),m,6,15,[TR(i,y,l,e)]),L=new le(D,f,i),s=new le(h,1,o),Cn(L),Cn(s),B(d(Fi,1),_e,23,0,[L,s]))}function P$(t,e,A){var n,P,r,i,f;return!oi(t.R,e)||(n=K(t.R,0,e),P=K(t.R,1,e),i=new Ff(t.R,t.f,n,P),i.f&&A==1)||(f=new Ff(t.R,t.f,P,n),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&(t.V[e]=uj(t,P)),f.f&&(t.V[e]=uj(t,n))),r=t.jb?LY(t,i,f):UJ(i,f),A==1?t.o[e]=r:A==2&&(i.f&&(r==2?se(t.e[i.b],t.f[P]):se(t.e[i.d],t.f[P])),f.f&&(r==2?se(t.e[f.b],t.f[n]):se(t.e[f.d],t.f[n]))),!0)}function r$(t){t=t||{};var e=0;return t.createSymmetryRank&&(e|=1),t.considerStereoheterotopicity&&(e|=2),t.encodeAtomCustomLabels&&(e|=8),t.encodeAtomSelection&&(e|=16),t.assignParitiesToTetrahedralN&&(e|=32),t.coordsAre3d&&(e|=64),t.createPseudoStereoGroups&&(e|=128),t.distinguishRacemicOrGroups&&(e|=256),t.tieBreakFreeValenceAtoms&&(e|=512),t.encodeAtomCustomLabelsWithoutRanking&&(e|=Qe),t.neglectAnyStereoInformation&&(e|=O1),e}function kR(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g;for(L=i;L>1;L--){for(h=r[L]-r[L-1],g=c(H1t,A0,176,h,0,1),f=r[L],l=0;l<h;l++){for(T=r[L-1]+l,s=f;s<r[L+1]&&n[s]==T;)++s;for(g[l]=new r0,g[l].c=T,g[l].d=A[T],g[l].b=e[T]?0:_d(t.R,P[T]),g[l].a=c(F,m,6,s-f,15,1),o=f;o<s;o++)g[l].a[o-f]=A[o];g[l].a.sort(pe(Q0.prototype.ld,Q0,[])),f=s}for(D=new s1,ai(g,0,g.length,D),Q=1,y=0;y<h;y++)A[g[y].c]=Q,y!=h-1&&Uj(g[y],g[y+1])!=0&&++Q}}function i$(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(r=0;r<t.f.s;r++)if(n=K(t.f,0,r),P=K(t.f,1,r),!(LA(t.f,r)||dt(t.f,r)!=1||Ct(t.f,n)==1||Ct(t.f,P)==1)&&!((t.e&4)!=0&&W0(t.f,n)&&W0(t.f,P))){for(L=!1,Q=0;Q<2;Q++)if(i=K(t.f,Q,r),Ct(t.f,i)>2){for(s=!0,D=-1,o=0;o<Ct(t.f,i);o++)f=_(t.f,i,o),f!=K(t.f,1-Q,r)&&(D==-1?D=A[f]:D!=A[f]&&(s=!1));if(s){L=!0;break}}L||((t.e&8)!=0&&W0(t.f,n)&&W0(t.f,P)?e[r]=1:e[r]=2)}}function g2(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(f=!1,D=0;D<t.hb.a.length;D++){for(i=G(t.hb,D),e=!0,y=-1,Q=!1,L=0;L<i.length;L++){if(A=i[L],t.db[A]==0){e=!1;break}if(t.db[A]!=3){for(o=!0,s=0;s<i.length;s++)if(s!=L&&t.f[A]==t.f[i[s]]){o=!1;break}o&&y<t.f[A]&&(y=t.f[A],Q=t.db[A]==1)}}if(e&&y!=-1){for(n=i,P=0,r=n.length;P<r;++P)A=n[P],(t.db[A]==1||t.db[A]==2)&&(t.eb[A]=Q),t.gb[A]=!1;er(t.hb,i),f=!0,--D}}return f}function mR(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(e,1),n==null&&(n=c(F,m,6,e.r,15,1)),f=ne(t,1),D=ne(t,2),s=c(Pt,it,6,e.r,16,1),Q=c(F,m,6,e.r,15,1),Q[0]=A,s[A]=!0,n[A]=Nn(e,t,A,f,D),i=0,o=0;i<=o;){for(L=0;L<e.e[Q[i]];L++)r=e.j[Q[i]][L],s[r]||(Q[++o]=r,s[r]=!0,n[r]=Nn(e,t,r,f,D));++i}for(P=0;P<e.s;P++)s[e.F[0][P]]&&o9(e,t,P,f,D,n==null?e.F[0][P]:n[e.F[0][P]],n==null?e.F[1][P]:n[e.F[1][P]],!1);ne(t,1),ne(t,2),t.U=0}function P6(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(ut(t,7),r=c(Pt,it,6,t.i,16,1),L=c(Pt,it,6,t.i,16,1),l=c(F,m,6,t.g,15,1),i=0,f=1;f<t.k[e];f++)if(n=t.n[e][f],(t.G[n]&64)!=0){for(Q=0;Q<f;Q++)if(P=t.n[e][Q],(t.G[P]&64)!=0&&(L[n]=!0,L[P]=!0,y=B2(t,l,t.j[e][f],t.j[e][Q],A-2,null,L),L[n]=!1,L[P]=!1,y!=-1)){for(D=!1,s=c(F,m,6,y,15,1),cm(t,l,s,y),o=0;o<y;o++)r[s[o]]||(r[s[o]]=!0,D=!0);D&&++i}}return i}function bR(t,e,A,n,P,r){var i,f,D,Q;switch(Q=1,f=!1,P){case 1:Q=257;break;case 3:Q=386;break;case 4:Q=257,f=!0;break;case 6:Q=129;break;default:switch(n){case 1:Q=1;break;case 2:Q=2;break;case 3:Q=4;break;case 4:Q=8;break;case 9:Q=16}}if(i=J0(t.j,e,A,Q),D=0,f&&Ne(t.j,e,1,-1),n>4)switch(n){case 5:D|=3;break;case 6:D|=9;break;case 7:D|=10;break;case 8:Q!=16&&(D|=127)}return r==1&&(D|=256),r==2&&(D|=128),D!=0&&Xe(t.j,i,D,!0),i}function f$(t){var e,A,n,P,r,i,f,D,Q;e=t.a,A=t.b,n=t.c,e=Y1(e,n),e=d0(e,(r=d0(Wt(n,4),j0(n,28)),r)),n=at(n,A),A=Y1(A,e),A=d0(A,(i=d0(Wt(e,6),j0(e,26)),i)),e=at(e,n),n=Y1(n,A),n=d0(n,(f=d0(Wt(A,8),j0(A,24)),f)),A=at(A,e),e=Y1(e,n),e=d0(e,(D=d0(Wt(n,16),j0(n,16)),D)),n=at(n,A),A=Y1(A,e),A=d0(A,(Q=d0(Wt(e,19),j0(e,13)),Q)),e=at(e,n),n=Y1(n,A),n=d0(n,(P=d0(Wt(A,4),j0(A,28)),P)),A=at(A,e),t.a=e,t.b=A,t.c=n}function d2(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;return o=jB(t.a,e,o1(e,A,n)),i=e.a[A],Q=e.a[n],i>Q&&(i=(T=U1(Q),U1(Q=i),T).a),l=f9(B(d(F,1),m,6,15,[1,2,0]),B(d(F,1),m,6,15,[i,Q,o]),t),l>=0?V0(t.b[l][4]):(r=e.D[A],D=e.D[n],r>D&&(r=(h=U1(D),U1(D=r),h).a),P=wB(r,t.a.f),f=wB(D,t.a.f),g=ed(t.a.f,P),k=ed(t.a.f,f),s=td(t.a.f,P),y=td(t.a.f,f),L=r==1||D==1?.05:.085,g+k-L*w.Math.pow(w.Math.abs(s-y),1.4))}function mf(t,e,A,n,P,r){var i;if((A==1||A==151||A==152)&&G1(t,e)>1)return!1;if((A==151||A==152)&&(n=A-149,A=1),i=A!=t.D[e]&&(!t.L||n0(V(t.C[e],1),0)&&(t.w==null||t.w[e]==null)),i)t.C[e]=0,t.w!=null&&t.w[e]!=null&&(t.w[e]=null),t.u!=null&&t.u[e]!=null&&(t.u[e]=null);else if(n==t.B[e]&&P==((t.v[e]&b8)>>>27)-1&&r==(t.v[e]&48))return!1;return i&&(t.D[e]=A,t.v[e]&=960,t.t[e]=0,iQ(t,t.A[e])),t.B[e]=n,aA(t,e,P),Je(t,e,r),t.U=0,!0}function jR(t,e,A,n){var P,r,i,f;if(t.g==null&&(t.g=Fb(t.d)),i=w.Math.max(t.c[n]+2.72,t.c[n]*2),e.e>i)return!1;for(yN(e,t.g),r=A.a.length-1;r>=0;r--)if(f=(ee(r,A.a.length),A.a[r]),KF(e,f),GK(e.q,f.q))return f.e>e.e?(ee(r,A.a.length),A.a.splice(r,1),A.a.push(e),t.c[n]>e.e&&(t.c[n]=e.e),!0):!1;if(A.a.push(e),t.c[n]>e.e)for(t.c[n]=e.e,P=A.a.length-1;P>=0;P--)f=(ee(P,A.a.length),A.a[P]),f.e>i&&cA(A,P);return!0}function en(t,e,A,n){var P,r;return n>=171&&n<=190?0:(r=0,(t.v[e]&48)==32&&(r-=1),((t.v[e]&48)==16||(t.v[e]&48)==48)&&(r-=2),P=t.t[e],P==0&&t.L&&(n0(V(t.C[e],yr),Sf)&&(P=-1),n0(V(t.C[e],yr),Ef)&&(P=1)),n==7||n==8||n==9?r+=P:n==6||n==14||n==32?r-=w.Math.abs(P):n==15||n==33?A-r-P<=3?r+=P:r-=P:n==16||n==34||n==52?A-r-P<=4?r+=P:r-=w.Math.abs(P):n==17||n==35||n==53?A-r-P<=5?r+=P:r-=w.Math.abs(P):r-=P,r)}function D$(t,e){var A,n,P,r,i,f;if((e.startsWith(\"M  RBC\")||e.startsWith(\"M  RBD\"))&&(P=L1(k1((Mt(6,9,e.length),e.substr(6,3))),f1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)switch(n=L1(k1((Mt(A,A+3,e.length),e.substr(A,A+3-A))),f1,Et)-1,i=L1(k1((Mt(f,f+3,e.length),e.substr(f,f+3-f))),f1,Et),i){case 3:case-1:w1(t.j,n,112,!0);break;case 1:w1(t.j,n,8,!0);break;case 2:w1(t.j,n,104,!0);break;case 4:w1(t.j,n,56,!0)}}function u$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(P=c(F,m,6,t.f.r,15,1),r=c(F,m,6,t.f.r,15,1),i=c(F,m,6,t.f.r,15,1),f=c(F,m,6,t.f.r,15,1),P[0]=e,i[e]=1,f[0]=-1,n=0,D=0;n<=D;){if(n==0||!t.b[P[n]])for(Q=0;Q<Ct(t.f,P[n]);Q++)A=_(t.f,P[n],Q),s=Nt(t.f,P[n],Q),i[A]==0&&!t.c[s]&&(P[++D]=A,r[D]=s,i[A]=i[P[n]]+1,f[D]=n);if(n==D){for(y=new Z3(i[P[n]]),o=n,L=0;L<y.a.length;L++)y.a[L]=P[o],y.b[L]=r[o],o=f[o];return y}++n}return null}function Q$(t,e,A,n){var P,r,i,f,D,Q,o;return o=A>n?1:-1,Q=A>n?n:A,D=A>n?A:n,r=gB(t,Q,t.a.length,!0),P=gB(t,Q,t.a.length,!1),r==-1||P==-1||(f=BA(2,D,r,P+1,!0,new rU(t)),i=BA(2,D,r,P+1,!1,new rU(t)),f==-1||i==-1)?V0(t.b[A-1][1])-V0(t.b[n-1][1]):e==0&&_n(t.a[f][0])==0?o*V0(t.a[f][3]):e==1&&_n(t.a[i][0])==1?o*V0(t.a[i][3]):V0(t.b[A-1][1])-V0(t.b[n-1][1])}function o$(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(r=c(F,m,6,n,15,1),s=c(F,m,6,4,15,1),s[0]=_(t,A,t.j[A][0]==e?1:0),s[1]=A,s[2]=e,s[3]=_(t,e,t.j[e][0]==A?1:0),D=0,Q=0;Q<t.e[e];Q++)i=t.j[e][Q],i!=A&&(r[D++]=i);L=c(Kt,t1,6,3,15,1),f=c(Kt,t1,6,3,15,1),o=j1(Kt,[ie,t1],[16,6],15,[3,2],2),L[0]=60,L[1]=180,L[2]=300,f[0]=33,f[1]=33,f[2]=33,o[0][0]=45,o[0][1]=75,o[1][0]=165,o[1][1]=195,o[2][0]=285,o[2][1]=315,Ft(P,new ZL(L,f,o,s,r,1))}function r6(t,e,A){var n,P,r,i,f,D;for(i=t.D[e],t.D[e]=t.D[A],t.D[A]=i,i=t.t[e],t.t[e]=t.t[A],t.t[A]=i,i=t.B[e],t.B[e]=t.B[A],t.B[A]=i,i=t.v[e],t.v[e]=t.v[A],t.v[A]=i,D=t.C[e],t.C[e]=t.C[A],t.C[A]=D,i=t.A[e],t.A[e]=t.A[A],t.A[A]=i,r=t.K[e],t.K[e]=t.K[A],t.K[A]=r,t.w!=null&&(f=t.w[e],t.w[e]=t.w[A],t.w[A]=f),t.u!=null&&(f=t.u[e],t.u[e]=t.u[A],t.u[A]=f),n=0;n<t.s;n++)for(P=0;P<2;P++)t.F[P][n]==e?t.F[P][n]=A:t.F[P][n]==A&&(t.F[P][n]=e);t.U=0}function B2(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h;if(A==n)return e[0]=A,0;for(t._b(1),o=c(F,m,6,t.r,15,1),Q=c(F,m,6,t.r,15,1),h=c(F,m,6,t.r,15,1),Q[0]=A,o[A]=1,D=0,L=0;D<=L&&o[Q[D]]<=P;){for(l=Q[D],s=0;s<t.e[l];s++)if(i==null||i.length<=t.n[l][s]||!i[t.n[l][s]]){if(f=t.j[l][s],f==n){for(y=o[l],e[y]=f,e[--y]=l;y>0;)e[y-1]=h[e[y]],--y;return o[l]}o[f]==0&&(r==null||r.length<=f||!r[f])&&(Q[++L]=f,o[f]=o[l]+1,h[f]=l)}++D}return-1}function U$(t,e){var A,n,P,r,i,f;for(r=0;r<2;r++){for(A=K(e,r,t.a),f=K(e,1-r,t.a);e.p[A]==2&&e.k[A]==2&&e.D[A]<10;)for(i=0;i<2;i++)if(n=e.j[A][i],n!=f){f=A,A=n;break}t.p[r+1]=A,t.k[r]=f}if(e0(e,t.p[1])==0&&O(e,t.p[1])==3)t.p[0]=-1;else for(P=0;P<O(e,t.p[1]);P++)if(n=_(e,t.p[1],P),n!=t.p[2]){t.p[0]=n;break}if(e0(e,t.p[2])==0&&O(e,t.p[2])==3)t.p[3]=-1;else for(P=0;P<O(e,t.p[2]);P++)if(n=_(e,t.p[2],P),n!=t.p[1]){t.p[3]=n;break}}function L$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(f=t1t(e),i=c(Ut,Tt,6,f.length,15,1),n=0;n<f.length;n++){if(T=e.a[n],y=f[n],g=UN(t.e,T),A=Rn(t.b,T),l=0,h=0,w.Math.abs(g)<go)for(Q=0;Q<e.e[n];Q++)L=e.j[n][Q],f[L]<0&&(y+=f[L]/(2*e.e[L]));if(T==62)for(o=0;o<e.e[n];o++)L=e.j[n][o],f[L]>0&&(y-=f[L]/2);for(D=0;D<e.e[n];D++)L=e.j[n][D],P=o1(e,n,L),s=e.a[L],r=l8(t,e,e.F[0][P],e.F[1][P]),h+=Q$(t.e,r,T,s),l+=f[L];i[n]=(1-A*g)*y+g*l+h}return i}function i6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(L=e.f,s=e.g,P=e.a,g=0,r=K(t.o,0,P),i=K(t.o,1,P),y=0;y<L.c.length;y++)if(A=L.e[L.c[y]],A!=r&&A!=i)for(k=XD(X(t.o,A)),l=0;l<s.c.length;l++)n=s.e[s.c[l]],n!=r&&n!=i&&(h=k+XD(X(t.o,n)),D=w.Math.abs(t.k[A].a-t.k[n].a),D<h&&(Q=w.Math.abs(t.k[A].b-t.k[n].b),Q<h&&(o=w.Math.abs(t.k[A].c-t.k[n].c),o<h&&(f=w.Math.sqrt(D*D+Q*Q+o*o),f<h&&(T=(h-f)/h,g+=T*T)))));return g}function s$(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;if(L=e[n==0?4:n-1],T=e[n==4?0:n+1],O(t.j,L)==3&&O(t.j,T)==3){for(y=c(F,m,6,t.j.g,15,1),s=c(Pt,it,6,t.j.i,16,1),r=A,i=0,f=r.length;i<f;++i)D=r[i],s[D]=!0;for(P=0;P<t.j.i;P++)t.e[P]||(s[P]=!0);if(l=B2(t.j,y,L,T,14,null,s),l==14){for(h=!0,o=2;o<=12;o++)if((o&3)!=1^Or(t.j,y[o])==5){h=!1;break}if(h)for(Df(t,y[7]),Q=1;Q<=5;Q+=2)u2(t,o1(t.j,y[Q],y[Q+1])),u2(t,o1(t.j,y[Q+7],y[Q+8]))}}}function RR(t,e){var A,n,P,r;if(!e||e.r==0)return!1;if(e.s!=0)for(n=Qn(t.V,24*t.ab),ck(new mu(e),new fu(pB(t.k)),new lA(0,0,ND(t.k),Y9(t.k)),o0+Bt(n));vX(t,e,.2*n);)GL(e,.5*n,.5*n);if(K1(t),dB(e),VB(e),P=t.V.L,t.V.r==0)Uf(e,t.V),t.a||ve(t.V,P),t.eb=w.Math.max(t.eb,4),P1(t.k),N1(t,new x1(t,1,!0));else{for(r=t.V.r,CD(t.V,e),t.a||ve(t.V,P),A=0;A<t.V.r;A++)vP(t.V,A,A>=r);t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))}return!0}function pR(t,e,A,n){this.V=t,this.U=e,this._=A,this.k=n,this.S=new n1,this.w=5,this.t=-1,this.u=-1,this.v=null,this.e=-1,this.F=6,this.B=0,this.D=-1,this.C=0,this.A=null,this.b=!0,this.a=!1,this.X=0,this.s=11,this.i=new C0,this.c=331,this.$=1,this.ab=(Re==-1&&(Re=globalThis.devicePixelRatio||1),Re),this.T=Bt(w.Math.round((Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*24))),(this.U&6)!=0&&(this.U|=1),(this.U&12)!=0&&(this.I=new QU),this.eb=4}function MR(t){var e,A,n,P,r,i,f,D,Q,o;if(t.e.a.c==1)return t.i;for(Q=$n(t.i),ve(Q,!0),ut(Q,7),P=0;P<Q.i;P++)t.g[P]&&(Q.I[P]=1,Q.U=0,Xe(Q,P,3,!0));for(A=0;A<Q.g;A++)t.b[A]!=0&&P0(t.i,A)<4&&(Y5(Q,A),Q.v[A]&=py,Q.U&=7,Ne(Q,A,0,-1));for(f=c(F,m,6,t.j,15,1),D=c(F,m,6,t.j,15,1),n=new bA(Q).f,e=0;e<Q.g;e++)t.b[e]!=0&&(o=t.b[e]-1,D[o]<n[e]&&(D[o]=n[e],f[o]=e));for(r=0;r<t.j;r++)i=\"\"+t.n[r]+\"|\"+t.k[r]+\"|\"+t.o[r],IP(Q,f[r],i);return Q}function CR(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;for(D=new SA(t.g,t.i),o=new C7,y=0,s=0,i=c(Pt,it,6,t.g,16,1),r=c(F,m,6,t.g,15,1),h=0;h<A&&s<t.g;h++){if(s==0)r[0]=e,i[e]=!0,s=1;else{for(l=s,Q=y;Q<s;Q++)for(P=r[Q],L=0;L<t.k[P];L++)if(f=t.j[P][L],!i[f])switch(n){case 0:i[f]=!0,r[l++]=f;break;case 1:Ik(t,P)&&Ik(t,f)||(i[f]=!0,r[l++]=f)}y=s,s=l}L9(t,D,i,!0,null),mg(o,Me(new qA(D,8)))}return bg(o,c(ft,Dt,2,o.a.a.length,6,1))}function y$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(i=c(F,m,6,t.j.r,15,1),A=0;A<t.j.r;A++)i[A]=-R1(t.j,A);for(jf(new p9(t.j),null,!0),n=0;n<t.j.r;n++)i[n]+=R1(t.j,n);for(e=0;e<t.j.r;e++)if(i[e]!=0)for(f=-i[e],P=0;P<t.j.s;P++)for(Q=0;Q<2;Q++)f>0&&c1(t.j,P)==16&&K(t.j,1-Q,P)==e&&(L=K(t.j,Q,P),Ae(t.j,L)&&(o=(s=X(t.j,L),y=s<(J1(),Y4).length?Y4[s]:null,y==null?0:y[y.length-1]),r=R1(t.j,L),r<o&&(D=w.Math.min(f,o-r),b0(t.j,L,r+D),f-=D)))}function HR(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(h=Yb(e,t.I),h==null||(l=Yb(A,t.B),l==null))return null;if(h.length==1&&l.length==1)return new FD(h[0],l[0]);if(y=sZ(t,h,l),y.length==1)return new FD(h[0],l[0]);for(o=NG(t.i,y.length),s=-1,r=h,f=0,Q=r.length;f<Q;++f)if(n=r[f],t.J[n]==y[o][0]){s=n;break}for(L=-1,P=l,i=0,D=P.length;i<D;++i)if(n=P[i],t.C[n]==y[o][1]){L=n;break}return t.o=Zb(t,t.D,t.J,s,t.o),t.n=Zb(t,t.u,t.C,L,t.n),new FD(s,L)}function o9(t,e,A,n,P,r,i,f){var D,Q,o,L;return Q=e.s,Q>=e.O&&QQ(e,e.O*2),L=(t.G[A]&768)>>8,o=-1,L==1&&(n==-1?o=ne(e,L):o=w.Math.min(32,n+((t.G[A]&768)>>8!=1&&(t.G[A]&768)>>8!=2?-1:(t.G[A]&cn)>>10))),L==2&&(P==-1?o=ne(e,L):o=w.Math.min(32,P+((t.G[A]&768)>>8!=1&&(t.G[A]&768)>>8!=2?-1:(t.G[A]&cn)>>10))),e.F[0][Q]=r,e.F[1][Q]=i,D=f&&t.$b(A)?8:t.I[A],e.I[Q]=D,e.G[Q]=t.G[A],e.H[Q]=e.L?t.H[A]:0,o!=-1&&(e.G[Q]&=-31745,e.G[Q]|=o<<10),++e.s,e.U=0,Q}function Qi(t){Lr();var e,A,n,P;if(e=Bt(t),t<tD.length)return tD[e];if(t<=50)return s2((Ce(),Ko),e);if(t<=1e3)return _r(s2(m9[1],e),e);if(t>1e6)throw At(new I8(\"power of ten too big\"));if(t<=Et)return _r(s2(m9[1],e),e);for(n=s2(m9[1],Et),P=n,A=E1(t-Et),e=Bt(t%Et);z(A,Et)>0;)P=RP(P,n),A=Y1(A,Et);for(P=RP(P,s2(m9[1],e)),P=_r(P,Et),A=E1(t-Et);z(A,Et)>0;)P=_r(P,Et),A=Y1(A,Et);return P=_r(P,e),P}function sr(t){var e,A,n,P,r,i;if(t.j!=0)return t.j;if(t.i&&X(t.e,t.a)!=15&&X(t.e,t.a)!=16){for(i=0;i<Ct(t.e,t.a);i++)if(r=Nt(t.e,t.a,i),_9(t.e,r,t.a))return _(t.e,t.a,i)==t.b?t.j=c1(t.e,r)==257?3:1:t.j=c1(t.e,r)==257?1:3,t.j}return e=_0(t.e,t.a,t.g),n=_0(t.e,t.a,t.b),n<e&&(n+=m0),Ct(t.e,t.a)==2?(A=n-e,A>3.0915926535897933&&A<3.191592653589793?(t.j=-1,t.j):(t.j=A<l1?4:2,t.j)):(P=_0(t.e,t.a,t.d),P<e&&(P+=m0),t.j=P<n?2:4,t.j)}function l$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;for(L=j1(F,[u0,m],[7,6],15,[A,(t.U&6)!=0?2:1],2),D=0;D<A;D++)L[D][0]=D;if(o=aX(t,e,A),(t.U&4)!=0)for(t.Y=0,n=(t.U&4)!=0?G(t.I,0):null,Q=0;Q<A;Q++)L[Q][1]=EQ(n,o[Q].a,o[Q].b)?1:0,L[Q][1]==0&&++t.Y;else if((t.U&2)!=0)for(t.Y=A,P=0;P<t.V.r;P++)X(t.V,P)==0&&L[e[P]][1]==0&&(L[e[P]][1]=1,--t.Y);for(i=o,ju(L,new gg(t,i)),s=c(F,m,6,A,15,1),f=0;f<A;f++)y=L[f][0],s[y]=f;for(r=0;r<t.V.r;r++)e[r]=s[e[r]]}function h$(t){var e,A,n,P,r,i,f,D,Q,o,L,s;if(!t.A){for(t.A=new n1,o=0,L=c(F,m,6,t.R.g,15,1),i=c(F,m,6,t.R.g,15,1),D=c(F,m,6,t.R.i,15,1),e=0;e<t.R.g;e++)if(L[e]==0&&(Gi(t.R,e)||e0(t.R,e)==1)){for(i[0]=e,f=1,Q=0,L[e]=++o,A=c(Pt,it,6,t.R.i,16,1),r=0;r<f;r++)for(s=0;s<O(t.R,i[r]);s++)P=Nt(t.R,i[r],s),(LA(t.R,P)||dt(t.R,P)==2||oi(t.R,P))&&(n=_(t.R,i[r],s),A[P]||(D[Q++]=P,A[P]=!0),L[n]==0&&(i[f++]=n,L[n]=o));Ft(t.A,new Gk(i,f,D,Q))}}}function T$(t,e){s8();var A,n,P,r,i,f,D,Q,o,L;for(A=0;A<e.g;A++)if(e.e[A]>=3&&(o=e.v[A]&3,(o==1||o==2)&&!(e.p[A]==2&&e.k[A]==2&&e.o[A][0]==2&&e.o[A][1]==2&&e.D[A]<=7))){for(n=c(F,m,6,5,15,1),P=c(F,m,6,4,15,1),f=0;f<e.e[A];f++){for(r=e.j[A][f],i=e.n[A][f],D=0;D<f&&r>n[D];)++D;for(Q=f-1;Q>=D;Q--)n[Q+1]=n[Q],P[Q+1]=P[Q];n[D]=r,P[D]=i}e.e[A]==3&&(n[3]=-1,P[3]=-1),n[4]=A,o==1&&(L=n[1],n[1]=n[0],n[0]=L,L=P[1],P[1]=P[0],P[0]=L),Ft(t,new bB(e,n,P))}}function c$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(l=0;l<e.j.a.length;l++)if(G(e.k,l).length!=6&&t.i[l]){for(L=!0,T=G(e.k,l),o=0;o<T.length;o++)if(!t.e[T[o]]){L=!1;break}if(L){for(f=-1,D=0,h=G(e.j,l),Q=0;Q<h.length;Q++)n=h[Q],y=t.g[n]?NR(t,n,!1):hb(t,n,!1),D<y&&(D=y,f=Q);if(f!=-1){if(s=h[f],A){for(P=h,r=0,i=P.length;r<i;++r)n=P[r],n!=s&&cf(t,n,!0);t.g[s]?NR(t,s,!0):hb(t,s,!0)}return Df(t,s),t.g[s]&&s$(t,h,T,f),!0}}}return!1}function VR(t,e,A,n){var P,r,i,f,D;if(e[A+1]!=40)throw At(new H1(\"SmilesParser: '$' for recursive SMARTS must be followed by '('. position:\"+A));for(f=1,r=A+2;r<e.length&&f>0;)e[r]==40?++f:e[r]==41&&--f,++r;if(f>0)throw At(new H1(\"SmilesParser: Missing closing ')' for recursive SMARTS. '('-position:\"+(A+1)));if(i=new SA(16,16),D=new dQ(t.k),BI(D,t.n.f),R6(D,i,e,A+2,r-1,!0,!0),ve(i,!0),n.a.push(i),e[A-1]==33)for(P=0;P<i.r;P++)w1(i,P,Pe,!0);return r-A}function f6(t){var e,A;for(this.j=t.j,this.i=t.i,this.e=c(F,m,6,t.e.length,15,1),this.k=c(F,m,6,t.e.length,15,1),this.a=c(Ut,Tt,6,t.e.length,15,1),this.b=c(Ut,Tt,6,t.e.length,15,1),A=0;A<t.e.length;A++)this.e[A]=t.e[A],this.k[A]=t.k[A],this.a[A]=t.a[A],this.b[A]=t.b[A];if(t.f!=null)for(this.f=c(F,m,6,t.f.length,15,1),e=0;e<t.f.length;e++)this.f[e]=t.f[e];if(t.g!=null)for(this.g=c(F,m,6,t.g.length,15,1),e=0;e<t.g.length;e++)this.g[e]=t.g[e]}function vA(t,e){var A,n,P,r,i,f;if(e.a==e.b&&e.c==e.d){for(i=new Zt(t.$);i.a<i.c.a.length;)if(r=_t(i),W9(r,e.a,e.c))return!1;return!0}for(f=Wm(e),A=!1,e.a>e.b&&(qu(e),A=!0),n=0;n<t.$.a.length;n++)if(r=G(t.$,n),!(r.c>f.c+f.b||r.d>f.d+f.a||f.c>r.c+r.b||f.d>r.d+r.a)){if(t2(t,e.a,e.c,n))return t2(t,e.b,e.d,n)?(A&&qu(e),!1):(Xs(t,e,0,n),P=vA(t,e),A&&qu(e),P);if(t2(t,e.b,e.d,n))return Xs(t,e,1,n),P=vA(t,e),A&&qu(e),P}return A&&qu(e),!0}function w$(t,e){var A,n,P,r,i,f,D;if(t.D[e]!=8||t.t[e]!=0||t.k[e]!=1||t.o[e][0]!=1)return!1;if(A=t.j[e][0],t.D[A]==6){for(i=t.k[A],n=0;n<i;n++)if(P=t.j[A][n],P!=e&&t.D[P]==8&&(r=o1(t,A,P),t.I[r]==2))return!0}else if(t.D[A]==7){if(t.t[A]==1)return!0}else if(t.D[A]==16){for(f=t.k[A],D=0,n=0;n<f;n++)P=t.j[A][n],P!=e&&t.D[P]==8&&(r=o1(t,A,P),t.I[r]==2&&++D);if(D==2)return!0}else if(rZ(t,e))return!0;return!1}function g$(t,e,A){var n,P,r,i,f,D,Q,o;if(t.o[e]=A,t.n=null,P=C9(t.c,e),Bg(t.s,P,t.o[e]),D=8+(t.a?0:1),CA(t.s,5,D)==0)return t.g[e]=new n1,t.q=0,!1;for(t.g[e]=t.s.F,i=t.g[e].a.length-1;i>=0;i--)for(Q=G(t.g[e],i),f=0;f<Q.length;f++)if(Q[f]!=-1&&(n=0,t.a&&P.t[f]==0&&R1(t.o[e],Q[f])!=0&&(o=En(t.o[e],Q[f]),n=Cu(t.o[e],Q[f],o)),t.k[e][f]>0&&t.k[e][f]>_i(t.o[e],Q[f])-n)){cA(t.g[e],i);break}for(t.q=1,r=0;r<t.o.length;r++)t.q*=t.g[r]?t.g[r].a.length:0;return!0}function d$(t){t=t||{};var e=0;if(t.maxAVBL){if(!Number.isInteger(t.maxAVBL)||t.maxAVBL<0||t.maxAVBL>d1)throw new Error(\"maxAVBL must be an integer between 0 and 65535\");e|=t.maxAVBL}return(t.inflateToMaxAVBL===!0||t.inflateToMaxAVBL===void 0&&t.inflateToHighResAVBL!==!0)&&(e|=o0),t.inflateToHighResAVBL&&(e|=q0),t.chiralTextBelowMolecule!==!1&&(e|=0),t.chiralTextAboveMolecule&&(e|=v8),t.chiralTextOnFrameTop&&(e|=B8),t.chiralTextOnFrameBottom&&(e|=b1),e}function B$(t,e,A,n){var P,r,i,f,D,Q,o,L;for(L=c(F,m,6,t.i,15,1),D=c(Pt,it,6,t.i,16,1),i=0;i<t.i;i++)L[i]=t.I[i],e[i]&&(D[i]=!0,t.I[i]=1,t.U=0);for(P=0;P<t.g;P++)if(P!=n&&t.p[P]==0&&D[t.n[n][0]])for(o=0;o<t.k[P];o++)f=t.n[P][o],t.I[f]=1,t.U=0,D[f]=!1;for(Q=0;Q<t.k[A];Q++)f=t.n[A][Q],t.I[f]=1,t.U=0,D[f]=!1;if(jf(new p9(t),D,!1))return t.t[A]=0,t.U=0,t.k[n]!=t.e[n]&&jQ(t,_(t,n,t.e[n]-1)),ut(t,7),!0;for(r=0;r<t.i;r++)g0(t,r,L[r]);return!1}function bf(t,e,A){var n,P,r,i,f;if(t.a=!1,t.d=e,an(t.e[e]&d1)){for(f=_L(t),t.c=t.b=f,n=e-1;n>1&&lO(t.e[n-1]);)--n;for(;t.e[t.d]==44;){for(i=!0,r=e-n,P=0;P<r;P++)if(t.e[n+P]!==t.e[t.d+1+P]){i=!1;break}if(!i)break;t.d+=1+r,f=_L(t),t.c>f?t.c=f:t.b<f&&(t.b=f)}return t.d-e}return t.e[e]==123&&an(t.e[e+1]&d1)?(++t.d,t.c=_L(t),t.e[t.d++]!=45||!an(t.e[t.d]&d1)||(t.b=_L(t),t.e[t.d++]!=125)?0:t.d-e):(t.c=1,t.b=A,t.a=!0,0)}function ER(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(dt(t,A)!=2&&!(A<t.i&&Ee(t.q,A))||(y=t.G[A]&3,y!=1&&y!=2))return-1;for(D=0;D<2;D++){for(n=t.F[D][A],P=t.F[1-D][A],s=-1,i=!1,o=0;o<t.k[n];o++)r=t.j[n][o],r!=P&&(r==e?i=!0:s=r);if(i){for(L=-1,f=-1,Q=0;Q<t.k[P];Q++)r=t.j[P][Q],r!=n&&(L==-1?L=r:r>L?f=r:(f=L,L=r));return t.k[n]==2?t.k[P]==2?y==2?L:-1:y==2?L:f:t.k[P]==2?y==2^e<s?-1:L:y==2^e<s?f:L}}return-1}function D6(t,e){var A,n,P,r,i,f,D,Q,o,L;if(e.e==0)throw At(new I8(DE));return P=e.e,e.d==1&&e.a[0]==1?e.e>0||t.e==0?t:new le(-t.e,t.d,t.a):(o=t.e,Q=t.d,n=e.d,Q+n==2?(L=Sn(V(t.a[0],g1),V(e.a[0],g1)),o!=P&&(L=E0(L)),z(L,0)>=0?be(L):mP(be(E0(L)))):(A=Q!=n?Q>n?1:-1:sQ(t.a,e.a,Q),A==0?o==P?X2:Rc:A==-1?vr:(i=Q-n+1,r=c(F,m,6,i,15,1),f=o==P?1:-1,n==1?TR(r,t.a,Q,e.a[0]):vp(r,i,t.a,Q,e.a,n),D=new le(f,i,r),Cn(D),D)))}function SR(t){var e,A,n,P,r;for(t.a=j1(F,[u0,m],[7,6],15,[t.d.length,4],2),t.c=j1(F,[u0,m],[7,6],15,[t.d.length,2],2),t.e=c(F,m,6,t.d.length,15,1),e=c(F,m,6,2,15,1),P=0;P<t.d.length;P++){for(r=0;r<2;r++)e[0]=K(t.b,1-r,t.d[P]),e[1]=K(t.b,r,t.d[P]),PL(t.b,e[1])&&G5(t.b,e[0],e,null),t.a[P][1+r]=e[1],t.c[P][r]=e[0];A=Yj(t,t.a[P][1],t.c[P][0]),n=Yj(t,t.a[P][2],t.c[P][1]),t.e[P]=vE[A][n],t.a[P][0]=jj(t,t.a[P][1],t.c[P][0],A),t.a[P][3]=jj(t,t.a[P][2],t.c[P][1],n)}}function v$(t){var e,A,n,P,r,i;for(Z_(t),ut(t,31),n=0;n<t.g;n++){if(((t.v[n]&b1)>>18==1||(t.v[n]&b1)>>18==2)&&((t.v[n]&wn)==0||(t.v[n]&3)==3))throw At(new H1(r4));if((t.v[n]&o0)!=0)throw At(new H1(i4));if(((t.v[n]&3)==1||(t.v[n]&3)==2)&&t.p[n]==0){for(e=c(Ut,Tt,6,t.k[n],15,1),r=0;r<t.k[n];r++)e[r]=_0(t,n,t.j[n][r]);for(P=1;P<t.k[n];P++)if(!_9(t,t.n[n][P],n)){for(i=0;i<P;i++)if(!_9(t,t.n[n][i],n)&&(A=w.Math.abs(Ze(e[P],e[i])),A<.08||A>yM))throw At(new H1(f4))}}}}function F$(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(n=c(F,m,6,t.g,15,1),L=c(Pt,it,6,t.g,16,1),L[A]=!0,L[e]=!0,n[0]=e,i=0,f=1;i<=f;){for(Q=0;Q<t.k[n[i]];Q++)eA(t,t.n[n[i]][Q])&&(r=t.j[n[i]][Q],L[r]||(n[++f]=r,L[r]=!0));++i}for(o=0;o<=f;o++)for(s=0;s<t.k[n[o]];s++)r=t.j[n[o]][s],!L[r]&&!LA(t,t.n[n[o]][s])&&KQ(t,n[o],r,L,null,null);for(L[A]=!1,D=0;D<=f;D++)L[n[D]]=!1;for(P=0;P<L.length;P++)L[P]&&(n[++f]=P);return o8(f+1),pP(n,c(F,m,6,f+1,15,1),0,f+1)}function Zs(){Zs=v1,LS=B(d(F,1),m,6,15,[f1,1162261467,dn,1220703125,362797056,1977326743,dn,387420489,Jf,214358881,429981696,815730721,1475789056,170859375,d9,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,dn,1291467969,1544804416,1838265625,60466176]),sS=B(d(F,1),m,6,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function k$(t,e){var A,n,P,r,i;if(t.i!=0&&t.k!=null){for(n=a5(t)/t.p.c,nA(e,t.i),oL(e,Bt(1.6*n),!0,!1),r=0;r<t.k.length;r++)if(t.k[r].r!=0){for(P=new yg,A=0;A<t.k[r].r;A++)P.a=Bt(P.a+mt(t.k[r],A)),P.b=Bt(P.b+Rt(t.k[r],A));P.a=P.a/t.k[r].r|0,P.b=P.b/t.k[r].r|0,P.a=Bt(W1(t.e[r].R,P.a)),P.b=Bt(Z1(t.e[r].R,P.b)),i=t.c==0?\"\"+(r+1):t.c==2?r<t.j?\"\"+String.fromCharCode(65+r&d1):\"R\"+(r+1-t.j):t.c==1?r<t.n?\"\"+String.fromCharCode(65+r&d1):\"P\"+(r+1-t.n):\"?\"+(r+1),z3(e,P.a,P.b,i)}}}function m$(t){var e,A,n,P,r,i,f,D,Q,o;for(r=0,A=0;A<t.R.g;A++)t.bb[A]!=0&&(t.bb[A]!=2||(t.Q&256)==0)&&++r;if(r!=0){for(o=c(F,m,6,r,15,1),r=0,n=0;n<t.R.g;n++)t.bb[n]!=0&&(t.bb[n]!=2||(t.Q&256)==0)&&(o[r]=t.bb[n]<<29|t.ab[n]<<24|t.f[n]<<12|n,++r);for(o.sort(pe(Q0.prototype.ld,Q0,[])),i=0,Q=0,f=o[0]&On;;)if(++Q,Q==o.length||f!=(o[Q]&On)){for(P=c(F,m,6,Q-i,15,1),D=i;D<Q;D++)e=o[D]&4095,P[D-i]=e,t.gb[e]=!0;if(Ft(t.hb,P),Q==o.length)break;f=o[Q]&On,i=Q}}}function IR(t){var e,A,n,P;if(t.length==0||(zt(0,t.length),t.charCodeAt(0)!=62))return null;for(n=1,P=0,e=0;n<t.length;){if(zt(n,t.length),t.charCodeAt(n)==60){if(P!=0)return null;P=n}else if(zt(n,t.length),t.charCodeAt(n)==62){if(e!=0)return null;e=n}++n}if(P!=0&&P<e)return Mt(P+1,e,t.length),t.substr(P+1,e-(P+1));if(n=t.indexOf(\"DT\",1),n==-1)return null;for(A=n+2;t.length>A&&an((zt(A,t.length),t.charCodeAt(A)));)++A;return A==n+2?null:(Mt(n,A,t.length),t.substr(n,A-n))}function b$(t,e,A,n,P,r,i,f,D,Q){var o,L,s,y,l,h,T,g,k,v;t!=e&&(o=t9(t,e),!(D[o[0]][o[1]]&&D[o[0]][o[1]].a.length==1)&&(s=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),k=f.a[A]*w.Math.sin(P),v=f.a[n]*w.Math.sin(r),y=k+v,l=k-v,T=w.Math.sqrt(s*s+l*l),h=w.Math.sqrt(s*s+y*y),g=c(F,m,6,2,15,1),g[0]=Q.F[0][i],g[1]=Q.F[1][i],L=D[o[0]][o[1]],L?(L.a[0]=w.Math.min(L.a[0],T),L.a[1]=w.Math.min(L.a[1],h)):D[o[0]][o[1]]=new is(o,g,T,h,3)))}function j$(t,e,A,n,P){if(e[A-1]==42)t.d=6,t.c=J(t.c,1);else if(e[A-1]==63)t.d=0;else if((e[A-1]==65||e[A-1]==97)&&P)t.d=6,t.c=J(t.c,1),t.c=J(t.c,e[A-1]==65?4:2),t.r=!0;else switch(String.fromCharCode(e[A-1]).toUpperCase().charCodeAt(0)){case 66:A<n&&e[A]==114?(t.d=35,++A):t.d=5;break;case 67:A<n&&e[A]==108?(t.d=17,++A):t.d=6;break;case 70:t.d=9;break;case 73:t.d=53;break;case 78:t.d=7;break;case 79:t.d=8;break;case 80:t.d=15;break;case 83:t.d=16}return A}function R$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(n=c(Ut,Tt,6,2,15,1),y=GY(t,A),D=0;D<2;D++)if(A[3*D]!=-1){for(r=2-D,l=3-3*D,Q=0,s=0;s<3;s++)i=t.j[A[r]][s],i!=y[1-D]&&t.D[i]!=1&&(A[l]=i,e?n[Q++]=YQ(e,A):n[Q++]=JQ(t,A));return A[l]=-1,bT(n)}for(P=c(Ut,Tt,6,2,15,1),o=0,f=0;f<3;f++)if(h=t.j[A[1]][f],h!=y[0]&&t.D[h]!=1){for(A[0]=h,L=0,s=0;s<3;s++)T=t.j[A[2]][s],T!=y[1]&&t.D[T]!=1&&(A[3]=T,e?P[L++]=YQ(e,A):P[L++]=JQ(t,A));n[o++]=bT(P)}return A[0]=-1,A[3]=-1,bT(n)}function xR(t,e){Xv();var A,n,P,r,i,f,D,Q,o,L,s,y;for(this.e=e,this.a=c(F,m,6,e.length+t.length,15,1),this.b=c(F,m,6,e.length+t.length,15,1),this.d=c(F,m,6,e.length+t.length,15,1),A=0,r=0,P=0,f=e,D=0,Q=f.length;D<Q;++D)i=f[D],n=jv(i.d.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;for(L=t,s=0,y=L.length;s<y;++s)o=L[s],n=jv(o.b.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;this.c=r+1}function p$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(Q=c(F,m,6,t.k.g,15,1),f=c(F,m,6,t.k.g,15,1),D=c(F,m,6,t.k.g,15,1),o=c(F,m,6,t.k.g,15,1),A=K(t.k,0,e),n=K(t.k,1,e),f[0]=A,f[1]=n,D[0]=-1,D[1]=e,Q[A]=1,Q[n]=2,o[A]=-1,o[n]=A,i=1,L=1;i<=L&&Q[f[i]]<15;){for(l=f[i],s=0;s<O(t.k,l);s++)if(P=_(t.k,l,s),P!=o[l]){if(r=Nt(t.k,l,s),P==A){for(D[0]=r,y=0;y<=L;y++)t.g[D[s]]||(t.g[D[s]]=!0,++t.c);return}W0(t.k,P)&&Q[P]==0&&(++L,f[L]=P,D[L]=r,Q[P]=Q[l]+1,o[P]=l)}++i}}function Ws(t,e){var A,n,P,r,i,f,D,Q,o,L;if(i=t.e,D=e.e,D==0)return t;if(i==0)return e.e==0?e:new le(-e.e,e.d,e.a);if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],g1),n=V(e.a[0],g1),i<0&&(A=E0(A)),D<0&&(n=E0(n)),Ce(),ku(Y1(A,n),0)?be(Y1(A,n)):mP(be(E0(Y1(A,n))));if(P=r!=f?r>f?1:-1:sQ(t.a,e.a,r),P==-1)L=-D,o=i==D?bL(e.a,f,t.a,r):HL(e.a,f,t.a,r);else if(L=i,i==D){if(P==0)return Ce(),vr;o=bL(t.a,r,e.a,f)}else o=HL(t.a,r,e.a,f);return Q=new le(L,o.length,o),Cn(Q),Q}function M$(){var t,e,A,n,P,r,i;if(!ec)try{for(t=o2(\"bondLengthData.txt\"),A=X1(t),e=A==null?0:L1(A,f1,Et),po=c(F,m,6,e,15,1),a4=c(Oe,uA,6,e,15,1),tc=c(Oe,uA,6,e,15,1),BE=c(F,m,6,e,15,1),P=0;P<e;P++)if(i=X1(t),i!=null&&(r=c8(i,\"\\\\t\"),r.length==4))try{po[P]=L1(r[0],f1,Et),a4[P]=sn(r[1]),tc[P]=sn(r[2]),BE[P]=L1(r[3],f1,Et)}catch(f){if(f=_1(f),Yt(f,42))break;throw At(f)}ec=!0}catch(f){if(f=_1(f),Yt(f,79))n=f,ur(n,(q1(),k9),\"\");else throw At(f)}}function C$(t,e){var A,n;return n={},A=t.H[e],n.single=I1(V(A,1),0),n.double=I1(V(A,2),0),n.triple=I1(V(A,4),0),n.delocalized=I1(V(A,8),0),n.metalLigand=I1(V(A,16),0),n.quadruple=I1(V(A,32),0),n.quintuple=I1(V(A,64),0),n.notRing=I1(V(A,128),0),n.ring=I1(V(A,256),0),n.aromatic=I1(V(A,KA),0),n.nonAromatic=I1(V(A,oP),0),n.ringSize=Ot(V(A,NP))>>17,n.brigdeMin=Ot(V(A,7680))>>9,n.brigdeSpan=Ot(V(A,jy))>>13,n}function NR(t,e,A){if(t.f[e])return 0;if(X(t.j,e)==7){if(Ct(t.j,e)==3)return 6;if(O(t.j,e)==2)return t.a?0:4}else{if(X(t.j,e)==8)return 10;if(X(t.j,e)==15||X(t.j,e)==33){if(O(t.j,e)==3)return 8}else if(X(t.j,e)==16||X(t.j,e)==34||X(t.j,e)==52){if(O(t.j,e)==2)return 11;if(O(t.j,e)==3)return R1(t.j,e)==1?12:(A&&b0(t.j,e,1),5)}else if(X(t.j,e)==6)return R1(t.j,e)==-1?Ct(t.j,e)==3?16:Le(t.j,e)==3?15:14:(A&&b0(t.j,e,-1),Ct(t.j,e)!=Le(t.j,e)?2:3)}return 0}function H$(t){var e,A,n,P,r,i,f;for(f=!1,A=0;A<t.g;A++)((t.v[A]&wn)==0||(t.v[A]&3)==3)&&(t.v[A]&=My);for(r=0;r<t.i;r++)(dt(t,r)!=1||(t.G[r]&3)==0||(t.G[r]&3)==3)&&(t.G[r]&=-32513);if(t.M){if((t.J&GP)!=q0){for(i=c(Pt,it,6,t.g,16,1),n=0;n<t.g;n++)(t.v[n]&wn)!=0&&(t.v[n]&3)!=3&&(t.v[n]&b1)>>18==1&&(i[n]=!0);for(P=0;P<t.g;P++)(t.v[P]&wn)!=0&&(t.v[P]&3)!=3&&(Ne(t,P,1,0),f=!0);for(e=0;e<t.g;e++)i[e]&&(me(t,e,1,!1),Ne(t,e,1,-1),f=!0)}t.M=!1}return ne(t,1),ne(t,2),f}function V$(t){var e,A,n;if(t.a==0)return!0;if(t.d.length==1&&t.c.length==1)return(t.e.i==null||t.e.i[t.d[0]]==null||!t.e.i[t.d[0]][t.c[0]])&&(++t.e.b,t.e.f[t.d[0]]=t.e.b,t.e.d[t.c[0]]=t.e.b),!0;if(Tb(t.d,t.e.e)||Tb(t.c,t.e.c)){for(e=w.Math.min(t.d.length,t.c.length),n=0;e!=0&&n<t.d.length;n++)for(A=0;A<t.c.length;A++)if(t.e.d[t.c[A]]==0&&(t.e.i==null||t.e.i[t.d[n]]==null||!t.e.i[t.d[n]][t.c[A]])){--e,++t.e.b,t.e.f[t.d[n]]=t.e.b,t.e.d[t.c[A]]=t.e.b;break}return!0}return!1}function GR(t,e,A,n,P,r,i){eR();var f,D;this.a=e,this.p=c(F,m,6,4,15,1),this.k=c(F,m,6,2,15,1),f=new YT,Qk(t,e,this.p,f)!=null?(this.k[0]=f.e[0],this.k[1]=f.e[1]):U$(this,t),this.i=A[this.p[1]],this.j=A[this.p[2]],this.f=r[this.i],this.g=r[this.j],this.b=A[t.F[0][e]]==this.i,i?(this.d=jS,this.c=mS,this.e=bS):(this.d=vG(f.d),this.d==null?(D=new b6(t,this.p),this.d=D.b,this.c=D.a,this.e=D.c):(this.c=dG(f.d),this.e=BG(f.d))),Y$(this,t),p_(this,t),X_(this,t,n,P)}function E$(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;for(D=n+1;D<t.j.g.length;D++)if(D!=n&&t.e[e][D]&&t.e[A][D])return i=c(F,m,6,2,15,1),i[0]=A,i[1]=e,i;for(l=c(F,m,6,t.b,15,1),o=c(F,m,6,t.b,15,1),Q=c(F,m,6,t.b,15,1),r=0,L=0,Q[0]=e,o[e]=1;r<=L;){for(s=0;s<t.d[Q[r]].length;s++){if(P=t.d[Q[r]][s],P==A){if(r==0)continue;for(f=o[Q[r]]+1,i=c(F,m,6,f,15,1),i[0]=P,i[1]=Q[r],y=2;y<f;y++)i[y]=l[i[y-1]];return i}o[P]==0&&t.c[P]!=-3&&(o[P]=o[Q[r]]+1,Q[++L]=P,l[P]=Q[r])}++r}return null}function S$(t){var e,A,n,P;if(t.g.a.length+t.f.a.length<=1)return!1;for(e=Jb(t),P=c(Rl,A0,36,t.g.a.length+t.f.a.length,0,1),A=0;A<t.g.a.length+t.f.a.length;A++)if(P[A]=vj(A<t.g.a.length?G(t.g,A):G(t.f,A-t.g.a.length),null),P[A]){for(n=0;n<A;n++)if(P[n]&&(P[A].c+P[A].b>=P[n].c&&P[A].c<=P[n].c+P[n].b||P[A].d+P[A].a>=P[n].d&&P[A].d<=P[n].d+P[n].a))return!0;if(A!=0&&P[A-1]&&(P[A].c-P[A-1].c-P[A].b>5*e||P[A].d-P[A-1].d-P[A].a>5*e))return!0}return!1}function Ne(t,e,A,n){var P,r,i;if(A==0)t.v[e]&=My,t.v[e]|=A<<18;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.r;r++)r!=e&&A==(t.v[r]&b1)>>18&&i<((t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20)&&(i=(t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20);for(P=0;P<t.s;P++)A==(t.G[P]&768)>>8&&i<((t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10)&&(i=(t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10);if(n=i+1,n>=32)return}t.v[e]&=My,t.v[e]|=A<<18|n<<20}t.U&=7}function T8(t,e,A,n){var P,r,i;if(A==0)t.G[e]&=-32513,t.G[e]|=A<<8;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.r;r++)A==(t.v[r]&b1)>>18&&i<((t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20)&&(i=(t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20);for(P=0;P<t.s;P++)P!=e&&A==(t.G[P]&768)>>8&&i<((t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10)&&(i=(t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10);if(n=i+1,n>=32)return}t.G[e]&=-32513,t.G[e]|=A<<8|n<<10}t.U&=7}function I$(t,e){var A,n,P,r,i,f,D;if(r=e.a,!((t.d>0?t.d:w.Math.floor((t.a-1)*mo)+1)-r<0||r==0)&&(n=$b(t)-r,!(n<=0))){if(t.a<54){k_(t,e,n);return}f=Qi(n),P=fR((!t.c&&(t.c=jP(E1(t.f))),t.c),f),i=t.e-n,P[1].e!=0&&(A=ss($k(P[1].e<0?P[1].e==0?P[1]:new le(-P[1].e,P[1].d,P[1].a):P[1]),f),A=zQ(SQ(P[0],0)?1:0,P[1].e*(5+A),e.b),A!=0&&(P[0]=v2(P[0],(Ce(),z(A,0)>=0?be(A):mP(be(E0(A)))))),D=new Fg(P[0]),$b(D)>r&&(P[0]=D6(P[0],(Ce(),Ko)),--i)),t.e=Am(i),t.d=r,CT(t,P[0])}}function OR(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(T=c(gr,B9,26,A,0,1),i=c(F,m,6,A,15,1),Q=c(F,m,6,A,15,1),r=c(F,m,6,t.r,15,1),P=0;P<t.r;P++)e[P]!=-1&&(r[P]=i[e[P]]++);for(D=0;D<t.s;D++)l=e[t.F[0][D]],h=e[t.F[1][D]],l==h&&l!=-1&&++Q[l];for(g=0;g<A;g++)T[g]=new SA(i[g],Q[g]),EU(t,T[g]);for(n=0;n<t.r;n++)e[n]!=-1&&Nn(t,T[e[n]],n,0,0);for(f=0;f<t.s;f++)l=e[t.F[0][f]],h=e[t.F[1][f]],l==h&&l!=-1&&yQ(t,T[l],f,0,0,r,!1);for(L=T,s=0,y=L.length;s<y;++s)o=L[s],ne(o,1),ne(o,2);return T}function x$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(A=K(t.f,0,e),n=K(t.f,1,e),i=c(F,m,6,t.f.r,15,1),f=c(F,m,6,t.f.r,15,1),D=c(F,m,6,t.f.r,15,1),Q=c(F,m,6,t.f.r,15,1),i[0]=A,i[1]=n,f[1]=e,D[A]=1,D[n]=2,Q[0]=-1,Q[1]=0,r=1,o=1;r<=o;){for(L=0;L<O(t.f,i[r]);L++){if(P=_(t.f,i[r],L),r>1&&P==A){for(l=new Z3(D[i[r]]),f[0]=Nt(t.f,i[r],L),s=r,y=0;y<l.a.length;y++)l.a[y]=i[s],l.b[y]=f[s],s=Q[s];return l}D[P]==0&&Gi(t.f,P)&&(i[++o]=P,f[o]=Nt(t.f,i[r],L),D[P]=D[i[r]]+1,Q[o]=r)}++r}return null}function N$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(A=0;A<t.k.g;A++)if(W0(t.k,A))for(D=c(F,m,6,t.k.g,15,1),f=c(F,m,6,t.k.g,15,1),Q=c(F,m,6,t.k.g,15,1),f[0]=A,D[A]=1,Q[A]=-1,i=0,o=0;i<=o;){for(P=(D[f[i]]&1)==1?1:2,L=0;L<O(t.k,f[i]);L++)if(n=Nt(t.k,f[i],L),dt(t.k,n)==P&&e[n]&&(r=_(t.k,f[i],L),D[r]==0)){if(P==1&&W0(t.k,r)){for(s=f[i];s!=-1;)g0(t.k,o1(t.k,r,s),P==1?2:1),P=3-P,r=s,s=Q[s];return Wn(t.k,A,!1),Wn(t.k,r,!1),t.b-=2,!0}f[++o]=r,Q[r]=f[i],D[r]=D[f[i]]+1}++i}return!1}function qR(t,e,A,n,P,r){var i,f,D,Q,o,L;for(t.j=e,t.d=A,t.n=c(F,m,6,n.length,15,1),t.f=c(F,m,6,P.length,15,1),t.k=uy(t.j,!1),t.p=uy(t.j,!0),t.e=uy(t.d,!1),t.i=uy(t.d,!0),t.o=Mb(t.j),t.g=Mb(t.d),t.q=Zy,Q=new _R(e,A,t.n,t.f,r),t.a=0;TX(Q);){for(++t.a,t.c=Q.q,f=Q.r,D=tR(Q);D;)Itt(t,D),D=tR(Q);t.b=t.c,t.c<f?(i=new YR(t.j,t.d,t.n,t.f,t.c,r),o=Vtt(i),t.c+=i.b-i.g):(L=new BU(t.j,t.d),o=Ay(L,c5(L,t.n,t.f))),t.q<o&&(t.q=o,PA(t.n,0,n,0,n.length),PA(t.f,0,P,0,P.length))}return t.q!=Zy}function G$(t,e){var A,n,P,r,i,f,D,Q,o,L;for(r=null,D=null,i=null,ut(t.g,t.N),t.o=c(F,m,6,t.g.g,15,1),n=0;n<t.g.g;n++)t.o[n]=O(t.g,n);if(t.p!=0){for(Q=new SA(t.g.r,t.g.s),L=c(Pt,it,6,t.g.r,16,1),P=0;P<t.g.r;P++)L[P]=!t.D[P];for(L9(t.g,Q,L,!0,null),ut(Q,t.N),jp(t,Q,e),r=t.j,D=t.n,i=t.k,o=0,A=0;A<t.g.g;A++)t.D[A]||(t.o[A]=O(Q,o++))}if(jp(t,t.g,e),t.p!=0){for(o=0,A=0;A<t.g.r;A++)t.D[A]||(t.j[A]=r[o],t.k[A]=i[o++]);for(o=0,f=0;f<t.g.s;f++)!t.D[K(t.g,0,f)]&&!t.D[K(t.g,1,f)]&&(t.n[f]=D[o++])}}function O$(t,e){var A,n,P,r,i,f,D,Q,o;if(A=new LD,!wl)return Ft(A.a,new ae(xV,2)),-999;for(Ft(A.a,new ae(\"Found sub-structure fragments and their contributions:\",2)),Ft(A.a,new ae(\"(yellow atoms carry at least one more substituent)\",2)),Q=0,D=0,r=0,o=new VD(1),P=new _A,i=0;i<gi.a.a.length;i++)l2(new WA(!1),P,Eh(gi,i)),GA(o,e),MA(o,P),CA(o,1,o.c)>0&&(f=jg(gi,i),f<-1?Q+=f:(D+=f,++r),e8(A,Eh(gi,i),1),Ft(A.a,new ae(\"\"+f,3)));return r==0?-1:(n=Q+D/w.Math.sqrt(r),n=n+.0625*(r-40),t.a=A,n)}function zR(t){J1();var e,A,n,P,r;for(Wr.call(this,t),tj(this,u6(this)),r=(ut(this,7),this.q),this.b=c(bE,m,6,r.j.a.length,15,1),gx(this.b),e=!1,A=!0;!e&&A;)for(e=!0,A=!1,P=0;P<r.j.a.length;P++)this.b[P]==2&&(this.b[P]=qa(this,P),this.b[P]!=2&&(A=!0)),this.b[P]==2&&(e=!1);if(!e)throw At(new F7);for(this.a=c(F,m,6,this.r,15,1),n=0;n<this.a.length;n++)if(this.a[n]=-1,this.a[n]=WO(this,n),this.a[n]==0)throw At(new N7(\"Couldn't assign an atom type to atom \"+n+\" (\"+a0[this.D[n]]+\")\"))}function q$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(r=j1(F,[u0,m],[7,6],15,[2,32],2),i=0;i<2;i++){for(A=c(F,u0,7,32,0,2),s=0,P=0;P<32;P++)if(e[i][P]!=null){for(o=e[i][P].length,A[P]=c(F,m,6,o,15,1),f=0;f<o;f++)A[P][f]=t.f[e[i][P][f]];A[P].sort(pe(Q0.prototype.ld,Q0,[])),++s}for(L=s;L>0;L--){for(Q=0,D=null,n=0;n<32;n++)if(A[n]!=null){if(D==null||D.length<A[n].length)D=A[n],Q=n;else if(D.length==A[n].length){for(f=D.length-1;f>=0;f--)if(D[f]<A[n][f]){D=A[n],Q=n;break}}}r[i][Q]=L,A[Q]=null}}return r}function z$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(r=0,A=0;A<t.V.r;A++)i0(t.V,A)&&++r;for(y=t.V.r,l=t.V.s,t.gb=zD(t.gb,t.gb.length+r),t.jb=zD(t.jb,t.jb.length+r),i=c(F,m,6,t.V.r,15,1),D=ne(t.V,1),Q=ne(t.V,2),n=0;n<y;n++)i0(t.V,n)&&(L=t.V.r,t.gb[L]=t.gb[n],t.jb[L]=t.jb[n],i[n]=L,Nn(t.V,t.V,n,D,Q));for(f=0;f<l;f++)bP(t.V,f)&&yQ(t.V,t.V,f,D,Q,i,!1);for(P=0;P<y;P++)vP(t.V,P,!1);for(e=y;e<t.V.r;e++)tA(t.V,e,0,!1);if(t.I)for(o=t.I.a.length-1;o>=0;o--)s=G(t.I,o),s.g&&!Yt(s,64)&&Ft(t.I,s.Gb())}function K$(t){var e,A,n,P,r,i,f,D;if(t.g!=null)for(i=new Zp(t),t.b=new n1,P=0;P<t.g.length;P++)n=hq(i,P),n==0?(kj(i,P),f=Cm(t,P,2),e=Cm(t,P,1),A=km(t,P),f==1&&e==1&&!A&&(eK(t,P,i.a+i.f++),Ft(t.b,new Zi(P,1,-1,-1))),f>0?(A&&(XT(t,P,i.i+i.g++,2),++f),Ft(t.b,new Zi(P,1,-1,-1))):e>0?(A&&XT(t,P,i.a+i.f++,1),Ft(t.b,new Zi(P,1,-1,-1))):A&&(XT(t,P,i.a+i.f++,1),Ft(t.b,new Zi(P,1,-1,-1)))):n==1&&(km(t,P)?(r=Vz(i,P),D=hz(i,P),Ft(t.b,new Zi(P,2,r,D))):(kj(i,P),Ft(t.b,new Zi(P,1,-1,-1))))}function XQ(t){Y3(),this.d=t,ut(this.d,15),this.j=new n1,this.k=c(Pt,it,6,(s8(),Sl).length,16,1),this.i=c(F,m,6,Sl.length,15,1),d1t(this.j,t),this.i[0]=this.j.a.length,this.i[1]=-this.j.a.length,qtt(this.j,t),this.i[1]+=this.j.a.length,this.i[2]=-this.j.a.length,iX(this.j,t),this.i[2]+=this.j.a.length,this.i[4]=-this.j.a.length,T$(this.j,t),this.i[4]+=this.j.a.length,this.i[5]=-this.j.a.length,Ga(this.j,t),this.i[5]+=this.j.a.length,this.i[3]=-this.j.a.length,ytt(this.j,t),this.i[3]+=this.j.a.length}function J$(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;for(i=c(F,m,6,A.r,15,1),o=c(F,m,6,A.r,15,1),Q=c(Ut,Tt,6,A.r,15,1),o[0]=e,D=0,L=0;D<=L;){for(l=o[D],s=0;s<A.e[l];s++)f=A.j[l][s],i[f]==0&&f!=e&&(o[++L]=f,i[f]=i[l]+1,i[f]==2?Q[f]=f<e?t[e][f].a[0]:t[f][e].a[0]:i[f]>2&&(Q[f]=Q[l]+pr(n,A.n[l][s]),f<e&&!t[e][f]&&(i[f]==3?t[e][f]=new Cg:(y=c(F,m,6,2,15,1),y[0]=o[1],y[1]=l,t[e][f]=new is(t9(e,f),y,(r=A.D[e],(r<(k2(),JA).length?JA[r]:2)+(P=A.D[f],P<JA.length?JA[P]:2)),Q[f],0)))));++D}}function c8(t,e){var A,n,P,r,i,f,D,Q;for(A=new RegExp(e,\"g\"),D=c(ft,Dt,2,0,6,1),n=0,Q=t,r=null;;)if(f=A.exec(Q),f==null||Q==\"\"){D[n]=Q;break}else{if(i=f.index,r==null&&i==0&&f[0].length==0){Q=hA(Q,i+f[0].length,Q.length),A.lastIndex=0,r=Q;continue}D[n]=(Mt(0,i,Q.length),Q.substr(0,i)),Q=hA(Q,i+f[0].length,Q.length),A.lastIndex=0,r==Q&&(D[n]=(Mt(0,1,Q.length),Q.substr(0,1)),Q=(zt(1,Q.length+1),Q.substr(1))),r=Q,++n}if(t.length>0){for(P=D.length;P>0&&D[P-1]==\"\";)--P;P<D.length&&(D.length=P)}return D}function _s(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(n=t.e[e],P=c(Ut,Tt,6,n,15,1),y=0;y<n;y++)P[y]=_0(t,e,t.j[e][y]);for(l=1;l<n;l++)for(h=0;h<l;h++)if(r=w.Math.abs(Ze(P[l],P[h])),r<.08||r>yM){for(i=0,f=0,T=0;T<n;T++)T!=l&&T!=h&&(i+=w.Math.abs(Vv(P[l],P[T])),f+=w.Math.abs(Vv(P[h],P[T])));if(Q=i<f?t.n[e][l]:t.n[e][h],dt(t,Q)==1&&(!A||!(t.I[Q]==257||t.I[Q]==129)))return Q}for(g=-1,D=0,s=0;s<n;s++)o=t.j[e][s],L=t.n[e][s],k=NQ(t,L,o),D<k&&(!A||!(t.I[L]==257||t.I[L]==129))&&(D=k,g=L);return g}function Y$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(dt(e,t.a)==1&&(ze(e,t.a)==1||ze(e,t.a)==2)){for(Q=!1,f=0;f<2;f++)for(n=t.p[3*f],A=t.p[1+f],h=t.p[2-f],o=0;o<e.k[A];o++)if(l=e.j[A][o],l!=h&&l!=n){l<n&&(Q=!Q);break}for(ze(e,t.a)==1&&(Q=!Q),P=0,r=0,D=0;D<t.d.length;D++)t.d[D]<180^Q&&(r+=t.c[D],++P);if(P<t.d.length){for(y=c(Kt,t1,6,P,15,1),L=c(Kt,t1,6,P,15,1),s=c(Kt,ie,16,P,0,2),P=0,i=0;i<t.d.length;i++)t.d[i]<180^Q&&(y[P]=t.d[i],L[P]=(t.c[i]*100/r|0)<<16>>16,s[P]=t.e[i],++P);t.d=y,t.c=L,t.e=s}}}function X$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(i=c(F,m,6,t.s,15,1),P=0;P<e.g;P++){for(y=e.k[P]+(e.j[P].length-e.e[P]),s=0,D=0;D<e.j[P].length;D++)if(D<e.k[P]||D>=e.e[P]){for(l=2*A[e.j[P][D]],r=e.n[P][D],dt(e,r)==2&&(r<e.i&&Ee(e.q,r)||++l),o=0;o<s&&!(l<i[o]);o++);for(L=s;L>o;L--)i[L]=i[L-1];i[o]=l,++s}for(AA(t.b[P],P),a1(t.b[P],t.a,A[P]),Q=y;Q<t.s;Q++)a1(t.b[P],t.a+1,0);for(f=0;f<y;f++)a1(t.b[P],t.a+1,i[f])}for(n=e.g;n<t.b.length;n++)for(AA(t.b[n],n),a1(t.b[n],t.a,e.g+1),f=0;f<t.s;f++)a1(t.b[n],t.a+1,0)}function KR(t){var e,A,n,P,r,i,f,D,Q,o;switch(e=null,o=t.c.length,t.e){case 1:for(e=c(Kt,t1,6,2*o,15,1),n=0;n<o;n++)e[n]=t.c[n],e[o+n]=t.c[n];return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[o-1]==180?o-1:o,Q=r-P,e=c(Kt,t1,6,o+Q,15,1),i=0;i<o;i++)e[i]=t.c[i];for(f=P;f<r;f++)e[e.length-1-f+P]=t.c[f];return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[o-1]==90?o-1:o,Q=r-P,e=c(Kt,t1,6,2*o+2*Q,15,1),D=0;D<o;D++)e[D]=t.c[D],e[o+Q+D]=t.c[D];for(A=P;A<r;A++)e[o+Q-1-A+P]=t.c[A],e[e.length-1-A+P]=t.c[A];return e;default:return t.c}}function MA(t,e){var A,n,P,r,i;if(!e||e.r==0||!e.L){t.g=null;return}for(t.g=e,t.r=!1,ut(t.g,1),t.N=7,n=0;n<t.g.g;n++)gt(V(h0(t.g,n),{l:je,m:0,h:3}),0)&&(t.N=15);for(i=0;i<t.g.i;i++)(fe(t.g,i)&F8)!=0&&(t.N=15);for(t.L&&t.N!=7&&ut(t.H,t.N),t.p=0,t.q=0,t.D=c(Pt,it,6,t.g.g,16,1),P=0;P<t.g.g;P++)t.D[P]=ye(t.g,P),t.D[P]&&++t.p;if(t.d=0,t.f=null,t.i=null,t.p!=0){for(r=0;r<t.g.i;r++)(t.D[K(t.g,0,r)]||t.D[K(t.g,1,r)])&&++t.q;for(A=0;A<t.g.r;A++)Wn(t.g,A,t.D[A]);t.f=c(F,m,6,t.g.r,15,1),t.d=Ur(t.g,t.f,!0,!1)}}function JR(t,e){Zg();var A,n,P,r,i,f;r=new Ks(t);try{if(f=new Th,QA(f,qC+R8),Ni(f.a,e??\"\"),QA(f,R8+(\"\"+R8)),QA(f,Yy+t6(t,!0,11)),QA(f,R8),P=r.g.a.length,n=r.f.a.length,QA(f,hM+P+\" \"+n+R8),i=CZ(r),P>0){for(QA(f,JC+R8),A=0;A<r.g.a.length;A++)QA(f,qv(G(r.g,A),i));QA(f,\"M  V30 END REACTANT\"+R8)}if(n>0){for(QA(f,XC+R8),A=0;A<r.f.a.length;A++)QA(f,qv(G(r.f,A),i));QA(f,\"M  V30 END PRODUCT\"+R8)}QA(f,hr+R8),this.a=f.a}catch(D){if(D=_1(D),Yt(D,19))q1();else throw At(D)}}function Z$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(D=null,l=kn(t.R),L=0;L<l.j.a.length;L++)if(l.f[L]){for(r=0,s=G(l.j,L),A=s,n=0,P=A.length;n<P;++n)e=A[n],vs(t,e)&&++r;if(r!=0)if(y=G(l.k,L),D==null&&(D=c(Pt,it,6,t.R.i,16,1)),r==s.length){for(Q=-1,o=Et,i=0;i<s.length;i++)o>t.B[y[i]]&&(o=t.B[y[i]],Q=i);for(;r>0;)D[y[Q]]=!0,Q=cU(Q+2,s.length),r-=2}else{for(f=0;vs(t,s[f]);)++f;for(;!vs(t,s[f]);)f=cU(f+1,s.length);for(;r>0;)for(D[y[f]]=!0,f=cU(f+2,s.length),r-=2;!vs(t,s[f]);)f=cU(f+1,s.length)}}return D}function W$(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(t.b=TA(t.c),r=SE,f=0,Q=r.length;f<Q;++f)n=r[f],Gt(t.b,n);for(s=t.b.Gc(),s.setEditable(!0),IG(t.b,\"\"+Bt(t.e.c)),t.a=TA(t.c),P=IE,i=0,D=P.length;i<D;++i)n=P[i],Gt(t.a,n);for(o=0,A=0;A<jl.length;A++)if(t.e.d==jl[A]){o=A;break}$t(t.a,o),e=B(d(F,1),m,6,15,[8,-2,4,-2,8]),L=B(d(F,1),m,6,15,[8,-2,4,-2,8,-2,8]),iL(t.c,e,L),D0(t.c,he(t.c,\"Text size:\"),1,1),D0(t.c,t.b,3,1),D0(t.c,he(t.c,\"Text style:\"),1,3),D0(t.c,t.a,3,3),t.d=$u(t.c,20,3),Y8(t.d,t.e.e),ke(t.c,t.d,1,5,3,5)}function _$(t,e){var A,n,P;return n=Qb(t,e),A=Ae(t,t.F[0][e])||Ae(t,t.F[1][e]),P=A?16:1,t.I[e]==64?(t.I[e]=P,t.U=0,!0):t.I[e]==32?(t.I[e]=n>4?64:P,t.U=0,!0):t.I[e]==4?(t.I[e]=n>3?32:P,t.U=0,!0):t.I[e]==2&&(t.I[e]=386,t.U&=7,(t.G[e]&128)==0)?!0:t.I[e]==386?(n>2?t.I[e]=4:t.I[e]=P,t.U=0,!0):(384&t.I[e])!=0?(t.I[e]=1,t.U&=7,!0):!A&&n<2?!1:t.I[e]==1?(t.I[e]=2,t.U=0,!0):n<1?!1:t.I[e]==16?(t.I[e]=1,t.U=0,!0):!1}function $$(t,e){var A,n;if(e.j==1){if(A=s5(t,e),!(A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)))return;A==20&&A==t.b&&(t.d=++t.d%3),t.k=A,xD(t.n)}else if(e.j==2){if(t.k==-1)return;if(n=s5(t,e),n!=t.k||t.k==19&&(t.a.U&4)==0||t.k==21&&(t.a.U&8)==0){t.k=-1,xD(t.n);return}if(t.k=-1,n==0||n==1||n==17){xD(t.n),dX(t.a,n);return}t.b=n,xD(t.n),t.b==20?DQ(t.a,t.d==0?101:t.d==1?103:102):t.b==33?Hk(t.a,-1,new dg(t,n)):DQ(t.a,n)}else(e.j==6||e.j==5)&&(A=s5(t,e),A==t.k&&(A=-1),A!=t.f&&(t.f=A,xD(t.n)))}function oi(t,e){var A,n,P,r,i,f;return t.I[e]!=1||e<t.i&&Ee(t.q,e)||(t.G[e]&64)!=0&&(t.q&&e<t.i?TP(t.q,e):0)<7||(A=t.F[0][e],!(A<t.g&&f0(t.q,A))||(t.q&&A<t.g?UA(t.q,A):0)<5)||(n=t.F[1][e],!(n<t.g&&f0(t.q,n))||(t.q&&n<t.g?UA(t.q,n):0)<5)?!1:(P=ZF(t,A,n),r=ZF(t,n,A),(t.q&&A<t.g?UA(t.q,A):0)>5&&(t.q&&n<t.g?UA(t.q,n):0)>5?P+r>2:(i=wb(t,A,n),f=wb(t,n,A),P==2&&f>=1||r==2&&i>=1||i==2&&(r>=1||f>=1)||f==2&&(P>=1||i>=1)))}function a$(t){var e,A,n,P,r,i,f;for(t.L=!0,n=Q5(t),t.P&&h2(t.P,t.f)&&(n=Q5(t)),U2(t,!1)&&g2(t),i=!0;t.U<t.R.g&&i;){for(P=q$(t,n),e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),a1(t.e[e],20,0),!t.cb[e]&&t.bb[e]!=0&&se(t.e[e],at(t.bb[e]<<18,Wt(P[t.bb[e]==1?0:1][t.ab[e]],8))),f=t.db[e],t.eb[e]&&(f==1?f=2:f==2&&(f=1)),se(t.e[e],f<<4);for(A=0;A<t.R.i;A++)se(t.e[K(t.R,0,A)],t.o[A]),se(t.e[K(t.R,1,A)],t.o[A]);if(r=tP(t),t.U==r)break;t.U=r,i=!1,t.P&&h2(t.P,t.f)&&(i=!0,n=Q5(t)),U2(t,!1)&&(i=!0,g2(t))}}function ta(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(e=0;e<t.j.g;e++)if(t.d[e])for(i=!1,f=c(F,m,6,t.j.g,15,1),l=c(F,m,6,t.j.g,15,1),D=c(F,m,6,t.j.g,15,1),f[0]=e,l[e]=-1,D[e]=1,P=0,Q=0;P<=Q&&!i;){for(r=f[P],o=0;o<O(t.j,r)&&!i;o++)if(L=(D[r]&1)==1^dt(t.j,Nt(t.j,r,o))>1,n=_(t.j,r,o),D[n]==0&&L)if(t.d[n]){if((D[r]&1)==1){for(t.d[e]=!1,t.d[n]=!1,t.k+=2,y=r,s=0;s<D[r];s++)A=o1(t.j,n,y),t.e[A]&&(t.e[A]=!1,--t.c),B3(t.j,A,dt(t.j,A)==1?2:dt(t.j,A)-1),n=y,y=l[n];i=!0}}else f[++Q]=n,l[n]=r,D[n]=D[r]+1;++P}}function zA(t,e){J1();var A,n,P,r,i;if((e&256)!=0&&e1(t,\"?\"))return 0;for(n=1;n<=128;n++)if(!e1(t,t0)&&r9(t,a0[n]))return n;if((e&2)!=0){for(P=129;P<=144;P++)if(r9(t,a0[P]))return P}if((e&4)!=0){for(r=146;r<=148;r++)if(r9(t,a0[r]))return r}if((e&1)!=0){for(i=151;i<=152;i++)if(r9(t,a0[i]))return i}if((e&32)!=0&&r9(t,a0[153]))return 153;if((e&8)!=0&&r9(t,a0[154]))return 154;if((e&16)!=0&&r9(t,a0[145]))return 145;if((e&128)!=0&&r9(t,a0[159]))return 159;if((e&64)!=0){for(A=171;A<=190;A++)if(r9(t,a0[A]))return A}return 0}function ea(t,e){var A,n,P,r,i,f,D;if(t.db[e]==1||t.db[e]==2){if(f=!1,e0(t.R,e)==2&&O(t.R,e)==2)try{for(i=0;i<2;i++)if(A=_(t.R,e,i),O(t.R,A)==3){for(P=c(F,m,6,2,15,1),r=0,D=0;D<O(t.R,A);D++)EA(t.R,A,D)==1&&(P[r++]=_(t.R,A,D));t.f[P[0]]>t.f[P[1]]^v6(t,A,P[0],P[1])&&(f=!f)}}catch(Q){if(Q=_1(Q),Yt(Q,19)){t.$[e]=3;return}else throw At(Q)}else{try{n=KX(t,e)}catch(Q){if(Q=_1(Q),Yt(Q,19)){t.$[e]=3;return}else throw At(Q)}for(i=1;i<n.length;i++)for(D=0;D<i;D++)t.f[n[i]]<t.f[n[D]]&&(f=!f)}t.db[e]==1^f?t.$[e]=1:t.$[e]=2}}function Aa(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;for(L=-1,o=0;o<t.k[A];o++)t.o[A][o]==2&&(L=t.j[A][o]);for(r=c(F,m,6,n,15,1),h=c(F,m,6,4,15,1),h[0]=L,h[1]=A,h[2]=e,D=0,Q=0;Q<t.e[e];Q++)i=t.j[e][Q],t.D[i]==1&&(D==0&&(h[3]=i),r[D++]=i);y=!(A<t.g&&f0(t.q,A))&&n==1?1:2,l=c(Kt,t1,6,y,15,1),f=c(Kt,t1,6,y,15,1),s=j1(Kt,[ie,t1],[16,6],15,[y,2],2),!(A<t.g&&f0(t.q,A))&&n==1?(l[0]=0,f[0]=100,s[0][0]=-15,s[0][1]=15):(l[0]=0,l[1]=180,f[0]=50,f[1]=50,s[0][0]=-15,s[0][1]=15,s[1][0]=165,s[1][1]=195),Ft(P,new ZL(l,f,s,h,r,1))}function He(t){var e,A,n,P,r;return t.g!=null?t.g:t.a<32?(t.g=ktt(E1(t.f),Bt(t.e)),t.g):(P=d6((!t.c&&(t.c=jP(E1(t.f))),t.c),0),t.e==0?P:(e=(!t.c&&(t.c=jP(E1(t.f))),t.c).e<0?2:1,A=P.length,n=-t.e+A-e,r=new C0,r.a+=\"\"+P,t.e>0&&n>=-6?n>=0?pD(r,A-Bt(t.e),\".\"):($F(r,e-1,e-1,\"0.\"),pD(r,e+1,PP(qo,0,-Bt(n)-1))):(A-e>=1&&(pD(r,e,\".\"),++A),pD(r,A,\"E\"),n>0&&pD(r,++A,\"+\"),pD(r,++A,\"\"+Fe(E1(n)))),t.g=r.a,t.g))}function na(t){var e,A,n,P,r,i,f;if(n=new LD,Ft(n.a,new ae(\"Solubility values are estimated applying an atom-type based increment system.\",2)),Ft(n.a,new ae(IV,2)),Ft(n.a,new ae(F4,2)),Ft(n.a,new ae(\"Base value = -0.530\",2)),A=c(F,m,6,_f.length,15,1),t)for(Li(t),ut(t,7),e=0;e<t.g;e++){f=-1;try{f=Uy(t,e,2144)}catch(D){if(D=_1(D),!Yt(D,19))throw At(D)}for(i=0;i<_f.length;i++)if(n0(gl[i],f)){++A[i];break}}for(P=new sD(\"#0.000\"),r=0;r<_f.length;r++)A[r]!=0&&e8(n,\"\"+A[r]+\" * \"+Sh(P,_f[r])+\"   AtomType: 0x\"+D5(gl[r]),2);return n}function u6(t){var e,A,n,P,r,i,f,D;for(f=c(Pt,it,6,t.r,16,1),A=0;A<t.r;A++)f[A]=t.D[A]==1&&t.B[A]==0&&t.t[A]==0&&(t.v[A]&b8)==0&&(t.u==null||t.u[A]==null);for(D=c(Pt,it,6,t.r,16,1),i=0;i<t.s;i++){if(n=t.F[0][i],P=t.F[1][i],dt(t,i)!=1){f[n]=!1,f[P]=!1;continue}D[n]&&(f[n]=!1),D[P]&&(f[P]=!1),f[n]&&Ae(t,P)&&t.D[P]!=13&&(f[n]=!1),f[P]&&Ae(t,n)&&t.D[n]!=13&&(f[P]=!1),D[n]=!0,D[P]=!0}for(r=0;r<t.s;r++)f[t.F[0][r]]&&f[t.F[1][r]]&&(f[t.F[0][r]]=!1,f[t.F[1][r]]=!1);for(e=0;e<t.r;e++)D[e]||(f[e]=!1);return f}function Pa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(g=0;g<t.e.length;g++)if(t.e[g]){for(T=!1,n=G(t.j,g),r=0,f=n.length;r<f;++r)e=n[r],t.a[e]|=o0,QX(t,e)&&(T=!0);for(o=G(t.k,g),s=0,h=o.length;s<h;++s)D=o[s],t.c[D]|=o0;if(t.f[g]){for(A=G(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=q0;for(Q=G(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=q0}if(T){for(A=G(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=v8;for(Q=G(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=v8}}for(y=new Zt(t.b);y.a<y.c.a.length;)D=_t(y).a,t.c[D]=0}function ra(t,e,A,n,P){var r,i;return!(X(t.j,A)==6&&w.Math.abs(O(t.j,A)-O(t.d,P))>1||X(t.j,A)==8&&O(t.j,A)==2&&ei(t.j,e,8)>ei(t.d,n,8)||X(t.d,P)==8&&O(t.d,P)==2&&ei(t.j,e,8)<ei(t.d,n,8)||X(t.j,A)==8&&O(t.j,A)==2&&O(t.d,P)==2&&(i=_(t.j,A,0)==e?0:1,r=_(t.d,P,0)==n?0:1,bs(t.p[A][i][3],t.i[P][r][3])!=0)||X(t.j,A)==7&&ei(t.j,e,7)<ei(t.d,n,7)||X(t.d,P)==7&&ei(t.j,e,7)>ei(t.d,n,7)||z9(t.j,o1(t.j,e,A))==3^z9(t.d,o1(t.d,n,P))==3)}function $s(t,e){ni();var A,n,P,r,i,f,D,Q,o,L,s;return A=(YA[0]*((e&QP)>>16)+YA[1]*((e&DP)>>8)+YA[2]*(e&255))/255,i=(YA[0]*((t&QP)>>16)+YA[1]*((t&DP)>>8)+YA[2]*(t&255))/255,P=w.Math.abs(A-i),P>Hf||(f=(HQ(),yR(((e&QP)>>16)/255,((e&DP)>>8)/255,(e&255)/255,null)),D=yR(((t&QP)>>16)/255,((t&DP)>>8)/255,(t&255)/255,null),Q=w.Math.abs(D[0]-f[0]),Q>.5&&(Q=1-Q),s=1-w.Math.max(D[1],f[1]),n=w.Math.abs(i+A-1),o=w.Math.cos(l1*Q*3),L=Hf*w.Math.max(s,w.Math.max(n,o)),P>L)?t:(r=i>A?i+L>1:i-L>0,v5(t,r?A-L:A+L))}function iP(t){var e,A,n,P,r,i,f,D,Q;e=null;try{for(e=new un(new mi((P=A2(t),w0(),P))),D=L1(k1(X1(e)),f1,Et),n=c8(k1(X1(e)),\",\"),Q=j1(qn,[DA,A0],[8,1],5,[D,n.length],2),i=0;(r=X1(e))!=null&&i<D;i++)for(f=c8(k1(r),\",\"),A=0;A<n.length;A++)switch(Xi(n[A],0)){case 105:Q[i][A]=U1(L1(k1(f[A]),f1,Et));break;case 102:Q[i][A]=Te(k1(f[A]));break;case 99:Q[i][A]=kz(Xi(rf(rf(k1(f[A]),\"'\"),'\"'),0))}return Q}catch(o){if(o=_1(o),Yt(o,79))q1();else throw At(o)}return j1(qn,[DA,A0],[8,1],5,[1,1],2)}function jf(t,e,A){var n,P,r,i;if(ut(t.j,1),i=new gU(t.j,1),Ea(t,e,i),t.c==0)return!0;if(A)for(P=0;P<t.j.g;P++)t.d[P]&&X(t.j,P)==7&&(t.f[P]||O(t.j,P)==3&&!t.g[P])&&b0(t.j,P,1);for(t.a=!1,ZJ(t,A),t.j.L&&O_(t),ztt(t,i),gz(t,i),VY(t),A&&ptt(t),IQ(t);ba(t,i,A);)IQ(t);for(;fW(t,i,A);)IQ(t);for(;c$(t,i,A);)IQ(t);for(;t.c!=0;)for(r=0;r<t.j.i;r++)t.e[r]&&(u2(t,r),IQ(t));for(A&&Ua(t,A),t.b-t.k>=2&&ta(t),n=0;n<t.j.g;n++)t.d[n]&&xt(t.j,n)!=0&&(A&&(R1(t.j,n)==1&&rA(t.j,n)||R1(t.j,n)==-1&&X(t.j,n)==5)?b0(t.j,n,0):Je(t.j,n,32),++t.k);return t.b==t.k}function YR(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y;for(this.e=t,this.c=e,this.f=A,this.d=n,this.g=P,this.b=P,this.i=r,Q=new cP,f=0;f<t.g;f++)A[f]==0&&(D=t.D[f]+(t.B[f]<<16),s=Be(Q,U1(D)),s||(s=new nT(this),We(Q,U1(D),s)),s.d=pk(f,s.d),s.d.length<=s.c.length&&(s.a=s.d.length));for(i=0;i<e.g;i++)n[i]==0&&(D=e.D[i]+(e.B[i]<<16),s=Be(Q,U1(D)),s||(s=new nT(this),We(Q,U1(D),s)),s.c=pk(i,s.c),s.c.length<=s.d.length&&(s.a=s.c.length));for(this.a=new n1,y=(L=new oD(Q).a.ad().Tb(),new UD(L));y.a.cd();)s=(o=y.a.dd(),o.jd()),V$(s)||Ft(this.a,s)}function XR(t,e){var A,n,P,r,i;r=0,$A(t.d)?(P=F0(t.p),A=F0(t.o),r|=P<<9,r|=A<<13,r&=-128,g0(t.u,e,1)):($A(t.k)&&(r|=1),$A(t.c)&&(r|=2),$A(t.n)&&(r|=4),$A(t.i)&&(r|=32),$A(t.j)&&(r|=64),$A(t.b)&&(r|=8),$A(t.g)&&(r|=16),F0(t.q)!=0&&(F0(t.q)==1?LA(t.u,e)||(r|=128):F0(t.q)==2?LA(t.u,e)||(r|=256):F0(t.q)==3?eA(t.u,e)||(r|=4194560):F0(t.q)==4?eA(t.u,e)||(r|=KA):F0(t.q)==5&&(eA(t.u,e)||(r|=oP))),F0(t.r)!=0&&(i=F0(t.r)+2,i>7&&(i-=7),n=z9(t.u,e),(i<=2||i!=n)&&(r|=i<<17)),$A(t.e)&&(r|=Nf),$A(t.f)&&(r|=F8)),Xe(t.u,e,yi,!1),Xe(t.u,e,r,!0),Os(t.u,e)}function as(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(P=c(F,m,6,e.r,15,1),D=ne(t,1),Q=ne(t,2),n=0;n<e.r;n++)if(e.D[n]!=0||(e.u==null||e.u[n]==null?null:on((y=e.u[n],w0(),y)))!=null)P[n]=Nn(e,t,n,D,Q);else if(P[n]=A,(e.U&8)!=0){for(f=0;f<e.s;f++)for(o=0;o<2;o++)if(e.F[o][f]==n){if(l=e.F[1-o][f],h=e.v[l]&3,L=!1,h==1||h==2){for(r=0;r<e.s;r++)if(r!=f)for(s=0;s<2;s++)e.F[s][r]==l&&e.F[1-s][r]<n&&(L=!L)}L&&me(e,l,h==1?2:1,(e.v[l]&4)!=0)}}for(i=0;i<e.s;i++)o9(e,t,i,D,Q,P[e.F[0][i]],P[e.F[1][i]],!1);return t.M=t.M&&e.M,t.J=0,t.U=0,P}function ZR(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;this.g=e,this.b=e.a[A],this.d=e.a[n],this.a=A,this.c=n,P=(i=Rk(t.p,this.b),f=Rk(t.p,this.d),D=sL(t.p,this.b),Q=sL(t.p,this.d),o=(i-f)/(i+f),.5*(i+f)*(1+(D==68||Q==68?0:.2*(1-w.Math.exp(-12*o*o))))),r=(L=Tv(t.p,this.b),s=Tv(t.p,this.d),y=hv(t.p,this.b),l=hv(t.p,this.d),h=cv(t.p,this.b),T=cv(t.p,this.d),g=P*P,181.16*L*s*y*l/((w.Math.sqrt(y/h)+w.Math.sqrt(l/T))*g*g*g)),this.e=sL(t.p,this.b),this.f=sL(t.p,this.d),(this.e==68&&this.f==65||this.e==65&&this.f==68)&&(P=P*.8,r*=.5),this.i=P,this.j=r}function ia(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;return o=jB(t.a,e,o1(e,A,n)),r=e.a[A],f=e.a[n],r>f&&(r=(l=U1(f),U1(f=r),l).a),s=f9(B(d(F,1),m,6,15,[1,2,0]),B(d(F,1),m,6,15,[r,f,o]),t),s>=0?V0(t.b[s][3]):(P=e.D[A],i=e.D[n],P>i&&(P=(y=U1(i),U1(i=P),y).a),h=d2(t,e,A,n),Q=f9(B(d(F,1),m,6,15,[0,1]),B(d(F,1),m,6,15,[P,i]),t.a.c),Q>=0?(L=w.Math.pow(tN(t.a.c,Q)/h,6),ax(t.a.c,Q)*L):(D=f9(B(d(F,1),m,6,15,[0,1]),B(d(F,1),m,6,15,[tb(P),tb(i)]),t.a.j),w.Math.pow(10,-(h-yd(t.a.j,D,2))/yd(t.a.j,D,3))))}function fa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H;return A=t.l&8191,n=t.l>>13|(t.m&15)<<9,P=t.m>>4&8191,r=t.m>>17|(t.h&255)<<5,i=(t.h&1048320)>>8,f=e.l&8191,D=e.l>>13|(e.m&15)<<9,Q=e.m>>4&8191,o=e.m>>17|(e.h&255)<<5,L=(e.h&1048320)>>8,S=A*f,x=n*f,N=P*f,tt=r*f,H=i*f,D!=0&&(x+=A*D,N+=n*D,tt+=P*D,H+=r*D),Q!=0&&(N+=A*Q,tt+=n*Q,H+=P*Q),o!=0&&(tt+=A*o,H+=n*o),L!=0&&(H+=A*L),y=S&z0,l=(x&511)<<13,s=y+l,T=S>>22,g=x>>9,k=(N&262143)<<4,v=(tt&31)<<17,h=T+g+k+v,j=N>>18,R=tt>>5,C=(H&4095)<<8,b=j+R+C,h+=s>>22,s&=z0,b+=h>>22,h&=z0,b&=Pn,G0(s,h,b)}function Da(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(j5(e,t.j),r=0,n=0;n<t.d.r;n++)i=e.a==null?NaN:e.a[n],i>1e3&&NZ(t,e,n)&&++r;if(r==0){for(s=16,P=0;P<t.d.r;P++)s>Ct(t.d,P)&&(e.a==null?NaN:e.a[P])>(o=w.Math.min(4,Ct(t.d,P)),400+o*2e3/5)&&(s=Ct(t.d,P));if(s!=16)for(A=0;A<t.d.r;A++)s==Ct(t.d,A)&&(e.a==null?NaN:e.a[A])>(Q=w.Math.min(4,Ct(t.d,A)),400+Q*2e3/5)&&(f=e.k[A],Ct(t.d,A)==1?(D=Z0(e,_(t.d,A,0)),n8(f,2*(D.a-f.a),2*(D.b-f.b),2*(D.c-f.c))):(L=Ct(t.d,A)==0?16:8,n8(f,L*Hn(t.f)-L/2,L*Hn(t.f)-L/2,L*Hn(t.f)-L/2)),++r)}return r!=0&&GU(e),r}function WR(t){var e,A,n,P,r,i,f;for(i=c(F,m,6,t.U+1,15,1),A=0;A<t.R.g;A++)De(t.R,A)==0&&(t.db[A]==1?++i[t.f[A]]:t.db[A]==2&&--i[t.f[A]]);for(P=0;P<t.R.i;P++)dt(t.R,P)==1&&gP(t.R,P)==0&&(t.o[P]==1?(++i[t.f[K(t.R,0,P)]],++i[t.f[K(t.R,1,P)]]):t.o[P]==2&&(--i[t.f[K(t.R,0,P)]],--i[t.f[K(t.R,1,P)]]));for(f=1;f<=t.U;f++)if(i[f]!=0){if(r=i[f]<0,r){for(e=0;e<t.R.g;e++)De(t.R,e)==0&&(t.db[e]==1?t.db[e]=2:t.db[e]==2&&(t.db[e]=1));for(n=0;n<t.R.i;n++)dt(t.R,n)==1&&gP(t.R,n)==0&&(t.o[n]==1?t.o[n]=2:t.o[n]==2&&(t.o[n]=1))}return r}return!1}function ua(t,e){var A,n,P,r,i,f,D,Q,o,L;for(t.j=0,P=0;P<e.g.a.length+e.f.a.length;P++)for(D=Nv(t.c,P),A=0;A<D.g;A++)gt(V(D.C[A],Pe),0)?D.A[A]=0:t.j<w.Math.abs(D.A[A])&&(t.j=w.Math.abs(D.A[A]));for(L=c(Pt,it,6,t.j+1,16,1),r=0;r<e.g.a.length;r++)for(o=G(e.g,r),A=0;A<o.g;A++)f=w.Math.abs(o.A[A]),f!=0&&(L[f]=!0);for(i=0;i<e.f.a.length;i++)for(Q=G(e.f,i),A=0;A<Q.g;A++)f=w.Math.abs(Q.A[A]),f!=0&&(L[f]?L[f]=!1:Q.A[A]=0);for(n=0;n<e.g.a.length;n++)for(o=G(e.g,n),A=0;A<o.g;A++)f=w.Math.abs(o.A[A]),f!=0&&L[f]&&(o.A[A]=0)}function Qa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(l=null,l=new Gr,GA(l,t.f),i=c(Pt,it,6,t.f.g,16,1),T=e.Tb();T.cd();)if(h=T.dd(),y=null,k=h.b,MA(l,k),CA(l,4,8)!=0&&(y=l.F),y)for(s=new Zt(y);s.a<s.c.a.length;){for(L=_t(s),g=0,n=L,P=0,r=n.length;P<r;++P)A=n[P],i[A]&&++g;if(g<=1){for(D=h.c,t.a?D=!1:t.a=!0,Q=new VP(t.f,L.length,D),o=0;o<L.length;o++)A=L[o],D&&Wn(t.f,A,!0),Q.k[o]=256,Q.e[o]=A,Q.a[o]=mt(h.b,o)/h.a,Q.b[o]=Rt(h.b,o)/h.a,i[A]=!0,t.b[A]=!0;for(f=0;f<k.i;f++)t.c[o1(t.f,L[k.F[0][f]],L[k.F[1][f]])]=!0;CP(t.d,Q)}}return i}function _R(t,e,A,n,P){var r,i,f,D,Q;for(this.D=t,this.u=e,this.I=A,this.B=n,this.L=P,KW(this),qb(this),this.k=WW(this),this.j=JX(this.k),this.r=0,Q=(f=new J8(new K8(new br(this.k[0]).a).b),new jr(f));Nr(Q.a.a);)D=(i=H9(Q.a),i.hd()),r=Be(this.k[0],D),this.r+=w.Math.min(r[0].length,r[1].length);this.p=this.r==this.D.g&&this.D.g==this.u.g,this.G=c(F,m,6,this.D.g,15,1),this.w=c(F,m,6,this.u.g,15,1),this.H=c(Pt,it,6,Ur(this.D,this.G,!1,!1),16,1),this.A=c(Pt,it,6,Ur(this.u,this.w,!1,!1),16,1),this.q=iR(this),this.g=7,this.K=0}function $R(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;if(t.o&&ott(t,e),r=null,t.e!=null)for(f=t.e,Q=0,L=f.length;Q<L;++Q)i=f[Q],w2(i,e,null,0),r=r?RQ(r,i.v):i.v;if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],w2(i,e,null,0),r=r?RQ(r,i.v):i.v;if(t.g)for(l=new Zt(t.g);l.a<l.c.a.length;)y=_t(l),h=y.Jb(e),Yu(t.p,h),r=r?RQ(r,h):h;if(!r)return null;if(P=a5(t),T=new ry(r,A,P,n),!(T.c==1&&T.a==0&&T.b==0)){if(Gu(T,t.p),t.e!=null)for(D=t.e,o=0,s=D.length;o<s;++o)i=D[o],XU(i,T);if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],XU(i,T);return T}return null}function ty(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(D=pS[n],f=1,y=n==4?w.Math.exp(w.Math.log(.01)/D):1,P=t.d.r*t.d.r,s=c(Ut,Tt,6,10,15,1),L=0,o=0;o<D&&!(gt(t.n,0)&&(q1(),I1(E1(Date.now()),t.n)));o++){for(n!=0&&o%10==0&&jtt(t,e),Q=0;Q<P&&!(gt(t.n,0)&&(q1(),I1(E1(Date.now()),t.n)));Q++)l=null,l=G(t.j,Bt(Hn(t.f)*t.j.a.length)),l.g&&!t.k[l.vd()]&&(i=l.ud(e,f),i&&GU(e));if(j5(e,t.j),s[L++]=e.e,L==10&&(L=0),o>10){for(r=0,T=s,g=0,k=T.length;g<k;++g)h=T[g],r+=h;if(r/=10,e.e>r)break}A.e>e.e&&(e2(A,e),HT(A,e)),f*=y}e.e>A.e&&(e2(e,A),HT(e,A))}function aR(){aR=v1,DS=B(d(Ut,1),Tt,6,15,[5.55,15,15,15,15,15,15,15,15,FA,FA,FA,FA,FA,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,FA,FA,7.1,oe,oe,17.78,cr,3.82,6.66,6.66,7.78,11.68,FA,6.66,FA,FA,oe,oe,oe,oe,oe,oe,oe,oe,oe,oe,FA,FA,11.68,11.68,11.68,oe,20.3,cr,cr,Yf,Yf,cr,12.22,15.56,Yf,FA,10,cr,oe,16.66,Yf,15.56,cr,15.56,Yf,cr,12.22,Yf,cr,18.88,cr,cr,12.22,FA,FA,FA,9.38,oe,6.66,oe,oe,10,oe,oe,FA,oe,oe,4.44,4.44,10,4.44,16.66,oe,oe,oe,oe,6.66,10,FA,oe,10,Yf,10,10,10,6.68,5.2,6.68,11.68,10.5])}function oa(t,e){var A,n,P,r,i,f,D,Q,o,L;if(eO(t.D[e]))return 0;if(t.D[e]==1)return t.k[e]==0?0:ii(t.D[t.j[e][0]])?-1:1;if(L=t.t[e],D=t.e[e]-P0(t,e)+xt(t,e),t.D[e]!=1&&t.D[e]!=15&&(ii(t.D[e])?L+=D:L-=D),t.k[e]==0)return L;for(o=0;o<t.k[e];o++)r=t.j[e][o],A=Z8(t,t.n[e][o])?1:t.o[e][o],ii(t.D[e])?ii(t.D[r])||(L+=A):ii(t.D[r])?L-=A:t.D[e]!=t.D[r]&&(QB(t.D[e]).a<QB(t.D[r]).a?L+=A:L-=A);if(e<t.g&&PN(t.q,e)){for(n=0,P=0,f=0,Q=0;Q<t.k[e];Q++)Z8(t,t.n[e][Q])&&(i=t.D[t.j[e][Q]],i==6?++P:Pi(i)?++f:++n);t.D[e]==6?n>1?--L:f>1&&++L:rA(t,e)?n+P>1&&--L:f+P>1&&++L}return L}function Q6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(l=c(F,m,6,16,15,1),A=c(Ut,Tt,6,16,15,1),r=c(Ut,Tt,6,2,15,1),n=0,o=0;o<2;o++)for(P=t.F[o][e],L=0;L<t.k[P];L++)if(D=t.n[P][L],D!=e){if(n==4)return 0;f=t.j[P][L],l[n]=16,t.p[f]!=0&&(l[n]+=(t.v[f]&gn)!=0?1:4),(t.G[e]&64)!=0&&(t.G[D]&64)!=0&&(s=As(t.q,e,D),s!=-1&&(l[n]+=wh(t.q,s)?64:6)),A[n++]=pA(t.K[P].a,t.K[P].b,t.K[f].a,t.K[f].b)}for(r[0]=_0(t,t.F[0][e],t.F[1][e]),r[0]<0?(r[1]=r[0]+l1,i=!1):(r[1]=r[0],r[0]=r[1]-l1,i=!0),y=0,Q=0;Q<n;Q++)A[Q]>r[0]&&A[Q]<r[1]?y-=l[Q]:y+=l[Q];return i?-y:y}function tp(t){var e;if(this.e=t.e,t.a!=null)for(this.a=c(Kt,t1,6,t.a.length,15,1),e=0;e<this.a.length;e++)this.a[e]=360-t.a[this.a.length-e-1]<<16>>16;if(t.d!=null)for(this.d=j1(Kt,[ie,t1],[16,6],15,[t.d.length,2],2),e=0;e<this.d.length;e++)this.d[e][0]=360-t.d[this.a.length-e-1][1]<<16>>16,this.d[e][1]=360-t.d[this.a.length-e-1][0]<<16>>16;if(t.c!=null)for(this.c=c(Kt,t1,6,t.c.length,15,1),e=0;e<this.c.length;e++)this.c[e]=t.c[this.c.length-e-1];if(t.b!=null)for(this.b=c(E,I,6,t.b.length,15,1),e=0;e<this.b.length;e++)this.b[e]=t.b[this.b.length-e-1]}function Ua(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;for(A=0;A<t.j.g;A++)if(ut(t.j,1),X(t.j,A)==7&&R1(t.j,A)==1&&e0(t.j,A)==1&&!CJ(t,A,e))for(f=!1,D=c(F,m,6,t.j.g,15,1),h=c(F,m,6,t.j.g,15,1),Q=c(F,m,6,t.j.g,15,1),D[0]=A,h[A]=-1,Q[A]=1,r=0,o=0;r<=o&&!f;){for(i=D[r],L=0;L<O(t.j,i)&&!f;L++)if(s=(Q[i]&1)==0^dt(t.j,Nt(t.j,i,L))>1,P=_(t.j,i,L),Q[P]==0&&s)if(X(t.j,P)==7&&e0(t.j,P)==0&&O(t.j,P)==2){if((Q[i]&1)==0){for(b0(t.j,A,0),l=i,y=0;y<Q[i];y++)n=o1(t.j,P,l),B3(t.j,n,dt(t.j,n)==1?2:dt(t.j,n)-1),P=l,l=h[P];f=!0}}else D[++o]=P,h[P]=i,Q[P]=Q[i]+1;++r}}function La(t,e){if(e<128)t.push((e&127)<<24>>24);else if(e<O1)t.push((e>>6&31|192)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<o0)t.push((e>>12&15|224)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<KA)t.push((e>>18&7|240)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<wn)t.push((e>>24&3|248)<<24>>24),t.push((e>>18&63|128)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else throw At(new ZP(\"Character out of range: \"+e))}function sa(t,e,A){var n,P,r,i,f;return X(t.R,e)!=6&&X(t.R,e)!=7||(P=_(t.R,e,0),r=_(t.R,e,1),e0(t.R,P)!=1||e0(t.R,r)!=1)||O(t.R,P)==1||O(t.R,r)==1||Ct(t.R,P)>3||Ct(t.R,r)>3||(i=new Ff(t.R,t.f,e,P),i.f&&A==1)||(f=new Ff(t.R,t.f,e,r),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&i.c&&(t.W[e]=!0),f.f&&f.c&&(t.W[e]=!0)),n=t.jb?UY(t,i,f):oJ(i,f),A==1?t.db[e]=n:A==2&&(i.f&&(n==1?se(t.e[i.b],t.f[P]):se(t.e[i.d],t.f[P])),f.f&&(n==2?se(t.e[f.b],t.f[r]):se(t.e[f.d],t.f[r]))),!0)}function ey(t,e,A){var n,P,r,i,f,D,Q,o,L,s;if(Q=t.K[e],i=t.n[A],(fe(t.g,A)&Nf)!=0){if(D=cu(t.H,e),P=cu(t.g,A),r=fe(t.g,A)&127,D!=P&&!(D==1&&(r&1)!=0)&&!(D==2&&(r&2)!=0)&&!(D==4&&(r&4)!=0)&&!(D==32&&(r&32)!=0)&&!(D==64&&(r&64)!=0)&&!(D==16&&(r&16)!=0)&&!(D==8&&(r&8)!=0))return!1;Q&=-128,i&=-128}if((Q&~i)!=0)return!1;if(s=(fe(t.g,A)&NP)>>17,s!=0){if(t.H.L&&s==(fe(t.H,A)&NP)>>17)return!0;if(s<=2)return o=z9(t.H,e),s==1?o>=8&&o<=12:o>=12;for(n=!1,L=kn(t.H),f=0;f<L.j.a.length;f++)if(G(L.k,f).length==s&&Pf(L,f,e)){n=!0;break}if(!n)return!1}return!0}function ya(t,e,A,n,P,r,i,f,D,Q){var o,L,s,y,l,h,T,g,k,v,b,j,R,C;t!=e&&(o=t9(t,e),!(D[o[0]][o[1]]&&D[o[0]][o[1]].a.length==1)&&(C=.866,L=.5,(Q.G[i]&64)!=0&&(b=Q.q&&i<Q.i?TP(Q.q,i):0,b<6&&(C=0,L=1)),y=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),j=f.a[A]*w.Math.sin(P),R=f.a[n]*w.Math.sin(r),l=j+R,h=j-R*L,T=R*C,k=w.Math.sqrt(y*y+h*h+T*T),g=w.Math.sqrt(y*y+l*l),v=c(F,m,6,2,15,1),v[0]=Q.F[0][i],v[1]=Q.F[1][i],s=D[o[0]][o[1]],s?(s.a[0]=w.Math.min(s.a[0],k),s.a[1]=w.Math.min(s.a[1],g)):D[o[0]][o[1]]=new is(o,v,k,g,3)))}function U9(t,e){var A,n,P,r,i,f,D;for(f=(e.U&15)!=0,D=e.U&248,!t.g&&(t.g=new n2),(t.e&2)!=0&&O5(e,!1),t.f=e,ut(t.f,7),t.d=new v7,t.b=c(Pt,it,6,t.f.r,16,1),t.c=c(Pt,it,6,t.f.s,16,1),t.i=c(F,m,6,t.f.r,15,1),A=0;A<t.f.r;A++)t.i[A]=R1(t.f,A);for((t.e&12)!=0&&za(t),(t.e&1)==0&&Vo&&Qa(t,Vo),w1t(t),fp(t),M_(t),fp(t),r=new Zt(t.d);r.a<r.c.a.length;)n=_t(r),aZ(n);for(Ma(t),itt(t),EJ(t),vO(t),zG(t),KG(t),P=new Zt(t.d);P.a<P.c.a.length;)for(n=_t(P),i=0;i<n.e.length;i++)de(t.f,n.e[i],n.a[i]),Ve(t.f,n.e[i],n.b[i]),Yn(t.f,n.e[i],0);f&&(TD(t.f,D),hf(t.f)),t.a&&s3(t.f)}function Ay(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(L=0,i=c(Pt,it,6,t.a.g,16,1),n=e,P=0,r=n.length;P<r;++P)A=n[P],A!=-1&&(i[A]=!0);for(s=c(Pt,it,6,t.a.i,16,1),T=0;T<t.b.i;T++)if(l=K(t.b,0,T),h=K(t.b,1,T),!(t.b.L&&(ye(t.b,l)||ye(t.b,h)))){if(f=e[l],D=e[h],wO(t.b,T),f==-1||D==-1){(f!=-1||D!=-1)&&(L+=J5(t.b,T));continue}if(o=o1(t.a,f,D),o==-1){L+=J5(t.b,T);continue}s[o]=!0,L+=rF(t.b,T)==rF(t.a,o)?0:1}for(Q=0;Q<t.a.i;Q++)t.a.L&&(ye(t.a,K(t.a,0,Q))||ye(t.a,K(t.a,1,Q)))||s[Q]||(L+=J5(t.a,Q));for(y=0;y<t.b.g;y++)v0(t.b,y)!=0&&(L+=MY(t,y,e));return-L}function la(t){if(!t)return 0;var e=0;return t.noTabus&&(e|=1),t.showAtomNumber&&(e|=2),t.showBondNumber&&(e|=4),t.highlightQueryFeatures&&(e|=8),t.showMapping&&(e|=16),t.suppressChiralText&&(e|=32),t.suppressCIPParity&&(e|=64),t.suppressESR&&(e|=128),t.noCarbonLabelWithCustomLabel&&(e|=g8),t.noAtomCustomLabels&&(e|=o0),t.showSymmetryAny&&(e|=768),t.showSymmetrySimple&&(e|=256),t.showSymmetryStereoHeterotopicity&&(e|=512),t.noImplicitAtomLabelColors&&(e|=Qe),t.noStereoProblem&&(e|=O1),t.noColorOnESRAndCIP&&(e|=S0),t.noImplicitHydrogen&&(e|=je),t.drawBondsInGray&&(e|=Gn),e}function Ui(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;for(s=!1,P.a=0,P.b=0,n>0?r=S6:r=I6,l=_0(t.L,e,A),o=0;o<O(t.L,e);o++)i=Nt(t.L,e,o),f=l,K(t.L,0,i)==e?L=K(t.L,1,i):L=K(t.L,0,i),L!=A&&(y=_0(t.L,e,L),f<y&&(f+=m0),D=f-y,n>0?(D<l1&&(s=!0),D>S6&&(D=S6),D<.523598776&&(D=.523598776),D<=r&&(r=D,Q=t.T*w.Math.tan(r-HA)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))):(D>=l1&&(s=!0),D<I6&&(D=I6),D>5.759586531&&(D=5.759586531),D>=r&&(r=D,Q=t.T*w.Math.tan(4.712388981-r)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))));return s}function ha(t,e,A){var n,P,r,i,f,D;for(n=c(F,m,6,4,15,1),f=0;f<Ct(t.R,e);f++)n[f]=_(t.R,e,A[f]);for(Ct(t.R,e)==3&&(n[3]=e),P=j1(Ut,[c0,Tt],[15,6],15,[3,3],2),i=0;i<3;i++)P[i][0]=mt(t.R,n[i+1])-mt(t.R,n[0]),P[i][1]=Rt(t.R,n[i+1])-Rt(t.R,n[0]),P[i][2]=oA(t.R,n[i+1])-oA(t.R,n[0]);return D=c(Ut,Tt,6,3,15,1),D[0]=P[0][1]*P[1][2]-P[0][2]*P[1][1],D[1]=P[0][2]*P[1][0]-P[0][0]*P[1][2],D[2]=P[0][0]*P[1][1]-P[0][1]*P[1][0],r=(P[2][0]*D[0]+P[2][1]*D[1]+P[2][2]*D[2])/(w.Math.sqrt(P[2][0]*P[2][0]+P[2][1]*P[2][1]+P[2][2]*P[2][2])*w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])),r>0?1:2}function ep(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(ut(t,7),ut(e,7),this.c=t,this.d=new Ci,n=0;n<t.i;n++)tr(this.d,new p5(t,n));for(A=0;A<e.i;A++)o=new p5(e,A),D=(f=u9(this.d,o),f<0?-1:f),D==-1?(o.i=(Dr(),Fl),tr(this.d,o)):KZ(I9(this.d,D),o);for(i=this.d.d.a.length-1;i>=0;i--)o=I9(this.d,i),o.i!=(Dr(),ml)?I9(this.d,i).i==So&&uU(this.d,i):o.i=kl;for(this.b=c(F,m,6,t.g,15,1),r=0;r<t.g;r++)for(Q=0;Q<e.g;Q++)if(w.Math.abs(e.A[Q])==w.Math.abs(t.A[r])){P=(s=En(t,r),s+en(t,r,s,t.D[r])-G1(t,r)-(L=En(e,Q),L+en(e,Q,L,e.D[Q])-G1(e,Q))),this.b[r]=P>0?P:0;break}this.e=new Gr}function Ap(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;for(f=0;f<A;f++)if(n[f]!=-1&&t.e[f]>3&&(t.v[f]&wn)!=0){for(h=0,s=-1,L=-1,o=0;o<t.e[f];o++)P[t.n[f][o]]!=-1?++h:t.o[f][o]==1&&q9(t,t.n[f][o])&&t.F[0][t.n[f][o]]==f&&(s=t.n[f][o],L=t.j[f][o]);if(s!=-1&&h>=3){for(r=pA(t.K[f].a,t.K[f].b,t.K[L].a,t.K[L].b),y=10,l=-1,Q=0;Q<t.e[f];Q++)t.o[f][Q]==1&&(!q9(t,t.n[f][Q])||t.F[0][t.n[f][Q]]==f)&&P[t.n[f][Q]]!=-1&&(i=w.Math.abs(Ze(r,_0(t,f,t.j[f][Q]))),y>i&&(y=i,l=t.n[f][Q]));l!=-1&&(D=P[l],g0(e,D,t.I[l]==257?129:257),t.F[0][l]!=f&&(mD(e,1,D,n[t.F[0][l]]),mD(e,0,D,n[f])))}}}function np(t){var e,A,n,P;for(_D.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)if(n=(Mt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(zt(A+1,t.length+1),t.substr(A+1)):(Mt(A+1,e,t.length),t.substr(A+1,e-(A+1))),e1(n,\"x1\"))try{this.i[0].a=sn(P)}catch(r){if(r=_1(r),!Yt(r,42))throw At(r)}else if(e1(n,\"y1\"))try{this.i[0].b=sn(P)}catch(r){if(r=_1(r),!Yt(r,42))throw At(r)}else if(e1(n,\"x2\"))try{this.i[1].a=sn(P)}catch(r){if(r=_1(r),!Yt(r,42))throw At(r)}else if(e1(n,\"y2\"))try{this.i[1].b=sn(P)}catch(r){if(r=_1(r),!Yt(r,42))throw At(r)}}function o6(t,e,A){var n,P,r,i,f,D;if(e.l==0&&e.m==0&&e.h==0)throw At(new I8(\"divide by zero\"));if(t.l==0&&t.m==0&&t.h==0)return A&&(zn=G0(0,0,0)),G0(0,0,0);if(e.h==B8&&e.m==0&&e.l==0)return KK(t,A);if(D=!1,e.h>>19!=0&&(e=Ai(e),D=!D),i=xZ(e),r=!1,P=!1,n=!1,t.h==B8&&t.m==0&&t.l==0)if(P=!0,r=!0,i==-1)t=_g((ti(),gc)),n=!0,D=!D;else return f=R5(t,i),D&&rs(f),A&&(zn=G0(0,0,0)),f;else t.h>>19!=0&&(r=!0,t=Ai(t),n=!0,D=!D);return i!=-1?az(t,i,D,r,A):_T(t,e)<0?(A&&(r?zn=Ai(t):zn=G0(t.l,t.m,t.h)),G0(0,0,0)):v_(n?t:G0(t.l,t.m,t.h),e,D,r,P,A)}function v2(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(i=t.e,D=e.e,i==0)return e;if(D==0)return t;if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],g1),n=V(e.a[0],g1),i==D?(o=at(A,n),l=Ot(o),y=Ot(j0(o,32)),y==0?new RA(i,l):new le(i,2,B(d(F,1),m,6,15,[l,y]))):(Ce(),ku(i<0?Y1(n,A):Y1(A,n),0)?be(i<0?Y1(n,A):Y1(A,n)):mP(be(E0(i<0?Y1(n,A):Y1(A,n)))));if(i==D)s=i,L=r>=f?HL(t.a,r,e.a,f):HL(e.a,f,t.a,r);else{if(P=r!=f?r>f?1:-1:sQ(t.a,e.a,r),P==0)return Ce(),vr;P==1?(s=i,L=bL(t.a,r,e.a,f)):(s=D,L=bL(e.a,f,t.a,r))}return Q=new le(s,L.length,L),Cn(Q),Q}function ZQ(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(t.D.d.a.length==t.t)return null;L=c(F,m,6,t.v.length,15,1),n=c(F,m,6,t.u.length,15,1),P=0;do{if(P++==64)return null;if(e&&t.D.d.a.length==0){for(o=0;o<t.u.length;o++)n[o]=Dz(t.u[o]);for(A=Pr(t.i,n),Q=0;Q<t.v.length;Q++)L[Q]=A.a[Q]}else if(t.b){for(D=P/64,o=0;o<t.u.length;o++)n[o]=OK(t.u[o],Hn(t.c),D);for(A=Pr(t.i,n),Q=0;Q<t.v.length;Q++)L[Q]=wJ(A,Q,Hn(t.c),D)}else{for(f=0;f<t.u.length;f++)n[f]=FQ(t.c,t.u[f].b.length);for(i=0;i<t.v.length;i++)L[i]=FQ(t.c,t.v[i].d.length)}s=Xu(t,L,n)}while(r=u9(t.D,s),(r<0?-1:r)!=-1);return s}function ny(t,e,A){var n,P,r,i,f;if(e==A||t.a[e]!=t.a[A]||t.o[e]!=0&&(t.o[e]==3||t.o[A]==3||t.p[e]^t.o[e]!==t.o[A]||t.k[e]!==t.k[A]||t.j[e]!==t.j[A])||(n=o1(t.i,e,A),n!=-1&&(dt(t.i,n)==1&&t.c[n]!=0||dt(t.i,n)==2&&t.c[n]==1)))return!1;if(e0(t.i,e)==1&&!mn(t.i,e)){for(P=-1,f=0;f<O(t.i,e);f++)if(_(t.i,e,f)!=A&&EA(t.i,e,f)==2){P=Nt(t.i,e,f);break}for(r=-1,i=0;i<O(t.i,A);i++)if(_(t.i,A,i)!=e&&EA(t.i,A,i)==2){r=Nt(t.i,A,i);break}if(P!=-1&&t.c[P]!=0&&t.d[P]^t.c[P]===t.c[r])return!1}return!0}function Ta(t){var e,A,n,P,r,i,f;r=fe(t.u,t.a),n=c1(t.u,t.a)==8||Z8(t.u,t.a)?6:dt(t.u,t.a),((r&1)!=0||n==1)&&yA(t.k,!0),((r&2)!=0||n==2)&&yA(t.c,!0),((r&4)!=0||n==3)&&yA(t.n,!0),((r&32)!=0||n==4)&&yA(t.i,!0),((r&64)!=0||n==5)&&yA(t.j,!0),((r&8)!=0||n==6)&&yA(t.b,!0),((r&16)!=0||n==0)&&yA(t.g,!0),(r&Nf)!=0&&yA(t.e,!0),(r&F8)!=0&&yA(t.f,!0),f=r&384,e=r&Qo,f==128?$t(t.q,1):e==KA?$t(t.q,4):f==256?$t(t.q,e==0?2:3):$t(t.q,e==0?0:5),i=(r&NP)>>17,$t(t.r,i==0?0:i<=2?i+5:i-2),(r&d8)!=0?(yA(t.d,!0),P=(r&7680)>>9,A=(r&jy)>>13,$t(t.p,P),wT(t,P),$t(t.o,A)):$t(t.o,0),Aj(t)}function Pp(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(Mk.call(this,t),this.f=P,this.g=A,this.i=c(Kt,ie,16,A.length,0,2),this.d=c(Kt,ie,16,A.length,0,2),this.e=c(Ut,c0,15,A.length,0,2),f=c(Kt,DA,38,A.length,0,3),i=0;i<A.length;i++)s=A[i].d,this.i[i]=hL(s,s.length),D=A[i].c,this.d[i]=hL(D,D.length),this.e[i]=c(Ut,Tt,6,this.i[i].length,15,1),f[i]=A[i].e;for(this.a=c(F,m,6,A.length,15,1),o=c(Pt,it,6,e.length,16,1),r=0;r<A.length;r++)y1t(this,A[r],r,o,n,f[r]);for(Q=0;Q<e.length;Q++)if(!o[Q])for(L=0;L<e[Q].c.length;L++)wD(this,e[Q].e[e[Q].c[L]],Z0(e[Q].b[n[Q]],e[Q].c[L]));this.c=new n1}function Py(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T;for(r=c(F,u0,7,t.j.a.length,0,2),Q=0;Q<t.j.a.length;Q++)for(r[Q]=c(F,m,6,G(t.j,Q).length,15,1),o=0;o<G(t.j,Q).length;o++)r[Q][o]=-1;for(h=c(F,m,6,t.i.i,15,1),y=0;y<t.k.a.length;y++)if(l=G(t.k,y),l.length==3||l.length>=5&&l.length<=7)for(D=0;D<l.length;D++)f=l[D],O(t.i,K(t.i,0,f))==3&&O(t.i,K(t.i,1,f))==3&&(h[f]>0?(r[h[f]>>>16][h[f]&32767]=y,r[y][D]=h[f]>>>16):h[f]=(y<<16)+g8+D);for(i=c(Pt,it,6,t.j.a.length,16,1),T=0,L=-1;T>L;)for(L=T,s=0;s<t.j.a.length;s++)i[s]||n1t(t,s,r,i,e,A,n,P)&&(i[s]=!0,++T)}function ca(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(A<2)return A;for(j=c(Pt,c0,12,A,0,2),l=1;l<A;l++)j[l]=c(Pt,it,6,l,16,1);for(i=Qn(t.V,24*t.ab),P=1;P<t.V.r;P++)for(r=0;r<P;r++)D=mt(t.V,r)-mt(t.V,P),Q=Rt(t.V,r)-Rt(t.V,P),f=w.Math.sqrt(D*D+Q*Q),f<co*i&&(L=e[P],s=e[r],L!=s&&(L>s?j[L][s]=!0:j[s][L]=!0));for(C=c(F,m,6,A,15,1),o=0;o<A;o++)C[o]=o;for(b=0,y=1;y<A;y++)for(g=0;g<y;g++)if(j[y][g]&&(h=C[y],T=C[g],h!=T))for(++b,R=w.Math.min(h,T),v=w.Math.max(h,T),k=0;k<A;k++)C[k]==v?C[k]=R:C[k]>v&&--C[k];for(n=0;n<t.V.r;n++)e[n]=C[e[n]];return A-b}function WQ(t,e,A){var n,P,r,i,f,D,Q,o,L;return t==null?null:(D=t,o=null,Q=null,L=null,f=null,n=t.indexOf(p0(35)),n==-1?D=t:(D=(Mt(0,n,t.length),t.substr(0,n)),P=t.indexOf(p0(35),n+1),P==-1?o=(zt(n+1,t.length+1),t.substr(n+1)):(o=(Mt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(p0(35),P+1),r==-1?Q=(zt(P+1,t.length+1),t.substr(P+1)):(Q=(Mt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=t.indexOf(p0(35),r+1),i==-1?L=(zt(r+1,t.length+1),t.substr(r+1)):(L=(Mt(r+1,i,t.length),t.substr(r+1,i-(r+1))),f=(zt(i+1,t.length+1),t.substr(i+1)))))),Op(D,o,Q,L,f,e,A))}function U6(t,e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g;for(e!=n&&(T=t.K[e].a-t.K[n].a,g=t.K[e].b-t.K[n].b,f=w.Math.sqrt(T*T+g*g)),D=e,o=fQ(t,e)!=3,h=1;h<A;h++){for(s=t.K[D].a+f*w.Math.sin(r),y=t.K[D].b+f*w.Math.cos(r),l=-1,L=0;L<t.r;L++)if(w.Math.abs(s-t.K[L].a)<4&&w.Math.abs(y-t.K[L].b)<4){l=L;break}l==-1&&(l=te(t,s,y,0),t.K[l].a=s,t.K[l].b=y,t.K[l].c=0),Q=mm(t,D,l),Q==-1&&(Q=J0(t,D,l,Ae(t,D)||Ae(t,l)?16:1),P&&(o&&fQ(t,t.F[0][Q])<4&&fQ(t,t.F[1][Q])<3&&(t.I[Q]=2),o=!o)),D=l,r+=i}Q=mm(t,D,n),Q==-1&&(Q=J0(t,D,n,Ae(t,D)||Ae(t,n)?16:1)),P&&o&&fQ(t,t.F[0][Q])<4&&fQ(t,t.F[1][Q])<4&&(t.I[Q]=2)}function rp(t){var e,A,n,P,r,i,f,D,Q,o;Om();var L,s;for(ut(t,7),this.a=c(Oe,uA,6,t.s,15,1),this.b=c(Oe,uA,6,t.s,15,1),L=0;L<t.s;L++)s=(e=t.F[0][L],A=t.F[1][L],n=t.D[e],P=t.D[A],r=t.k[e],i=t.k[A],IJ(dt(t,L),L<t.i&&Ee(t.q,L),L<t.i&&(q8(t.q,L)||t.I[L]==8),n,P,fk(t,e),fk(t,A),r,i,!1)),s==-1?(this.a[L]=(f=X(t,t.F[0][L]),D=X(t,t.F[1][L]),(f<(k2(),Xf).length?Xf[f]:f<JA.length?lo*JA[f]:Ny)+(D<Xf.length?Xf[D]:D<JA.length?lo*JA[D]:Ny)),this.b[L]=(Q=X(t,t.F[0][L]),o=X(t,t.F[1][L]),(Q<Xf.length?Q4:.125)+(o<Xf.length?Q4:.125))):(this.a[L]=s==-1?2.000499963760376:a4[s],this.b[L]=s==-1?1:tc[s])}function ry(t,e,A,n){var P,r,i,f;hU(this),e?(n&Fy)==0?W9(e,t.c,t.d)&&W9(e,t.c+t.b,t.d+t.a)||((t.b>e.b||t.a>e.a)&&(r=e.b/t.b,f=e.a/t.a,this.c=w.Math.min(r,f)),t.c*this.c<e.c?this.a=e.c-t.c*this.c:(t.c+t.b)*this.c>e.c+e.b&&(this.a=e.c+e.b-(t.c+t.b)*this.c),t.d*this.c<e.d?this.b=e.d-t.d*this.c:(t.d+t.a)*this.c>e.d+e.a&&(this.b=e.d+e.a-(t.d+t.a)*this.c)):(r=e.b/t.b,f=e.a/t.a,i=n&d1,i==0?i=24:(n&q0)!=0&&(i/=256),P=i/A,this.c=w.Math.min(P,w.Math.min(r,f)),this.a=e.c+e.b/2-this.c*(t.c+t.b/2),this.b=e.d+e.a/2-this.c*(t.d+t.a/2)):(n&o0)!=0&&(i=(n&d1)!=0?n&d1:24,this.c=i/A)}function L6(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(L=I2,e!=-1){for(A=c(Ut,Tt,6,9,15,1),i=0;i<Le(t.V,e);i++)A[i]=_0(t.V,e,_(t.V,e,i));if(Le(t.V,e)==1)A[0]<-2.6179938779914944?L=fA:A[0]<uo?L=I2:A[0]<v4?L=fA:A[0]<0?L=I2:A[0]<C2?L=z6:A[0]<HA?L=wo:A[0]<2.6179938779914944?L=z6:L=wo;else{for(f=Le(t.V,e)-1;f>0;f--)for(D=0;D<f;D++)A[D]>A[D+1]&&(s=A[D],A[D]=A[D+1],A[D+1]=s);for(A[Le(t.V,e)]=A[0]+m0,o=0,Q=0,r=0;r<Le(t.V,e);r++)n=A[r+1]-A[r],Q<n&&(Q=n,o=r);L=(A[o]+A[o+1])/2}}P=Qn(t.V,24*t.ab),t.ib=(e==-1?t.hb:mt(t.V,e))+P*w.Math.sin(L),t.lb=(e==-1?t.kb:Rt(t.V,e))+P*w.Math.cos(L)}function wa(t,e){var A,n,P,r,i,f,D,Q,o;for(si(t),Q=new SA(t.R.g,t.R.i),ve(Q,t.R.L),i=0;i<t.R.g;i++)Nn(t.R,Q,t.B[i],0,0),Ne(Q,i,t.bb[t.B[i]],t.ab[t.B[i]]);for(f=0;f<t.R.i;f++)yQ(t.R,Q,t.C[f],0,0,t.H,!1),!(Q.I[f]==257||Q.I[f]==129)&&Q.F[0][f]>Q.F[1][f]&&(o=Q.F[0][f],mD(Q,0,f,Q.F[1][f]),Q.F[1][f]=o,Q.U=0),T8(Q,f,t.n[t.C[f]],t.k[t.C[f]]);if(e)for(r=0;r<t.R.g;r++)for(A=t.B[r],D=O(t.R,A);D<Ct(t.R,A);D++)P=Nn(t.R,Q,_(t.R,A,D),0,0),o9(t.R,Q,Nt(t.R,A,D),0,0,t.H[A],P,!1);for(n=0;n<Q.s;n++)A=Q.F[0][n],t.eb[t.B[A]]&&(Q.I[n]==257?(Q.I[n]=129,Q.U=0):Q.I[n]==129&&(Q.I[n]=257,Q.U=0));return EU(t.R,Q),Q.U&=-9,Q}function _Q(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;if(Q=c(F,m,6,2,15,1),D=c(Ut,Tt,6,2,15,1),Q[0]=t.F[0][e],Q[1]=t.F[1][e],G1(t,Q[0])>3||G1(t,Q[1])>3)return!1;for(i=0,r=c(Ut,Tt,6,4,15,1),s=0;s<t.s;s++)if(s!=e){for(y=0;y<2;y++){for(l=0;l<2;l++)if(t.F[y][s]==Q[l]){if(i==4){i=5;break}r[i++]=_0(t,Q[l],t.F[1-y][s])}if(i==5)break}if(i==5)break}if(i==5)return!1;for(D[0]=_0(t,Q[0],Q[1]),D[0]<0?(D[1]=D[0]+l1,f=0):(D[1]=D[0],D[0]=D[1]-l1,f=1),h=0,L=0;L<i;L++)r[L]>D[0]&&r[L]<D[1]?--h:++h;return f=h>0?1-f:f,o=l1*(A-2)/A,U6(t,Q[f],A-1,Q[1-f],n,D[h>0?0:1]+l1-o,l1-o,P),t.U=0,!0}function s6(t,e){var A;Yt(e,137)?$$(t,e):Yt(e,159)&&(A=e.b,e.j==1&&(A==-9&&t.b>=17?R0(t,t.b-17):A==-10&&t.b<17?R0(t,t.b+17):A==-11&&t.b%17>0?R0(t,t.b-1):A==-12&&t.b%17<16?R0(t,t.b+1):A==122?R0(t,18):A==32?R0(t,2):A==48?R0(t,4):A==116?R0(t,21):A==49?R0(t,5):A==50?R0(t,22):A==109?R0(t,19):A==51?R0(t,7):A==52?R0(t,24):A==53?R0(t,8):A==54?R0(t,25):A==55?R0(t,9):A==97?R0(t,26):A==45?R0(t,27):A==43?R0(t,10):A==117?R0(t,6):A==100?R0(t,23):A==99?R0(t,11):A==110?R0(t,12):A==112?R0(t,29):A==111?R0(t,13):A==115?R0(t,30):A==102?R0(t,14):A==108?R0(t,31):A==98?R0(t,15):A==105?R0(t,32):A==104?R0(t,16):A==46&&R0(t,33)))}function $1(t,e){if(!t.K&&(e==-10&&(t.C=-999,e=t.Q),e!=-2&&e!=-7&&t.N!=0&&(e=-4),e!=t.C&&!(t.C==-8&&e!=-9)))switch(e==-8&&(t.O=t.C),e==-9&&(e=t.O),t.C=e,e){case 0:t.Bb(t.F==0?On:t.F);break;case-6:t.Bb(t.F);break;case-4:t.Bb(t.N);break;case-2:t.Bb(t.t);break;case-3:t.Bb(t.u);break;case-7:t.Bb(t.H);break;case-8:t.Bb(t.I);break;case-5:t.Bb(t.P);break;case 64:t.Bb(-14655233);break;case 128:t.Bb(GP);break;case 256:t.Bb(-4194049);break;case 192:t.Bb(-16711936);break;case 320:t.Bb(-24576);break;case 384:t.Bb(-16744448);break;case 448:t.Bb(-6291456);break;case 1:t.Bb(hy);break;default:t.Bb(On)}}function ga(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(o=new ch,L=0;L<t.i.g;L++)if(e0(t.i,L)<2||O(t.i,L)>2)for(i=1;i<O(t.i,L);i++)for(e=_(t.i,L,i),f=0;f<i;f++)A=_(t.i,L,f),ny(t,e,A)&&(D=_p(t,e,A),D&&zF(D,t.f)&&We(o.a,D,(Er(),jo))==null);for(s=0;s<t.i.i;s++)t.c[s]!=0&&(dt(t.i,s)!=2||t.c[s]!=2)||(e=K(t.i,0,s),A=K(t.i,1,s),ny(t,e,A)&&(D=_p(t,e,A),D&&zF(D,t.f)&&We(o.a,D,(Er(),jo))==null));for(t.g=c(F,u0,7,o.a.c,0,2),t.e=c(Pt,it,6,t.i.g,16,1),r=0,Q=(P=new J8(new K8(new br(o.a).a).b),new jr(P));Nr(Q.a.a);)for(D=(n=H9(Q.a),n.hd()),t.g[r++]=D.b,i=0;i<D.b.length;i++)t.e[D.b[i]]=!0}function da(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(dt(t,e)!=1||e<t.i&&Ee(t.q,e)||(t.q&&e<t.i?TP(t.q,e):0)==3)return!1;for(A=c(F,m,6,2,15,1),f=0;f<2;f++)if(A[f]=t.F[f][e],(t.v[A[f]]&q0)!=0||P0(t,A[f])<=1)return!1;if(PL(t,A[0])||PL(t,A[1])){for(L=c(F,m,6,1,15,1),L[0]=e,n=c(F,u0,7,2,0,2),D=0;D<2;D++)if(PL(t,A[D])&&(n[D]=c(F,m,6,2,15,1),n[D][0]=A[1-D],n[D][1]=A[D],!G5(t,A[1-D],n[D],L)))return!1;if(e!=L[0])return!1;for(Q=0;Q<2;Q++)n[Q]!=null&&(A[Q]=n[Q][1])}for(i=0;i<2;i++){if(r=t.k[A[i]],r==1)return!1;for(s=0,o=0;o<r;o++)P=t.j[A[i]][o],(t.v[P]&q0)!=0||++s;if(s<2)return!1}return!0}function ip(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(D=c(F,m,6,32,15,1),Q=0,n=0;n<t.R.g;n++)(t._[n]==1||t._[n]==2)&&t.bb[n]==e&&(f=t.ab[n],D[f]<t.f[n]&&(D[f]==0&&++Q,D[f]=t.f[n]));for(r=0;r<t.R.i;r++)(t.j[r]==1||t.j[r]==2)&&t.n[r]==e&&c1(t.R,r)==1&&(f=t.k[r],l=w.Math.max(t.f[K(t.R,0,r)],t.f[K(t.R,1,r)]),D[f]<l&&(D[f]==0&&++Q,D[f]=l));for(i=c(E,I,6,32,15,1),o=0;o<Q;o++){for(s=-1,y=0,L=0;L<32;L++)y<D[L]&&(y=D[L],s=L);D[s]=0,i[s]=o<<24>>24}for(A=0;A<t.R.g;A++)(t._[A]==1||t._[A]==2)&&t.bb[A]==e&&(t.ab[A]=i[t.ab[A]]);for(P=0;P<t.R.i;P++)(t.j[P]==1||t.j[P]==2)&&t.n[P]==e&&c1(t.R,P)==1&&(t.k[P]=i[t.k[P]])}function Ba(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(ut(t.k,7),L=!1,s=c(F,m,6,2,15,1),y=c(F,m,6,2,15,1),o=c(F,m,6,2,15,1),n=0;n<t.k.i;n++)if(!A8(t.k,n)&&c1(t.k,n)==2){for(i=0;i<2;i++){for(s[i]=-1,o[i]=-1,e=K(t.k,i,n),Q=0;Q<O(t.k,e);Q++)P=Nt(t.k,e,Q),P!=n&&(s[i]==-1&&(c1(t.k,P)==257||c1(t.k,P)==129)?(s[i]=_(t.k,e,Q),y[i]=P):o[i]=_(t.k,e,Q));if(s[i]==-1)break}if(s[0]!=-1&&s[1]!=-1){for(D=c1(t.k,y[0])==c1(t.k,y[1]),f=0;f<2;f++)s[f]==K(t.k,0,y[f])&&(D=!D);for(r=0;r<2;r++)o[r]!=-1&&o[r]<s[r]&&(D=!D);Q8(t.k,n,D?2:1,!1),L=!0}}for(A=0;A<t.k.i;A++)(c1(t.k,A)==257||c1(t.k,A)==129)&&g0(t.k,A,1);return L}function fp(t){for(var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;;){for(k=0,y=0,T=null,g=null,i=1;i<t.d.a.length;i++)for(n=G(t.d,i),f=0;f<i;f++){for(P=G(t.d,f),e=0,A=0,l=0,h=0,o=0;o<n.e.length;o++)for(s=0;s<P.e.length;s++)n.e[o]==P.e[s]&&(++A,e=n.e[o],l<n.k[o]&&(l=n.k[o]),h<P.k[s]&&(h=P.k[s]));if(A>0&&(r=A==1&&XL(t,n,e)==1&&XL(t,P,e)==1?0:1,l>h?D=(r<<24)+(l<<16)+(h<<8)+A:D=(r<<24)+(h<<16)+(l<<8)+A,k<D)){for(k=D,y=A,l=0,h=0,L=0;L<n.e.length;L++)l<n.k[L]&&(l=n.k[L]);for(Q=0;Q<P.e.length;Q++)h<P.k[Q]&&(h=P.k[Q]);l>h?(T=n,g=P):(T=P,g=n)}}if(k==0)break;y==T.e.length?er(t.d,T):y==g.e.length?er(t.d,g):o_(t,T,g,y)}}function iy(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(t.d>1){for(Q=c(Ut,Tt,6,t.d,15,1),o=c(Ut,Tt,6,t.d,15,1),L=c(Ut,Tt,6,t.d,15,1),D=c(Ut,Tt,6,t.d,15,1),i=0;i<t.d;i++)L[i]=Jf,D[i]=-1e9;for(n=0;n<e.k.length;n++)Q[t.e[n]]+=e.k[n].a,o[t.e[n]]+=e.k[n].b,L[t.e[n]]>e.k[n].c&&(L[t.e[n]]=e.k[n].c),D[t.e[n]]<e.k[n].c&&(D[t.e[n]]=e.k[n].c);for(f=0;f<t.d;f++)Q[f]/=t.f[f],o[f]/=t.f[f];for(s=c(Ut,Tt,6,t.d,15,1),y=c(Ut,Tt,6,t.d,15,1),l=c(Ut,Tt,6,t.d,15,1),r=1;r<t.d;r++)s[r]=Q[0]-Q[r],y[r]=o[0]-o[r],l[r]=l[r-1]+D[r-1]-L[r]+3;for(A=0;A<e.k.length;A++)t.e[A]!=0&&(P=e.k[A],P.a+=s[t.e[A]],P.b+=y[t.e[A]],P.c+=l[t.e[A]])}}function Rf(t){var e,A,n,P,r,i,f,D;for(i=0;i<t.s;i++)t.I[i]==512&&(A=t.F[0][i],n=t.F[1][i],t.D[A]==-1^t.D[n]==-1&&t.t[A]!=0&&t.t[n]!=0&&t.t[A]<0^t.t[n]<0&&(t.t[A]<0?(++t.t[A],--t.t[n]):(--t.t[A],++t.t[n])));for(D=c(F,m,6,t.r,15,1),P=0,e=0;e<t.r;e++){if(t.D[e]==-1){D[e]=-1;continue}P<e&&(t.D[P]=t.D[e],t.t[P]=t.t[e],t.B[P]=t.B[e],t.v[P]=t.v[e],t.C[P]=t.C[e],t.A[P]=t.A[e],HD(t.K[P],t.K[e]),t.w!=null&&(t.w[P]=t.w[e]),t.u!=null&&(t.u[P]=t.u[e])),D[e]=P,++P}for(t.r=P,f=0,r=0;r<t.s;r++)t.I[r]!=512&&(t.I[f]=t.I[r],t.G[f]=t.G[r],t.H[f]=t.H[r],t.F[0][f]=D[t.F[0][r]],t.F[1][f]=D[t.F[1][r]],++f);return t.s=f,D}function xt(t,e){var A,n,P,r,i,f,D,Q;if(t.L&&n0(V(t.C[e],O1),0)||!fs(t,e))return 0;if(ut(t,1),t.L){if(gt(V(t.C[e],1),0)||t.w!=null&&t.w[e]!=null&&t.w[e].length>1)return 0;for(P=0;P<t.e[e];P++)if(ir(t.H[t.n[e][P]]&127)>1)return 0}if(t.D[e]==0||e1(\"*\",t.u==null||t.u[e]==null?null:on((i=t.u[e],w0(),i))))return t.e[e]==0?1:0;for(D=0,r=0;r<t.e[e];r++)(!t.L||n0(V(t.C[t.j[e][r]],Pe),0))&&(D+=t.o[e][r]);if(t.L){for(A=1,n=0;n<t.k[e];n++)t.I[t.n[e][n]]==8&&++A;D+=A>>1}if(D-=en(t,e,D,t.D[e]),f=((t.v[e]&b8)>>>27)-1,f==-1)for(Q=eQ(t.D[e]),f=Q[0],n=1;f<D&&n<Q.length;n++)f=Q[n];return w.Math.max(0,f-D)}function Dp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;for(P=c(Ut,Tt,6,Ct(t.f,A)+1,15,1),i=c(F,m,6,Ct(t.f,A)+1,15,1),f=c(F,m,6,Ct(t.f,A)+1,15,1),T=L8(e,A),r=0,Q=0;Q<Ct(t.f,A);Q++)i[r]=_(t.f,A,Q),f[r]=Nt(t.f,A,Q),L=L8(e,i[r]),L!=-1&&(P[r++]=hn(e.a[T],e.b[T],e.a[L],e.b[L]));if(r==1)return P[0]+l1;for(o=r-1;o>0;o--)for(s=0;s<o;s++)P[s]>P[s+1]&&(g=P[s],P[s]=P[s+1],P[s+1]=g,k=i[s],i[s]=i[s+1],i[s+1]=k,v=f[s],f[s]=f[s+1],f[s+1]=v);for(P[r]=P[0]+m0,i[r]=i[0],f[r]=f[0],y=-100,l=0,D=0;D<r;D++)n=P[D+1]-P[D],r>2&&LA(t.f,f[D])&&LA(t.f,f[D+1])&&(h=SZ(t,i[D],A,i[D+1]),h!=0&&(n-=100-h)),y<n&&(y=n,l=D);return(P[l]+P[l+1])/2}function va(t){var e,A,n;for(e=0;e<t.R.g;e++)t.db[e]==3&&!E9(t.R,e)&&hP(t.R,e),(De(t.R,e)==1||De(t.R,e)==2)&&t.db[e]==3&&hP(t.R,e),E9(t.R,e)&&t.db[e]!=3&&!nK(t,e)&&hP(t.R,e);for(n=0;n<t.R.s;n++)q9(t.R,n)&&!UW(t,n)&&hP(t.R,K(t.R,0,n));for(A=0;A<t.R.i;A++)dt(t.R,A)==2&&(Yh(t.R,A)&&(t.o[A]==1||t.o[A]==2)&&(t.o[A]=3,g0(t.R,A,386)),t.o[A]==3&&!t.p[A]&&c1(t.R,A)!=386&&(hP(t.R,K(t.R,0,A)),hP(t.R,K(t.R,1,A)))),c1(t.R,A)==1&&t.o[A]==3&&!E9(t.R,K(t.R,0,A))&&!E9(t.R,K(t.R,1,A))&&(hP(t.R,K(t.R,0,A)),hP(t.R,K(t.R,1,A))),(gP(t.R,A)==1||gP(t.R,A)==2)&&(c1(t.R,A)!=1||t.o[A]!=1&&t.o[A]!=2)&&(hP(t.R,K(t.R,0,A)),hP(t.R,K(t.R,1,A)))}function Fa(t){var e,A,n,P,r,i,f,D,Q;for(A=0;A<t.R.g;A++)AA(t.e[A],A),a1(t.e[A],2*t.c+4,Wt(t.f[A],t.c+4));for(D=1;D<=t.U;D++){for(P=!1,n=0;n<t.R.g;n++)t.f[n]==D&&(P=P|Qy(t,n,2));if(P){if(f=t.U,t.U=tP(t),t.U!=f)return!0;for(e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],2*t.c+4,Wt(t.f[e],t.c+4))}}for(Q=c(E1t,H2,175,t.R.i,0,1),i=0;i<Q.length;i++)Q[i]=new oF(t.f[K(t.R,0,i)],t.f[K(t.R,1,i)],i);for(ai(Q,0,Q.length,null),r=0;r<Q.length;r++)if($Q(t,Q[r].a,2)){for(;r+1<Q.length&&NF(Q[r],Q[r+1])==0;)$Q(t,Q[++r].a,2);if(f=t.U,t.U=tP(t),t.U!=f)return!0;for(e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],2*t.c+4,Wt(t.f[e],t.c+4))}return!1}function ka(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b;for(L=t.e[e]-A,b=-1,k=NaN,l=0;l<L;l++)if(_9(t,t.n[e][l],e)){b=l,k=_0(t,e,t.j[e][l]);break}if(v=b==-1?0:1,i=null,v<L){for(i=c(Ut,Tt,6,L-v,15,1),Q=0,h=0;h<L;h++)h!=b&&(i[Q++]=_0(t,e,t.j[e][h]));i.sort(pe(ki.prototype.ld,ki,[]))}if(f=m0/w.Math.max(A,3),g=0,i!=null)if(i.length==1&&A==1)g=i[0];else{for(D=0,h=0;h<i.length;h++)P=h==0?i[i.length-1]-m0:i[h-1],r=i[h],D<r-P&&(D=r-P,g=P);f=D/(A+1)}for(y=0;y<A;y++)g+=f,s=g,v!=0&&(o=Ze(s,k),w.Math.abs(o)<f/2&&(o<0?s=k-f/2:s=k+f/2)),T=t.j[e][L+y],de(t,T,t.K[e].a+n*w.Math.sin(s)),Ve(t,T,t.K[e].b+n*w.Math.cos(s))}function up(t){var e,A;if(t.L)for(ut(t,7),e=0;e<t.g;e++)(t.v[e]&gn)!=0&&(n0(V(t.C[e],120),8)&&(t.C[e]=V(t.C[e],-9)),t.C[e]=V(t.C[e],-4294967297)),e<t.g&&f0(t.q,e)?t.C[e]=V(t.C[e],{l:4194297,m:z0,h:1048571}):gt(V(t.C[e],2),0)&&(t.C[e]=V(t.C[e],-5)),(gt(V(t.C[e],lr),0)||gt(V(t.C[e],l9),0)&&n0(V(t.C[e],w8),0))&&n0(V(t.C[e],120),8)&&(t.C[e]=V(t.C[e],-9)),t.t[e]!=0&&(t.C[e]=V(t.C[e],-234881025)),G1(t,e)==(A=En(t,e),A+en(t,e,A,t.D[e]))&&(t.C[e]=V(t.C[e],-4063233),t.C[e]=V(t.C[e],-0xf8000000001),t.C[e]=V(t.C[e],-1921),t.C[e]=V(t.C[e],-114689)),gt(V(t.C[e],Pe),0)&&t.A[e]!=0&&iQ(t,t.A[e])}function Qp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(t,7),D=new SA(t.g,t.i),f=j1(E,[Wy,m8],[58,10],0,[t.g,8],2),n=c(F,m,6,t.g,15,1),P=c(Pt,it,6,t.g,16,1),r=c(Pt,it,6,t.i,16,1),h=0;h<t.g;h++){for(h!=0&&(xu(P,P.length),xu(r,r.length)),f[h][0]=c(E,I,6,2,15,1),f[h][0][0]=t.D[h]<<24>>24,f[h][0][1]=t.B[h]<<24>>24,n[0]=h,P[h]=!0,y=0,s=1,t.v[h]|=512,T=1;T<=7&&s<t.g;T++){for(l=s,Q=y;Q<s;Q++)for(A=n[Q],o=0;o<t.k[A];o++)i=t.j[A][o],P[i]||(P[i]=!0,n[l++]=i),r[t.n[A][o]]=!0;if(l==s)break;for(y=s,s=l,wp(t,D,r,!0,null),e=0;e<D.r;e++)D.t[e]=0,D.U=0,Je(D,e,0);f[h][T]=ln((L=Me(new qA(D,16)),w0(),L))}t.v[h]&=-513}return f}function ma(t){var e,A,n,P,r,i,f,D,Q;for(f=null,D=k1(Ki(t.D));D.length!=0;){if(A=D.indexOf(p0(44)),A==-1?(i=k1(D),D=\"\"):(i=k1((Mt(0,A,D.length),D.substr(0,A))),D=k1((zt(A+1,D.length+1),D.substr(A+1)))),e1(i,\"X\")){D.length!=0&&(D=\",\"),D=(y1(D),D+(y1(\"F,Cl,Br,I\"),\"F,Cl,Br,I\"));continue}if(e=(J1(),zA(i,321)),e!=0)if(e==1)ED(t.v,\"'H' cannot be part of an atom list and is removed.\");else if(f==null)f=c(F,m,6,1,15,1),f[0]=e;else{for(n=!1,r=0;r<f.length;r++)if(e==f[r]){n=!0;break}if(!n){for(Q=c(F,m,6,f.length+1,15,1),P=0;P<f.length;P++)Q[P]=f[P];Q[f.length]=e,f=Q}}}return f?.sort(pe(Q0.prototype.ld,Q0,[])),f}function F2(t,e,A){var n,P,r,i,f,D,Q,o,L;for(r=0,Q=0;Q<A;){if(++r,P=t[e+Q],(P&192)==128)throw At(new ZP(G4));if((P&128)==0)++Q;else if((P&224)==192)Q+=2;else if((P&240)==224)Q+=3;else if((P&248)==240)Q+=4;else throw At(new ZP(G4));if(Q>A)throw At(new XP(G4))}for(i=c(Fr,re,6,r,15,1),L=0,f=0,D=0;D<A;){for(P=t[e+D++],(P&128)==0?(f=1,P&=127):(P&224)==192?(f=2,P&=31):(P&240)==224?(f=3,P&=15):(P&248)==240?(f=4,P&=7):(P&252)==248&&(f=5,P&=3);--f>0;){if(n=t[e+D++],(n&192)!=128)throw At(new ZP(\"Invalid UTF8 sequence at \"+(e+D-1)+\", byte=\"+(o=n>>>0,o.toString(16))));P=P<<6|n&63}L+=pJ(P,i,L)}return i}function op(t){var e,A,n,P,r,i,f,D,Q,o;for(e=null,Q=null,i=0;i<t.f.i;i++)if(c1(t.f,i)==16){for(A=K(t.f,0,i),P=-1,f=0;f<t.d.a.length&&(P=L8(G(t.d,f),A),P==-1);f++);for(n=K(t.f,1,i),r=-1,D=0;D<t.d.a.length&&(r=L8(G(t.d,D),n),r==-1);D++);f!=D&&(f>D&&(o=f,f=D,D=o,o=P,P=r,r=o),Q==null&&(Q=c(kE,DA,473,t.d.a.length,0,2)),Q[D]==null&&(Q[D]=c(kE,{473:1,4:1,5:1,8:1},106,D,0,1)),Q[D][f]?(Q[D][f].c[0]+=Uu(Q[D][f].b[0],P),Q[D][f].d[0]+=Lu(Q[D][f].b[0],P),Q[D][f].c[1]+=Uu(Q[D][f].b[1],r),Q[D][f].d[1]+=Lu(Q[D][f].b[1],r),++Q[D][f].a[0],++Q[D][f].a[1]):(Q[D][f]=new OQ(G(t.d,f),G(t.d,D),P,r),!e&&(e=new n1),e.a.push(Q[D][f])))}return e}function ba(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(k=c(F,m,6,t.j.i,15,1),h=0;h<e.j.a.length;h++){for(g=G(e.k,h),L=!0,D=0;D<g.length;D++)if(!t.e[g[D]]){L=!1;break}if(L)for(f=0;f<g.length;f++)++k[g[f]]}for(P=t.c,l=0;l<e.j.a.length;l++)for(i=!1,T=G(e.j,l),g=G(e.k,l),f=0;f<g.length&&!i;f++)if(k[g[f]]>1&&(r=Ih(f,g.length),k[g[r]]==1)){for(Q=!1,y=Ih(r,g.length);k[g[y]]==1;)(!cf(t,T[y],!1)||g.length!=6&&X(t.j,T[y])!=6)&&(Q=!0),y=Ih(y,g.length);if(!Q&&(n=y>r?y-r:y+g.length-r,n>2&&(n&1)==1)){for(s=1;s<n;s+=2)o=r+s<g.length?r+s:r+s-g.length,A&&(cf(t,T[o],!0),cf(t,T[o==T.length-1?0:o+1],!0)),u2(t,g[o]);i=!0}}return P!=t.c}function ja(t,e){var A,n,P,r,i,f,D,Q,o;return t==null?null:(f=t,Q=null,D=null,o=null,i=null,A=t.indexOf(p0(35)),A==-1?f=t:(f=(Mt(0,A,t.length),t.substr(0,A)),n=t.indexOf(p0(35),A+1),n==-1?Q=(zt(A+1,t.length+1),t.substr(A+1)):(Q=(Mt(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=t.indexOf(p0(35),n+1),P==-1?D=(zt(n+1,t.length+1),t.substr(n+1)):(D=(Mt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(p0(35),P+1),r==-1?o=(zt(P+1,t.length+1),t.substr(P+1)):(o=(Mt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=(zt(r+1,t.length+1),t.substr(r+1)))))),Op(f,(e&1)!=0?Q:null,(e&2)!=0?D:null,(e&4)!=0?o:null,(e&8)!=0?i:null,!1,null))}function Up(t){var e,A,n,P,r,i,f,D,Q;GA(t.o,t.k),ve(t.d,!0),MA(t.o,t.d);try{if(CA(t.o,4,4)>0&&(t.n=t.d,D=new Wu(t.g),D.a.length!=0))return n=(ee(0,D.a.length),D.a[0]),$N(n,n.a.length*32),n.a.length==1?n.b=n.a[0]:n.b=Mu(n.a),i=new n1,i.a.push(n),i}catch(o){if(o=_1(o),Yt(o,19))e=o,ur(e,(q1(),k9),\"\");else throw At(o)}for(Q=0;aP(t.g.a)!=0;)if(D=new Wu(t.g),kD(D,t.a),n=G(D,D.a.length-1),n3(t.g,n),A=Cs(t.d,n),MA(t.o,A),CA(t.o,4,8)>0){if(xA(t.j,n),Nz(t,n),AT(n)!=t.d.i)for(f=tW(t,n,t.d),r=new Zt(f);r.a<r.c.a.length;)P=_t(r),!du(t.i,P)&&!du(t.j,P)&&xA(t.g,P);Q<aP(t.g.a)&&(Q=aP(t.g.a))}else xA(t.i,n);return aP(t.j.a)==0?null:YX(t.j)}function Lp(t,e,A){var n,P,r,i,f,D,Q;if(e&&e.g&&++t.B,e&&t.r>e.b&&(t.r=e.b),t.F)return fm(t);if(t.D.d.a.length==t.s)return null;if(e&&e.b>3){if(n=A?Pr(t.i,e.d):null,i=A?n.c:null,r=A?i.a.length:0,_W(t,e),A)for(f=r;f<i.a.length;f++)ZI(Be(A.a,A3(e.c)),I_(t.C,(ee(f,i.a.length),i.a[f]),n));e.g||(e.b<6?tr(t.w,e):(!t.e||t.e.b>e.b)&&(t.e=e)),++t.g}for(D=t.r+3,Q=Bk(t,D,e);Q&&(P=tK(Q,Pr(t.i,Q.d).c),!(P<D));){if(P<6&&tr(t.A,new Ng(Q,P)),++t.g,lm(t.D,Q),t.D.d.a.length==t.s)return null;D=t.r+3,Q=Bk(t,D,Q)}if(!Q){if(t.w.d.a.length!=0){for(t.F=!0;t.w.d.a.length!=0&&I9(t.w,t.w.d.a.length-1).b>t.r+3;)uU(t.w,t.w.d.a.length-1);Q=fm(t)}return Q}return lm(t.D,Q),Q}function Ra(t,e){var A,n,P,r,i,f,D,Q;A=(Q=t.n.Cc(),Q.getBackgroundRGB()),P=(ni(),(YA[0]*((A&QP)>>16)+YA[1]*((A&DP)>>8)+YA[2]*(A&255))/255<.5),n=P?E5(A,Hf):A&On|Bt(w.Math.round(lo*((A&QP)>>16)))<<16|Bt(w.Math.round(lo*((A&DP)>>8)))<<8|Bt(w.Math.round(lo*(A&255))),i=P?E5(A,.5):A&On|Bt(w.Math.round(zf*((A&QP)>>16)))<<16|Bt(w.Math.round(zf*((A&DP)>>8)))<<8|Bt(w.Math.round(zf*(A&255))),D=WU(t.i),f=$U(t.i),Ps(e,t.i,0,0,D,f,p8,p8,D/t.j,f/t.j),r=xF(20),Ps(e,t.c,0,t.d*84,84,84,r[0],r[1],vn,vn),(t.a.U&4)==0&&CQ(t,e,19,-1,!0),(t.a.U&8)==0&&CQ(t,e,21,-1,!0),CQ(t,e,t.b,i,!1),t.f!=-1&&t.f!=t.k&&CQ(t,e,t.f,n,!1),t.k!=-1&&CQ(t,e,t.k,7167924,!1)}function sp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(!t.b)return!1;for(i=null,s=null,D=new IL(null,null),P=1,D.a[1]=t.b,L=D;L.a[P];)Q=P,f=s,s=L,L=L.a[P],n=t.a.Rb(e,L.c),P=n<0?0:1,n==0&&(!A.c||$8(L.d,A.d))&&(i=L),!(L&&L.b)&&!WP(L.a[P])&&(WP(L.a[1-P])?s=s.a[Q]=PQ(L,P):WP(L.a[1-P])||(y=s.a[1-Q],y&&(!WP(y.a[1-Q])&&!WP(y.a[Q])?(s.b=!1,y.b=!0,L.b=!0):(r=f.a[1]==s?1:0,WP(y.a[Q])?f.a[r]=Fv(s,Q):WP(y.a[1-Q])&&(f.a[r]=PQ(s,Q)),L.b=f.a[r].b=!0,f.a[r].a[0].b=!1,f.a[r].a[1].b=!1))));return i&&(A.b=!0,A.d=i.d,L!=i&&(o=new IL(L.c,L.d),XY(t,D,i,o),s==i&&(s=o)),s.a[s.a[1]==L?1:0]=L.a[L.a[0]?0:1],--t.c),t.b=D.a[1],t.b&&(t.b.b=!1),A.b}function y6(t,e,A){Hi();var n,P,r,i,f;L_.call(this,t),this.a=new n1,this.b=new zR(t),ut(this.g,7),f=Ku(cl,e),r=r8(A.c,RC)?hD(A.c.a.get(RC)):100,n=r8(A.c,pC)?hD(A.c.a.get(pC)):1,P=r8(A.c,MC)&&SP(A.c.a.get(MC),\"distance\"),i=new rR(this.b),(!r8(A.c,CC)||pi(A.c.a.get(CC)))&&MP(this.a,jY(f,this.b)),(!r8(A.c,HC)||pi(A.c.a.get(HC)))&&MP(this.a,iq(f,this.b)),(!r8(A.c,VC)||pi(A.c.a.get(VC)))&&MP(this.a,vZ(f,this.b,i,r,P,n)),(!r8(A.c,EC)||pi(A.c.a.get(EC)))&&MP(this.a,lX(f,this.b)),(!r8(A.c,SC)||pi(A.c.a.get(SC)))&&MP(this.a,FW(f,this.b)),(!r8(A.c,IC)||pi(A.c.a.get(IC)))&&MP(this.a,aW(f,this.b)),(!r8(A.c,xC)||pi(A.c.a.get(xC)))&&MP(this.a,HX(f,this.b,i,r))}function pa(t){var e,A,n,P,r;for(r=t.U,P=Mn(t.f,t.R.g),t.R.L||(NW(t),wm(t,r,P)),t.bb=c(E,I,6,t.R.g,15,1),t.ab=c(E,I,6,t.R.g,15,1),A=0;A<t.R.g;A++)t.bb[A]=De(t.R,A)<<24>>24,t.ab[A]=OA(t.R,A)<<24>>24;for(t.n=c(E,I,6,t.R.i,15,1),t.k=c(E,I,6,t.R.i,15,1),n=0;n<t.R.i;n++)t.n[n]=gP(t.R,n)<<24>>24,t.k[n]=ef(t.R,n)<<24>>24;for(t$(t),t.Z=!1,t.M=c(Pt,it,6,t.R.g,16,1),e=0;e<t.R.g;e++)t.db[e]!=0&&(t.M[e]=!0,t.Z=!0);bJ(t),t.P=null,t.cb=c(Pt,it,6,t.R.g,16,1),t.Z&&(t.P=new dm(t.R,P,t.M,t.db,t.o,t.bb,t.ab,t.ib,t.q,t.cb),K$(t.P)),t.eb=c(Pt,it,6,t.R.g,16,1),t.gb=c(Pt,it,6,t.R.g,16,1),t.hb=new n1,t.P&&h2(t.P,t.f),m$(t),wm(t,r,P),a$(t),t.P&&(t.K=uz(t.P)),wtt(t)}function Ma(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(D=new Zt(t.d);D.a<D.c.a.length;)for(f=_t(D),Q=0;Q<f.f.length;Q++)if(n=f.f[Q],dt(t.f,n)==2&&(!A8(t.f,n)&&(ze(t.f,n)==3||ze(t.f,n)==0)&&yh(t.f,n),!LA(t.f,n)&&O(t.f,K(t.f,0,n))>1&&O(t.f,K(t.f,1,n))>1&&(ze(t.f,n)==1||ze(t.f,n)==2))){for(s=c(F,m,6,2,15,1),P=c(F,m,6,2,15,1),o=0;o<2;o++)for(s[o]=t.f.N,P[o]=K(t.f,o,n),L=0;L<Ct(t.f,P[o]);L++)r=_(t.f,P[o],L),r!=K(t.f,1-o,n)&&s[o]>r&&(s[o]=r);i=hn(f.a[f.g[P[0]]],f.b[f.g[P[0]]],f.a[f.g[P[1]]],f.b[f.g[P[1]]]),e=hn(f.a[f.g[s[0]]],f.b[f.g[s[0]]],f.a[f.g[P[0]]],f.b[f.g[P[0]]]),A=hn(f.a[f.g[P[1]]],f.b[f.g[P[1]]],f.a[f.g[s[1]]],f.b[f.g[s[1]]]),VL(i,e)<0^VL(i,A)<0^ze(t.f,n)==2&&Vp(f,n)}}function Ca(t,e,A){var n,P,r,i,f,D,Q,o,L;return r=fR(t,e),i=r[0],D=r[1],D.e==0?new ID(i,2):(Q=t.e*e.e,IT(e)<54?(f=(L=D.d>1?Xr(D.a[0],D.a[1]):Xr(D.a[0],0),D.e>0?L:E0(L)),P=(o=e.d>1?Xr(e.a[0],e.a[1]):Xr(e.a[0],0),e.e>0?o:E0(o)),n=Si(Wt(z(f,0)<0?E0(f):f,1),z(P,0)<0?E0(P):P)?-1:I1(Wt(z(f,0)<0?E0(f):f,1),z(P,0)<0?E0(P):P)?1:0,n=zQ(SQ(i,0)?1:0,Q*(5+n),A)):(n=ss($k(D.e<0?D.e==0?D:new le(-D.e,D.d,D.a):D),e.e<0?e.e==0?e:new le(-e.e,e.d,e.a):e),n=zQ(SQ(i,0)?1:0,Q*(5+n),A)),n!=0?IT(i)<54?nq((o=i.d>1?Xr(i.a[0],i.a[1]):Xr(i.a[0],0),at(i.e>0?o:E0(o),n))):(i=v2(i,(Ce(),z(n,0)>=0?be(n):mP(be(E0(n))))),new ID(i,2)):new ID(i,2))}function yp(t){var e,A,n,P,r,i,f,D,Q;switch(e=null,t.e){case 1:for(e=c(Kt,t1,6,2*t.a.length,15,1),n=0;n<t.a.length;n++)e[n]=t.a[n],e[t.a.length+n]=180+t.a[n]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==180?t.a.length-1:t.a.length,Q=r-P,e=c(Kt,t1,6,t.a.length+Q,15,1),i=0;i<t.a.length;i++)e[i]=t.a[i];for(f=P;f<r;f++)e[e.length-1-f+P]=360-t.a[f]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==90?t.a.length-1:t.a.length,Q=r-P,e=c(Kt,t1,6,2*t.a.length+2*Q,15,1),D=0;D<t.a.length;D++)e[D]=t.a[D],e[t.a.length+Q+D]=180+t.a[D]<<16>>16;for(A=P;A<r;A++)e[t.a.length+Q-1-A+P]=180-t.a[A]<<16>>16,e[e.length-1-A+P]=360-t.a[A]<<16>>16;return e;default:return t.a}}function Ha(t){var e,A,n,P,r,i,f,D,Q,o,L;for(L=new Zt(t.g);L.a<L.c.a.length;){for(Q=_t(L),A=0,r=0;r<O(t.k,Q.a);r++)t.c[Nt(t.k,Q.a,r)]||++A;if(A!=0){for(Q.c=c(F,m,6,A,15,1),A=0,i=0;i<O(t.k,Q.a);i++)t.c[Nt(t.k,Q.a,i)]||(D=_(t.k,Q.a,i),Q.c[A++]=t.q[D]<<16|D);for(Q.c.sort(pe(Q0.prototype.ld,Q0,[])),P=0;P<Q.c.length;P++)Q.c[P]=d1&Q.c[P]}}for(n=c(Pt,it,6,t.k.i,16,1),t.e=c(F,m,6,t.k.i,15,1),o=new Zt(t.g);o.a<o.c.a.length;)if(Q=_t(o),Q.c!=null){for(Q.d=c(Pt,it,6,Q.c.length,16,1),P=0;P<Q.c.length;P++)for(f=0;f<O(t.k,Q.a);f++)if(Q.c[P]==_(t.k,Q.a,f))if(e=Nt(t.k,Q.a,f),t.c[e])n[t.e[e]]=!1;else{for(t.c[e]=!0,Q.d[P]=!0,t.e[e]=1;n[t.e[e]];)++t.e[e];n[t.e[e]]=!0}}}function lp(){if(w5(),!dl)try{$f=c(S1t,c0,102,4,0,1),dr=c(J4,c0,20,4,0,1),Br=c(J4,c0,20,4,0,1),dr[0]=fi(\"/resources/toxpredictor/m1.txt\"),dr[1]=fi(\"/resources/toxpredictor/t1.txt\"),dr[2]=fi(\"/resources/toxpredictor/i1.txt\"),dr[3]=fi(\"/resources/toxpredictor/r1.txt\"),Br[0]=fi(\"/resources/toxpredictor/m2.txt\"),Br[1]=fi(\"/resources/toxpredictor/t2.txt\"),Br[2]=fi(\"/resources/toxpredictor/i2.txt\"),Br[3]=fi(\"/resources/toxpredictor/r2.txt\"),$f[0]=Rs(\"/resources/toxpredictor/m3.txt\"),$f[1]=Rs(\"/resources/toxpredictor/t3.txt\"),$f[2]=Rs(\"/resources/toxpredictor/i3.txt\"),$f[3]=Rs(\"/resources/toxpredictor/r3.txt\"),dl=!0}catch(t){if(t=_1(t),Yt(t,19))q1();else throw At(t)}}function Va(t,e){var A,n,P,r,i,f,D;if(D=new LD,!dl)return Ft(D.a,new ae(\"Toxicity predictor not properly initialized.\",2)),D;if(i=Me(new bA(t)),$f[e].cc(i)!=-1)return e8(D,\"This molecule is known to be \"+CE[e]+\":\",2),Ft(D.a,new ae(i,1)),D;for(f=new VD(1),A=!1,n=new _A,r=0;r<dr[e].a.length;r++)l2(new WA(!1),n,G(dr[e],r)),GA(f,t),MA(f,n),CA(f,1,f.c)>0&&(A||e8(D,\"High-risk fragments indicating \"+Eo[e]+\":\",2),A=!0,e8(D,G(dr[e],r),1));for(A=!1,P=0;P<Br[e].a.length;P++)l2(new WA(!1),n,G(Br[e],P)),GA(f,t),MA(f,n),CA(f,1,f.c)>0&&(A||e8(D,\"Medium-risk fragments indicating \"+Eo[e]+\":\",2),A=!0,e8(D,G(Br[e],P),1));return D.a.a.length==0&&e8(D,\"No indication for \"+Eo[e]+\" found.\",2),D}function hp(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l;for(l=B(d(Ut,1),Tt,6,15,[0,0,0]),Q=B(d(Ut,1),Tt,6,15,[0,0,0]),f=B(d(F,1),m,6,15,[e.D[A],e.D[n],e.D[P]]),D=1.75,o=0;o<3;o++)switch(f[o]){case 1:l[o]=1.395;break;case 6:l[o]=2.494,Q[o]=1.016;break;case 7:l[o]=2.711,Q[o]=1.113;break;case 8:l[o]=3.045,Q[o]=1.337;break;case 9:l[o]=2.847;break;case 14:l[o]=2.35,Q[o]=.811;break;case 15:l[o]=2.35,Q[o]=1.068;break;case 16:l[o]=2.98,Q[o]=1.249;break;case 17:l[o]=2.909,Q[o]=1.078;break;case 35:l[o]=3.017;break;case 53:l[o]=3.086}return L=d2(t.a.d,e,A,n),s=d2(t.a.d,e,n,P),i=(L-s)*(L-s)/((L+s)*(L+s)),y=mC*r,T2(e,A,n,P,4)?D*=.85:T2(e,A,n,P,3)&&(D*=.05),D*l[0]*Q[1]*l[2]/((L+s)*y*y*w.Math.exp(2*i))}function Ea(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(e!=null)t.e=e;else for(t.e=c(Pt,it,6,t.j.i,16,1),s=0;s<t.j.i;s++)c1(t.j,s)==8&&(t.e[s]=!0,g0(t.j,s,1));for(y=0;y<t.j.i;y++)t.e[y]&&++t.c;for(t.d=c(Pt,it,6,t.j.g,16,1),t.f=c(Pt,it,6,t.j.g,16,1),f=0;f<t.j.g;f++){for(l=0,h=0;h<O(t.j,f);h++)t.e[Nt(t.j,f,h)]&&++l;l>0&&(t.d[f]=!0,++t.b,l==3&&(t.f[f]=!0))}for(t.i=c(Pt,it,6,A.j.a.length,16,1),g=0;g<A.j.a.length;g++)for(t.i[g]=!0,Q=G(A.k,g),o=0,L=Q.length;o<L;++o)if(D=Q[o],!t.e[D]){t.i[g]=!1;break}for(t.g=c(Pt,it,6,t.j.g,16,1),T=0;T<A.j.a.length;T++)if(t.i[T]&&G(A.k,T).length!=6)for(P=G(A.j,T),r=0,i=P.length;r<i;++r)n=P[r],G(A.k,T).length==5&&(t.g[n]=!0);t.k=0}function fy(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,k;for(y=0;y<e.k[A];y++)if(f=e.j[A][y],!r[f]&&(o=e.n[A][y],g=dt(e,o),n&&g>=2||!n&&g<=2)){for(r[f]=!0,i.add(U1(o)),l=0;l<e.k[f];l++)if(D=e.j[f][l],!r[D]&&(L=e.n[f][l],k=dt(e,L),e.p[f]+2==g+k&&(n&&k<=2||!n&&k>=2))){if(r[D]=!0,i.add(U1(L)),t.f[D]&&(X(t.i,D)==5||X(t.i,D)==6||X(t.i,D)==7||X(t.i,D)==8||X(t.i,D)==16||X(t.i,D)==34||X(t.i,D)==52)&&(!n||TQ(e,D))){for(s=new ls(t,e),h=0;h<i.a.length;h++)Q=(ee(h,i.a.length),i.a[h]).a,T=h<2?n^(h&1)==0:P^(h&1)==0,T?kL(s,Q,dt(e,Q)==1?2:3):kL(s,Q,dt(e,Q)==2?1:2),t.g[Q]=!0;Yi(t.e,s)&&TL(t.d,s)}else fy(t,e,D,n,P,r,i);cA(i,i.a.length-1),r[D]=!1}cA(i,i.a.length-1),r[f]=!1}return!1}function ne(t,e){var A,n,P,r,i,f,D,Q,o;if(e==0)return 0;for(f=null,n=0;n<t.r;n++)(t.v[n]&b1)>>18==e&&(f==null&&(f=c(Pt,it,6,32,16,1)),f[(t.v[n]&b1)>>18!=1&&(t.v[n]&b1)>>18!=2?-1:(t.v[n]&VA)>>20]=!0);for(r=0;r<t.s;r++)(t.G[r]&768)>>8==e&&(f==null&&(f=c(Pt,it,6,32,16,1)),f[(t.G[r]&768)>>8!=1&&(t.G[r]&768)>>8!=2?-1:(t.G[r]&cn)>>10]=!0);if(o=0,f!=null){for(Q=c(F,m,6,32,15,1),D=0;D<32;D++)f[D]&&(Q[D]=o++);for(A=0;A<t.r;A++)(t.v[A]&b1)>>18==e&&(i=Q[(t.v[A]&b1)>>18!=1&&(t.v[A]&b1)>>18!=2?-1:(t.v[A]&VA)>>20],t.v[A]&=-32505857,t.v[A]|=i<<20);for(P=0;P<t.s;P++)(t.G[P]&768)>>8==e&&(i=Q[(t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10],t.G[P]&=-31745,t.G[P]|=i<<10)}return o}function L9(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(ut(t,n?7:1),e.w=null,t.L&&ve(e,!0),D=A.length,P==null&&(P=c(F,m,6,D,15,1)),e.r=0,r=0;r<D;r++)if(A[r]){if(P[r]=Nn(t,e,r,0,0),t.D[r]==1&&(s=G1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.j[r][L]]){aA(e,P[r],s);break}}}else P[r]=-1;for(o=c(F,m,6,t.s,15,1),zr(o,o.length,-1),e.s=0,Q=0;Q<t.s;Q++)i=t.F[0][Q],f=t.F[1][Q],i<D&&f<D&&(A[i]&&A[f]?o[Q]=o9(t,e,Q,0,0,P==null?t.F[0][Q]:P[t.F[0][Q]],P==null?t.F[1][Q]:P[t.F[1][Q]],n):t.t[i]!=0&&t.t[f]!=0&&t.t[i]<0^t.t[f]<0&&(A[i]&&(e.t[P[i]]+=t.t[i]<0?1:-1),A[f]&&(e.t[P[f]]+=t.t[f]<0?1:-1)));gL(t,e),t.d&&(e.U=0),e.U=0,ne(e,1),ne(e,2),e.r!=D&&ve(e,!0),Ap(t,e,D,P,o),Eb(t,e,D,P),n&&jf(new p9(e),null,!1)}function Sa(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(D=!1,e0(t.k,e)!=0&&O(t.k,e)==2&&EA(t.k,e,0)==2&&EA(t.k,e,1)==2){for(i=0;i<O(t.k,e);i++)if(n=_(t.k,e,i),n!=A&&O(t.k,n)==2){D=!0;break}for(r=0;r<O(t.k,e);r++){for(n=_(t.k,e,r),l=0,y=c(F,m,6,3,15,1),o=0;o<O(t.k,n);o++)y[l]=_(t.k,n,o),y[l]!=e&&++l;l==2&&t.q[y[0]]<t.q[y[1]]^y[0]<y[1]&&(D=!D)}}else{for(L=c(F,m,6,4,15,1),s=c(F,m,6,4,15,1),f=0,A!=-1&&(L[f]=A,s[f++]=8*t.q[A]),(xt(t.k,e)!=0||O(t.k,e)==3)&&(L[f]=Et,s[f++]=8*t.q[e]),r=0;r<O(t.k,e);r++)n=_(t.k,e,r),n!=A&&(L[f]=n,s[f++]=lY(t,e,r));D=UK(L,s)}return Q=v0(t.k,e)==1^D,xi(t.k,e)&&(P=ix(t.d,e),t.n[P]||(t.n[P]=!0,t.o[P]=Q),t.o[P]&&(Q=!Q)),Q?\"@@\":\"@\"}function Ia(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(ut(t.H,t.N),o=t.H.g,t.J=c(F,m,6,o,15,1),t.I=c(XA,re,6,o,14,1),i=0;i<o;i++)t.I[i]=d0(V(J(Wp(t.H,i),h0(t.H,i)),e4),gM),t.J[i]=X(t.H,i),(e&1)!=0&&(t.J[i]+=R1(t.H,i)+16<<8),(e&2)!=0&&(t.J[i]+=ge(t.H,i)<<16);for(t.M=c(XA,re,6,o,14,1),s=kn(t.H),Q=0;Q<s.j.a.length;Q++)for(y=G(s.k,Q).length,n=G(s.j,Q),P=0,r=n.length;P<r;++P)f=n[P],y==3?t.M[f]=J(t.M[f],h9):y==4?t.M[f]=J(t.M[f],T9):y==5?t.M[f]=J(t.M[f],c9):y==6?t.M[f]=J(t.M[f],w9):y==7&&(t.M[f]=J(t.M[f],g9));for(A=0;A<o;A++)y=Or(t.H,A),y==0?t.M[A]=J(t.M[A],w8):y>7&&(t.M[A]=J(t.M[A],Vf));for(L=t.H.i,t.K=c(F,m,6,L,15,1),D=0;D<L;D++)t.K[D]=(mj(t.H,D)|fe(t.H,D))&6422527^6291840}function Dy(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(Ln(t.i,0),n=zA(e,t.c),n!=0){if(K1(t),L=n==1^X(t.V,t.t)==1,mf(t.V,t.t,n,0,-1,0)){L&&(t.t=-1,N1(t,new x1(t,4,!0))),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));return}t.eb=w.Math.max(t.eb,0),P1(t.k)}if(t.j!=null&&t.j.length!=0&&(e=t.j),y=(yy(),o=(!ll&&KY(),Be(ll,rf(e.toLowerCase(),\"-\"))),o==null?null:tf(new WA(!1),o)),y){for(K1(t),D=new _A,mR(D,t.V,t.t,null),s=Qn(D,t.ab*24),i=D.r,A=0;A<D.r;A++)D.v[A]|=q0;for(as(D,y,0),U9(new a8(4),D),P=mt(t.V,t.t)-s*D.K[0].a,r=Rt(t.V,t.t)-s*D.K[0].b,f=t.V.r,as(t.V,y,t.t),l=t.V.r-f,Q=0;Q<l;Q++)de(t.V,f+Q,s*D.K[i+Q].a+P),Ve(t.V,f+Q,s*D.K[i+Q].b+r);hf(t.V),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))}}function Tp(t,e,A){if(R1(t.j,e)!=0)return 0;if(t.a){if(X(t.j,e)==5)return G1(t.j,e)!=2?0:(A&&b0(t.j,e,1),1);if(X(t.j,e)==7)return G1(t.j,e)!=2?0:(A&&b0(t.j,e,-1),nf(t,e)?6:3);if(X(t.j,e)==8)return G1(t.j,e)!=1?0:(A&&b0(t.j,e,-1),nf(t,e)?7:4);if(X(t.j,e)==16)return G1(t.j,e)!=1?0:(A&&b0(t.j,e,-1),nf(t,e)?5:2);if(X(t.j,e)==34)return G1(t.j,e)!=1?0:(A&&b0(t.j,e,-1),nf(t,e)?4:1)}else{if(X(t.j,e)==5)return G1(t.j,e)>2?0:(A&&b0(t.j,e,1),1);if(X(t.j,e)==7)return G1(t.j,e)>2?0:(A&&b0(t.j,e,-1),nf(t,e)?5:3);if(X(t.j,e)==8)return G1(t.j,e)>1?0:(A&&b0(t.j,e,-1),nf(t,e)?7:4);if(X(t.j,e)==16)return G1(t.j,e)>1?0:(A&&b0(t.j,e,-1),nf(t,e)?5:2)}return 0}function cp(t){var e,A;if(t.s==null&&!t.t)return null;if(t.t)return A=pQ(t.t),A?(iy(t,A),++t.p,_w(A,\"SO#\"+ ++t.a),A):null;if(t.j)return null;for(t.b.c==0&&Pr(t,c(F,m,6,t.q.length,15,1)),t.A=Lp(t.B,t.A,t.c);t.A&&!(gt(t.v,0)&&(q1(),I1(E1(Date.now()),t.v)));){if(e=Pr(t,t.A.d),t.A.c||(HG(t.A,rK(e,t.A.i,\"#\"+ ++t.a)),t.i&&vN(t.c,t.A)),t.A.b==0&&(gp(t,t.A,t.A.c),t.A.b!=0&&dtt(t,t.A),t.i&&(mJ(Oi(t.c,t.A),e,t.A.c),Oi(t.c,t.A))),t.A.b>t.B.r+3){if(t.A=Lp(t.B,t.A,t.c),t.A||t.p!=0)continue;if(t.C&&(t.t=new XQ(t.k),DU(t.t,t.v),q5(t.t,t.o,-1),A=pQ(t.t),A))return iy(t,A),++t.p,_w(A,\"SO#\"+ ++t.a),A;t.A=t.B.e,t.j=!0}if(t.A)return iy(t,t.A.c),t.A.g=!0,++t.p,t.i&&Oi(t.c,t.A),t.A.c}return null}function xa(t,e,A,n){var P,r,i,f,D,Q;if(P=i9(e,t.d),b0(e,P,t.e),tA(e,P,t.o,!1),aA(e,P,t.a),gt(t.c,0)&&(gt(V(t.c,2),0)?(t.c=V(t.c,-3),e.v[P]|=q0):e.v[P]&=Ry,w1(e,P,t.c,!0)),t.b){for(Q=c(F,m,6,t.b.d.a.length,15,1),D=0;D<t.b.d.a.length;D++)Q[D]=I9(t.b,D).a;MT(e,P,Q),t.b.d.a.length=0}else if(String.fromCharCode(A).toLowerCase().charCodeAt(0)==A&&ev(A)){if(t.d!=5&&t.d!=6&&t.d!=7&&t.d!=8&&t.d!=15&&t.d!=16&&t.d!=33&&t.d!=34)throw At(new H1(\"SmilesParser: atomicNo \"+t.d+\" must not be aromatic. Position:\"+(n-1)));e.v[P]|=q0}else e.v[P]&=Ry;if(t.f)for(f=new Zt(t.f);f.a<f.c.a.length;)i=_t(f),t.r=!0,$0(i,0,0),ve(e,!0),as(e,i,P);return t.g!=-1&&t.d!=1&&(r=c(E,I,6,1,15,1),r[0]=t.g<<24>>24,kX(e,P,r)),P}function Na(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(e==2||e==5)Ft(t.F,Af(t.G,t.G.length)),t.b&&Ft(t.a,$L(t.C,t.C.length));else if(e==4)s=yj(Af(t.G,t.G.length)),kU(t.O,s)||(Yi(t.O,s),Ft(t.F,Af(t.G,t.G.length)),t.b&&Ft(t.a,$L(t.C,t.C.length)));else if(e==3){if(s=yj(Af(t.G,t.G.length)),!kU(t.O,s)){for(L=!1,Q=(f=new J8(new K8(new br(t.O.a).a).b),new jr(f));Nr(Q.a.a);){for(D=(i=H9(Q.a),i.hd()),o=0,n=s,P=0,r=n.length;P<r;++P){for(A=n[P];o<D.length&&D[o]<A;)++o;if(o<D.length&&A==D[o]){L=!0;break}}if(L)break}L||(Yi(t.O,s),Ft(t.F,Af(t.G,t.G.length)),t.b&&Ft(t.a,$L(t.C,t.C.length)))}}else e==6&&(s=zZ(t,Af(t.G,t.G.length)),kU(t.O,s)||(Yi(t.O,s),Ft(t.F,Af(t.G,t.G.length)),t.b&&Ft(t.a,$L(t.C,t.C.length))))}function Nn(t,e,A,n,P){var r,i,f;return r=e.r,r>=e.N&&VQ(e,e.N*2),f=(t.v[A]&b1)>>18,i=-1,f==1?n==-1?i=ne(e,f):i=w.Math.min(31,n+((t.v[A]&b1)>>18!=1&&(t.v[A]&b1)>>18!=2?-1:(t.v[A]&VA)>>20)):f==2&&(P==-1?i=ne(e,f):i=w.Math.min(31,P+((t.v[A]&b1)>>18!=1&&(t.v[A]&b1)>>18!=2?-1:(t.v[A]&VA)>>20))),e.D[r]=t.D[A],e.t[r]=t.t[A],e.B[r]=t.B[A],e.v[r]=t.v[A],e.C[r]=e.L?t.C[A]:0,HD(e.K[r],t.K[A]),e.A[r]=t.A[A],e.w!=null&&(e.w[r]=null),t.w!=null&&t.w[A]!=null&&e.L&&(e.w==null&&(e.w=c(F,u0,7,e.D.length,0,2)),e.w[r]=Mn(t.w[A],t.w[A].length)),e.u!=null&&(e.u[r]=null),t.u!=null&&t.u[A]!=null&&(e.u==null&&(e.u=c(E,m8,10,e.D.length,0,2)),e.u[r]=oO(t.u[A],t.u[A].length)),i!=-1&&(e.v[r]&=-32505857,e.v[r]|=i<<20),++e.r,e.U=0,r}function Ga(t,e){s8();var A,n,P,r,i,f,D,Q,o,L,s;for(r=0;r<e.g;r++)if(e.p[r]==2&&e.k[r]==2&&e.o[r][0]==2&&e.o[r][1]==2&&e.D[r]<=7&&(o=e.v[r]&3,o==1||o==2)){for(n=c(F,m,6,4,15,1),s=c(F,m,6,2,15,1),f=0;f<e.k[r];f++){for(A=e.j[r][f],Q=Et,D=0;D<e.k[A];D++)i=e.j[A][D],i!=r&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=r}if(n[0]==Et||n[3]==Et){q1(),\"\"+Me(new bA(e));break}Ft(t,new eT(e,n,s,(e.v[r]&gn)!=0,o==1))}for(P=0;P<e.i;P++)if(o=e.G[P]&3,(o==1||o==2)&&dt(e,P)!=2){for(n=c(F,m,6,4,15,1),s=c(F,m,6,2,15,1),f=0;f<2;f++){for(A=e.F[f][P],L=e.F[1-f][P],Q=Et,D=0;D<e.k[A];D++)i=e.j[A][D],i!=L&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=e.F[1-f][P]}Ft(t,new eT(e,n,s,(e.G[P]&64)!=0,o==2))}}function Oa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(f=Es(t),i=c(Pt,it,6,f+1,16,1),l=new Zt(t.g);l.a<l.c.a.length;)for(s=_t(l),A=0;A<s.r;A++)if(P=w.Math.abs(s.A[A]),P!=0){if(i[P])throw At(new H1(\"Duplicate mapping no in reactants: \"+P));i[P]=!0}for(r=c(Pt,it,6,f+1,16,1),L=new Zt(t.f);L.a<L.c.a.length;)for(Q=_t(L),A=0;A<Q.r;A++)if(P=w.Math.abs(Q.A[A]),P!=0){if(r[P])throw At(new H1(\"Duplicate mapping no in products: \"+P));r[P]=!0}for(D=c(F,m,6,f+1,15,1),n=0,e=1;e<=f;e++)i[e]&&r[e]&&(D[e]=++n);if(n!=f){for(y=new Zt(t.g);y.a<y.c.a.length;)for(s=_t(y),A=0;A<s.r;A++)tA(s,A,D[w.Math.abs(s.A[A])],s.A[A]<0);for(o=new Zt(t.f);o.a<o.c.a.length;)for(Q=_t(o),A=0;A<Q.r;A++)tA(Q,A,D[w.Math.abs(Q.A[A])],Q.A[A]<0)}}function qa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(g=(ut(t,7),t.q),!g.e[e])return 1;if(G(g.k,e).length==6){for(n=G(g.j,e),P=0,r=n.length;P<r;++P)if(A=n[P],G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1;for(D=G(g.k,e),Q=0,o=D.length;Q<o;++Q)if(f=D[Q],L=B(d(F,1),m,6,15,[-1,-1]),dt(t,f)==1){for(y=0;y<=1;y++)for(i=t.F[y][f],s=0;s<t.e[i];s++)if(l=t.j[i][s],!wA(g,e,l)&&dt(t,o1(t,i,l))==2){L[y]=l;break}if(L[0]>-1&&L[1]>-1)for(T=0;T<g.j.a.length;T++){if(wA(g,T,L[0])&&wA(g,T,L[1])&&t.b[T]==2)return 2;if(wA(g,T,L[0])&&wA(g,T,L[1])&&t.b[T]!=0)return 1}}}if(G(g.k,e).length==5)for(h=1,n=G(g.j,e),P=0,r=n.length;P<r;++P){if(A=n[P],G1(t,A)+xt(t,A)==t.e[A]+xt(t,A)&&h>0){--h;continue}if(G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1}return 0}function l6(t){var e,A,n,P,r,i,f,D,Q,o,L;for(e=0;e<t.R.g;e++)if(t.db[e]==1||t.db[e]==2){if(D=!1,oT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,o=c(F,m,6,3,15,1),Q=0;Q<O(t.R,P);Q++)o[L]=_(t.R,P,Q),o[L]!=e&&++L;L==2&&t.f[o[0]]>t.f[o[1]]^o[0]<o[1]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),r<i&&(D=!D);me(t.R,e,t.db[e]==1^D?1:2,t.fb[e])}else me(t.R,e,t.db[e],t.fb[e]);for(A=0;A<t.R.i;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=K(t.R,f,A),O(t.R,n)==3){for(o=c(F,m,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=K(t.R,1-f,A)&&(o[L++]=_(t.R,n,Q));t.f[o[0]]>t.f[o[1]]&&(D=!D),o[0]<o[1]&&(D=!D)}Q8(t.R,A,t.o[A]==1^D?1:2,t.p[A])}else Q8(t.R,A,t.o[A],t.p[A])}function wp(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(ut(t,n?7:1),e.w=null,t.L&&ve(e,!0),P==null&&(P=c(F,m,6,t.r,15,1)),e.r=0,r=0;r<t.r;r++)for(P[r]=-1,o=0;o<t.k[r];o++)if(A[t.n[r][o]]){if(P[r]=Nn(t,e,r,0,0),t.D[r]==1&&(s=G1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.n[r][L]]){aA(e,P[r],s);break}}break}for(Q=c(F,m,6,t.s,15,1),e.s=0,D=0;D<t.s;D++)A[D]?Q[D]=o9(t,e,D,0,0,P==null?t.F[0][D]:P[t.F[0][D]],P==null?t.F[1][D]:P[t.F[1][D]],n):(Q[D]=-1,i=t.F[0][D],f=t.F[1][D],P[i]==-1^P[f]==-1&&t.t[i]!=0&&t.t[f]!=0&&t.t[i]<0^t.t[f]<0&&(P[i]!=-1&&(e.t[P[i]]+=t.t[i]<0?1:-1),P[f]!=-1&&(e.t[P[f]]+=t.t[f]<0?1:-1)));return gL(t,e),t.d&&(e.U=0),e.U=0,ne(e,1),ne(e,2),e.r!=t.r&&ve(e,!0),Ap(t,e,t.r,P,Q),Eb(t,e,t.r,P),n&&jf(new p9(e),null,!1),P}function za(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(f=0,A=0;A<t.f.r;A++)W0(t.f,A)&&++f;if(!(f<2)){for(L=0,Q=0,o=0;o<t.f.s;o++)n=K(t.f,0,o),P=K(t.f,1,o),W0(t.f,n)&&W0(t.f,P)&&(t.c[o]=!0,t.b[n]=!0,t.b[P]=!0,Q+=ET(t.f,o),++L);for(L!=0&&Q!=0?Q/=L:Q=G8(t.f),r=0;r<t.f.r;r++)W0(t.f,r)&&!t.b[r]&&--f;if(!(f<2)){for(v=c(F,m,6,t.f.r,15,1),s=Ur(t.f,v,!0,!0),k=c(F,m,6,s,15,1),i=0;i<t.f.r;i++)v[i]!=-1&&++k[v[i]];for(g=c(oc,A0,48,s,0,1),l=0;l<s;l++)g[l]=new VP(t.f,k[l],!0);for(D=c(F,m,6,s,15,1),e=0;e<t.f.r;e++)h=v[e],h!=-1&&(g[h].k[D[h]]=Qe,g[h].e[D[h]]=e,g[h].a[D[h]]=mt(t.f,e)/Q,g[h].b[D[h]]=Rt(t.f,e)/Q,++D[h]);for(b=-1,j=0,T=0;T<s;T++)j<k[T]&&(j=k[T],b=T);for(CP(t.d,g[b]),y=0;y<s;y++)y!=b&&CP(t.d,g[y])}}}function Ka(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(n=0;n<t.e[e];n++)switch(o=t.j[e][n],t.D[o]){case 6:return 5;case 7:switch(p6(t,o)){case 8:case 39:case 62:case 67:case 68:return 23;case 34:case 54:case 55:case 56:case 58:case 81:return 36;case 9:return 27;default:return 28}case 8:switch(p6(t,o)){case 49:return 50;case 51:return 52;case 70:return 31;case 6:for(P=!1,r=!1,i=!1,f=!1,D=0;D<t.e[o];D++){if(L=t.j[o][D],t.D[L]==6)for(Q=0;Q<t.e[L];Q++)s=t.j[L][Q],s!=o&&(A=o1(t,L,s),(t.D[s]==6||t.D[s]==7)&&(dt(t,A)==2||A<t.i&&Ee(t.q,A))&&(P=!0),t.D[s]==8&&dt(t,A)==2&&(r=!0));t.D[L]==15&&(i=!0),t.D[L]==16&&(f=!0)}if(r||i)return 24;if(P)return 29;if(f)return 33;default:return 21}case 14:return 5;case 16:case 15:return 71}return 0}function Ja(t){var e,A,n,P,r,i,f,D,Q,o,L;if(t.n==null){if(t.b)for(n=t.j+1,t.p=c(F,DA,29,t.o.length,0,3),r=0;r<t.o.length;r++){for(t.p[r]=c(F,u0,7,t.g[r].a.length,0,2),f=0;f<t.g[r].a.length;f++)t.p[r][f]=wX(t,r,G(t.g[r],f),n);for(n+=t.o[r].g,P=C9(t.c,r),e=0;e<P.g;e++)gt(V(P.C[e],Pe),0)||--n}if(t.n=j1(gr,[DA,B9],[78,26],0,[t.q,t.c.f.a.length],2),t.d=j1(ft,[DA,Dt],[13,2],6,[t.q,t.c.f.a.length],2),t.e=c(Pt,it,6,t.q,16,1),L=new ou,o=new C0,i=0,A=0,t.q!=0){D=c(F,m,6,t.o.length,15,1);do{for(Q=o.a.length,0<Q?o.a=hA(o.a,0,0):0>Q&&(o.a+=z8(c(Fr,re,6,-Q,15,1))),r=0;r<t.c.f.a.length;r++)t.n[i][r]=v1t(t,t.g,D,r),t.d[i][r]=Me(new bA(t.n[i][r])),q(o,t.d[i][r]);t.e[i]=Ns(L,o.a)==-1,(!t.t||!t.e[i])&&++A,++i}while(fK(t,D)&&A<t.i)}}}function gp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(t.i&&(Oi(t.c,e).a=null),D=0,f=null,T=A.o,n=1;n<T.r;n++)for(k=XD(T.D[n]),P=0;P<n;P++)t.u[n][P]||(h=k+XD(T.D[P]),o=w.Math.abs(A.k[n].a-A.k[P].a),o<h&&(L=w.Math.abs(A.k[n].b-A.k[P].b),L<h&&(s=w.Math.abs(A.k[n].c-A.k[P].c),s<h&&(Q=w.Math.sqrt(o*o+L*L+s*s),Q<h&&(g=(h-Q)/h,i=20*g*g,D+=i,t.i&&(iO(Oi(t.c,e),\"a1:\"+n+\" f1:\"+t.g[n]+\" a2:\"+P+\" f2:\"+t.g[P]+UE+(A9(),Q9(Q,5))+\" min:\"+Q9(h,5)),Oi(t.c,e).a==null&&(r=c(F,m,6,2,15,1),r[0]=n,r[1]=P,RI(Oi(t.c,e),r))),f==null&&(f=c(Ut,c0,15,t.q.length,0,2)),y=t.g[n],l=t.g[P],y<l?(f[l]==null&&(f[l]=c(Ut,Tt,6,l,15,1)),f[l][y]+=i):(f[y]==null&&(f[y]=c(Ut,Tt,6,y,15,1)),f[y][l]+=i))))));return Mv(e,D,f),D!=0}function Ya(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(Q=k1(X1(e)),Q.length==0||(t.e=Q),X1(e),n=X1(e),!A&&n.startsWith(Yy)&&(P=(zt(13,n.length+1),n.substr(13)),WQ(P,!0,t)))return!0;if(l=X1(e),i=new Du,l!=null&&l.startsWith(\"M  V30 COUNTS\")){if(y=k1((zt(13,l.length+1),l.substr(13))),o=c8(y,\" \"),s=L1(o[0],f1,Et),L=L1(o[1],f1,Et),s>0){if(l=X1(e),e1(JC,l))for(r=0;r<s;r++){f=new _A,D=new su,D.a+=YC;do l=X1(e),D.a+=\"\"+l,D.a+=nn;while(l!=null&&!l.startsWith(a6));SU(i,f,new un(new Sr(D.a))),Ft(t.g,f),t.d=-1}l=X1(e)}if(L>0&&(l=X1(e),e1(XC,l))){for(r=0;r<L;r++){f=new _A,D=new su,D.a+=YC;do l=X1(e),D.a+=\"\"+l,D.a+=nn;while(l!=null&&!l.startsWith(a6));SU(i,f,new un(new Sr(D.a))),Ft(t.f,f),t.d=-1}l=X1(e)}return!0}return!1}function dp(t){var e,A,n,P,r,i,f;return i=\"\",t.length==0?new k3(S4,I4):(f=k1(t),f.startsWith(\"at \")&&(f=(zt(3,f.length+1),f.substr(3))),f=f.replace(/\\[.*?\\]/g,\"\"),P=f.indexOf(\"(\"),P==-1?(P=f.indexOf(\"@\"),P==-1?(i=f,f=\"\"):(i=k1((zt(P+1,f.length+1),f.substr(P+1))),f=k1((Mt(0,P,f.length),f.substr(0,P))))):(e=f.indexOf(\")\",P),i=(Mt(P+1,e,f.length),f.substr(P+1,e-(P+1))),f=k1((Mt(0,P,f.length),f.substr(0,P)))),P=f.indexOf(p0(46)),P!=-1&&(f=(zt(P+1,f.length+1),f.substr(P+1))),(f.length==0||e1(f,\"Anonymous function\"))&&(f=S4),r=i.lastIndexOf(p0(58)),A=sG(i,p0(58),r-1),n=I4,r!=-1&&A!=-1&&(n=(Mt(0,A,i.length),i.substr(0,A)),Kg((Mt(A+1,r,i.length),i.substr(A+1,r-(A+1)))),Kg((zt(r+1,i.length+1),i.substr(r+1)))),new k3(f,n))}function Bp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(l=!1,n=0;n<t.L.i;n++)Q=null,Ru(t.L,n)?(L=$h(t.L,n),o=M3(t.L,n),Q=L==o?\"[\"+L+\"]\":\"[\"+L+\":\"+o+\"]\"):(fe(t.L,n)&Qo)!=0?Q=(fe(t.L,n)&Qo)==KA?\"a\":(fe(t.L,n)&384)==256?\"!ar\":\"!a\":(fe(t.L,n)&384)!=0&&(Q=(fe(t.L,n)&384)==256?\"r\":\"!r\"),s=(fe(t.L,n)&NP)>>17,s!=0&&(y=s==1?\"8-11\":s==2?\">11\":\"\"+s,Q=(Q==null?\"\":Q.endsWith(\"r\")?Q:Q+\"r\")+y),Q!=null&&(e=K(t.L,0,n),A=K(t.L,1,n),l||(t.Cb((t.X*2+1)/3|0),l=!0),h=(W1(t.R,mt(t.L,e))+W1(t.R,mt(t.L,A)))/2,T=(Z1(t.R,Rt(t.L,e))+Z1(t.R,Rt(t.L,A)))/2,r=W1(t.R,mt(t.L,A))-W1(t.R,mt(t.L,e)),i=Z1(t.R,Rt(t.L,A))-Z1(t.R,Rt(t.L,e)),P=w.Math.sqrt(r*r+i*i),D=.6*t.vb(Q),f=.55*t.wb(),P!=0&&(r>0?EP(t,h+D*i/P,T-f*r/P,Q,!0):EP(t,h-D*i/P,T+f*r/P,Q,!0)));l&&t.Cb(t.X)}function Li(t){var e,A,n,P,r,i,f,D,Q,o,L;for(ut(t,1),rz(t),Q=!1,A=0;A<t.g;A++)if(t.D[A]==7&&t.t[A]==0){if(L=G1(t,A),L==4){for(o=0;o<t.k[A];o++)if(f=t.j[A][o],t.o[A][o]==1&&t.D[f]==8&&t.k[f]==1&&t.t[f]==0){Q=!0,++t.t[A],--t.t[f];break}}else if(L==5)for(o=0;o<t.k[A];o++){if(f=t.j[A][o],D=t.n[A][o],t.o[A][o]==2&&t.D[f]==8){Q=!0,++t.t[A],--t.t[f],t.I[D]=1;break}if(t.o[A][o]==3&&t.D[f]==7){Q=!0,++t.t[A],--t.t[f],t.I[D]=2;break}}}for(i=!1,r=0;r<t.i;r++)for(o=0;o<2;o++)if(rA(t,t.F[o][r])){e=t.F[1-o][r],P=t.D[e],(P==3||P==11||P==19||P==37||P==55||P==87||(n=t.D[e],n==4||n==12||n==20||n==38||n==56||n==88))&&(dt(t,r)==1?(++t.t[e],--t.t[t.F[o][r]],t.I[r]=512,i=!0):t.I[r]==16&&(t.I[r]=512,i=!0));break}return i&&(Rf(t),Q=!0),Q&&(t.U=0),Q}function h6(t,e){var A,n,P,r,i,f;if(t.L.r!=0){for(ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),t.B=e,qm(t),P=Xa(t.L),r=!1,t.p=c(F,m,6,t.L.r,15,1),A=0;A<t.L.r;A++)t.p[A]=wu(t.L,A),t.p[A]!=0&&(r=!0),i0(t.L,A)&&(t.p[A]=128),Ud(t.L,A)&&(t.G&O1)==0&&(t.p[A]=256);for($1(t,-10),$W(t),EX(t),G_(t),oX(t),t.Cb(t.X),t.Ab(t.Y),$1(t,t.Q),xk(t),t.U.a.length=0,t.$.a.length=0,(t.G&1)!=0&&(zp(t,P),hk(t),Bp(t)),i=0;i<t.L.r;i++)wQ(t,i)?($1(t,-3),aQ(t,i,P),$1(t,t.Q)):t.p[i]!=0?($1(t,t.p[i]),aQ(t,i,P),$1(t,t.Q)):!r&&t.L.P!=1&&X(t.L,i)!=1&&X(t.L,i)!=6&&(t.G&Qe)==0&&IA(t.L,i)==null&&X(t.L,i)<sl.length&&sl[X(t.L,i)]!=0?(f=sl[X(t.L,i)],gq(t,(n=t.M!=0?t.M:t.D!=0?t.D:-1,$s(f,n))),aQ(t,i,P),$1(t,t.Q)):aQ(t,i,P);(t.G&1)==0&&(hk(t),Bp(t),zp(t,P))}}function vp(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;for(T=c(F,m,6,n+1,15,1),g=c(F,m,6,r+1,15,1),k=r,D=D9(P[r-1]),D!=0?(r5(g,P,0,D),r5(T,A,0,D)):(PA(A,0,T,0,n),PA(P,0,g,0,r)),Q=g[k-1],L=e-1,s=n;L>=0;){if(o=0,T[s]==Q)o=-1;else if(v=at(Wt(V(T[s],g1),32),V(T[s-1],g1)),R=xW(v,Q),o=Ot(R),j=Ot(O0(R,32)),o!=0){l=0,C=0,b=!1,++o;do{if(--o,b)break;l=yn(V(o,g1),V(g[k-2],g1)),C=at(Wt(j,32),V(T[s-2],g1)),h=at(V(j,g1),V(Q,g1)),D9(Ot(j0(h,32)))<32?b=!0:j=Ot(h)}while(I1(d0(l,uE),d0(C,uE)))}if(o!=0&&(i=EZ(T,s-k,g,k,o),i!=0))for(--o,f=0,y=0;y<k;y++)f=at(f,at(V(T[s-k+y],g1),V(g[y],g1))),T[s-k+y]=Ot(f),f=j0(f,32);t[L]=o,--s,--L}return D!=0?(Sb(g,k,T,0,D),g):(PA(T,0,g,0,r),T)}function Xa(t){var e,A,n,P,r,i,f;for(ut(t,15),i=c(F,m,6,3,15,1),A=0;A<t.g;A++)(t.v[A]&wn)!=0&&(f=(t.v[A]&b1)>>18,f!=0&&(i[f]=w.Math.max(i[f],(t.v[A]&b1)>>18!=1&&(t.v[A]&b1)>>18!=2?-1:(t.v[A]&VA)>>20)));for(P=0;P<t.i;P++)((t.G[P]&3)==1||(t.G[P]&3)==2)&&t.I[P]==1&&(f=(t.G[P]&768)>>8,f!=0&&(i[f]=w.Math.max(i[f],(t.G[P]&768)>>8!=1&&(t.G[P]&768)>>8!=2?-1:(t.G[P]&cn)>>10)));for(r=c(F,u0,7,3,0,2),r[1]=c(F,m,6,1+i[1],15,1),r[2]=c(F,m,6,1+i[2],15,1),e=0;e<t.g;e++)(t.v[e]&wn)!=0&&(f=(t.v[e]&b1)>>18,f!=0&&++r[f][(t.v[e]&b1)>>18!=1&&(t.v[e]&b1)>>18!=2?-1:(t.v[e]&VA)>>20]);for(n=0;n<t.i;n++)((t.G[n]&3)==1||(t.G[n]&3)==2)&&t.I[n]==1&&(f=(t.G[n]&768)>>8,f!=0&&++r[f][(t.G[n]&768)>>8!=1&&(t.G[n]&768)>>8!=2?-1:(t.G[n]&cn)>>10]);return r}function Za(t,e){var A,n,P,r;for(t.b&&Mi(t.b),t.c&&Mi(t.c),P=0,n=X1(e);n!=null&&n.startsWith(Lo);){for(n=k1((zt(7,n.length+1),n.substr(7)));n.endsWith(\"-\");){if(A=X1(e),!A.startsWith(Lo))return!1;n=k1(Su(hA(n,0,n.length-1),(zt(7,A.length+1),A.substr(7))))}if(n.startsWith(\"BEGIN\"))if(r=k1((zt(6,n.length+1),n.substr(6))),r.startsWith(\"CTAB\"))P=1;else if(r.startsWith(\"ATOM\"))P=2;else if(r.startsWith(\"BOND\"))P=3;else if(r.startsWith(\"SGROUP\"))P=4;else if(r.startsWith(\"COLLECTION\"))P=5;else return!1;else if(n.startsWith(\"END\"))P=0;else if(P==1)AY(t,n);else if(P==2)L1t(t,n);else if(P==3)Ltt(t,n);else if(P==4)ctt(t,n);else if(P==5)Wa(t,n);else return!1;n=X1(e)}for(;n!=null&&!(n.startsWith(hr)||e1(n,Uo));)n=X1(e);return!0}function Wa(t,e){var A,n,P,r,i,f;if(f=Fz(e),f!=null){if(i=iW(e,f),e.startsWith(\"MDLV30/STEABS\"))if(e1(f,E2))for(r=0;r<i.length;r++)Ne(t.j,YD(t,i[r]),0,-1);else for(P=0;P<i.length;P++)T8(t.j,wL(t,i[P]),0,-1);else if(e.startsWith(\"MDLV30/STERAC\"))if(n=L1(hA(e,13,ue(e,13)),f1,Et),e1(f,E2))for(r=0;r<i.length;r++)Ne(t.j,YD(t,i[r]),1,n-1);else for(P=0;P<i.length;P++)T8(t.j,wL(t,i[P]),1,n-1);else if(e.startsWith(\"MDLV30/STEREL\"))if(n=L1(hA(e,13,ue(e,13)),f1,Et),e1(f,E2))for(r=0;r<i.length;r++)Ne(t.j,YD(t,i[r]),2,n-1);else for(P=0;P<i.length;P++)T8(t.j,wL(t,i[P]),2,n-1);else if(e.startsWith(\"MDLV30/HILITE\"))if(e1(f,E2))for(P=0;P<i.length;P++)RD(t.j,YD(t,i[P]),448);else for(P=0;P<i.length;P++)A=wL(t,i[P]),RD(t.j,K(t.j,0,A),448),RD(t.j,K(t.j,1,A),448)}}function _a(t){var e,A,n,P,r,i,f,D,Q;if(!t.i)return!1;Ln(t.g,0),Ln(t.b,0),t.f=null,Q=!1,A=-1,n=null,t.c=t.d==null?null:c(ft,Dt,2,t.d.length,6,1),t.e=-1;do{try{if(D=X1(t.i),D==null)return Ln(t.g,0),!1}catch(o){if(o=_1(o),Yt(o,79))return Ln(t.g,0),!1;throw At(o)}if(Q)q(t.b,D),Ye(t.b,10);else if(D.startsWith(\">\"))Q=!0,q(t.g,hr),Ye(t.g,10),q(t.b,D),Ye(t.b,10);else{q(t.g,D),Ye(t.g,10),D.startsWith(hr)&&(Q=!0);continue}if(t.d!=null)if(D.length==0)A=-1;else if(A==-1){if(n=IR(D),n!=null){for(A=-1,e=0;e<t.d.length;e++)if(e1(n,t.d[e])){A=e;break}if(t.e==-1){for(r=RE,i=0,f=r.length;i<f;++i)if(P=r[i],e1(n,P)){t.e=A;break}}}}else t.c[A]==null?t.c[A]=D:t.c[A]=Su(Su(t.c[A],nn),D)}while(!D.startsWith(Uo));return!0}function $a(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(A=0;A<t.r;A++)y=En(t,A),y+en(t,A,y,t.D[A])-G1(t,A)<=0&&!(t.t[A]==0&&(t.D[A]==5||(P=t.D[A],P==7||P==15||P==33)||(n=t.D[A],n==8||n==16||n==34||n==52||n==84)))&&(t.C[A]=V(t.C[A],-6145));if(t.T)return!1;for(i=!1,e=0;e<t.g;e++)if(f=t.e[e]-t.k[e],f>0)for(n0(V(t.C[e],O1),0)&&(o=n0(V(t.C[e],uP),896)?3:n0(V(t.C[e],uP),384)?2:n0(V(t.C[e],128),128)?1:0,D=(y=En(t,e),y+en(t,e,y,t.D[e])-G1(t,e)),t.t[e]==0&&n0(V(t.C[e],yr),0)&&t.D[e]!=6&&++D,L=f,L>3-o&&(L=3-o),L>D+f-o&&(L=D+f-o),L>0&&(s=o==0?0:Wt(V(t.C[e],uP),L),s=J(s,(L==3?7:f==2?3:1)<<7),t.C[e]=V(t.C[e],-1921),t.C[e]=J(t.C[e],V(uP,s)))),Q=t.k[e];Q<t.e[e];Q++)r=t.n[e][Q],t.I[r]==1&&(t.D[t.j[e][Q]]=-1,t.I[r]=512,i=!0);return i&&Rf(t),i}function Fp(t,e){var A,n,P,r,i,f,D,Q,o,L;if((e&~t.U)!=0&&((t.U&1)==0&&(wR(t),Gp(t),t.U|=1,t.L&&!rT(t)&&$a(t)&&(wR(t),Gp(t),t.U|=1)),(e&~t.U)!=0)){if((t.U&-7)!=0){for(n=0;n<t.g;n++)t.v[n]&=-15369;for(r=0;r<t.i;r++)t.G[r]&=-705;if((e&4)==0){lR(t,1),t.U|=2;return}for(lR(t,7),P=0;P<t.g;P++)for(o=0;o<t.k[P];o++)if(D=t.n[P][o],!(D<t.i&&Ee(t.q,D)))for(f=t.j[P][o],L=0;L<t.k[f];L++)t.n[f][L]!=D&&t.o[f][L]>1&&(t.D[t.j[f][L]]==6?t.v[P]|=S0:!eA(t,t.n[f][L])&&rA(t,t.j[f][L])&&(t.v[P]|=je));for(;;){for(Q=!1,A=0;A<t.g;A++)if(t.p[A]>0&&(t.v[A]&je)!=0&&!f0(t.q,A)){for(o=0;o<t.k[A];o++)if(t.o[A][o]>1)for(f=t.j[A][o],D=t.n[A][o],L=0;L<t.k[f];L++)t.n[f][L]!=D&&(i=t.j[f][L],(t.v[i]&je)==0&&(t.v[i]|=je,Q=!0))}if(!Q)break}}t.U|=6}}function kp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(ut(t,7),Q=0,P=0;P<t.i;P++)dt(t,P)==1&&!(P<t.i&&Ee(t.q,P))&&P0(t,t.F[0][P])>1&&P0(t,t.F[1][P])>1&&(t.G[P]&64)==0&&!((t.G[P]&128)!=0&&(t.q&&P<t.i?TP(t.q,P):0)<=5)&&(e[P]=!0,++Q);for(i=c(F,m,6,2,15,1),y=c(F,m,6,2,15,1),r=null,n=0;n<t.i;n++)if(e[n]&&(r==null||!r[n])){for(A=0,L=0;L<2;L++)for(i[L]=t.F[L][n],y[L]=t.F[1-L][n],h=y[L];t.p[i[L]]==2&&P0(t,i[L])==2&&t.D[i[L]]<10;){for(s=0;s<2;s++)if(f=t.j[i[L]][s],f!=y[L]){D=t.n[i[L]][s],e[D]&&dt(t,D)==1&&(e[D]=!1,--Q),y[L]=i[L],i[L]=f,++A;break}if(i[L]==h){A=0;break}}A!=0&&(e[n]=!1,--Q,P0(t,i[0])>1&&P0(t,i[1])>1&&(T=H5(t,y[0],i[0]),g=H5(t,y[1],i[1]),o=T<g?0:1,l=o1(t,y[o],i[o]),r==null&&(r=c(Pt,it,6,t.i,16,1)),r[l]=!0,e[l]=!0,++Q))}return Q}function $Q(t,e,A){var n,P,r,i,f,D,Q,o;if(t.o[e]!=0)return!1;if(t.R.L){for(Q=0;Q<2;Q++)for(n=K(t.R,Q,e),o=0;o<Ct(t.R,n);o++)if(ye(t.R,_(t.R,n,o)))return!1}return dt(t.R,e)==1?P$(t,e,A):dt(t.R,e)!=2||eA(t.R,e)||(r=K(t.R,0,e),i=K(t.R,1,e),O(t.R,r)==1||O(t.R,i)==1)||O(t.R,r)>3||O(t.R,i)>3||e0(t.R,r)==2||e0(t.R,i)==2||(f=new Ff(t.R,t.f,i,r),f.f&&A==1)||(D=new Ff(t.R,t.f,r,i),D.f&&A==1)||f.f&&D.f?!1:(A==3&&(f.f&&f.c&&(t.V[e]=!0),D.f&&D.c&&(t.V[e]=!0)),P=Yh(t.R,e)?3:t.jb?ltt(t,f,D):_z(f,D),A==1?t.o[e]=P:A==2&&(f.f&&(P==1?se(t.e[f.b],t.f[r]):P==2&&se(t.e[f.d],t.f[r])),D.f&&(P==1?se(t.e[D.b],t.f[i]):P==2&&se(t.e[D.d],t.f[i]))),!0)}function aa(t){var e,A,n,P,r,i,f,D,Q,o,L;for(A=0,L=new Zt(t.g);L.a<L.c.a.length;)if(Q=_t(L),ut(Q,1),Q.L)for(e=0;e<Q.g;e++)if(gt(V(Q.C[e],Pe),0)){if(w.Math.abs(Q.A[e])!=0)return!1}else++A;else A+=Q.g;for(D=new Zt(t.f);D.a<D.c.a.length;)if(i=_t(D),ut(i,1),i.L)for(e=0;e<i.g;e++)if(gt(V(i.C[e],Pe),0)){if(w.Math.abs(i.A[e])!=0)return!1}else--A;else A-=i.g;if(A!=0)return!1;for(r=Es(t),n=c(Pt,it,6,r+1,16,1),o=new Zt(t.g);o.a<o.c.a.length;)for(Q=_t(o),e=0;e<Q.g;e++)if(!Q.L||n0(V(Q.C[e],Pe),0)){if(P=w.Math.abs(Q.A[e]),n[P])return!1;n[P]=!0}for(f=new Zt(t.f);f.a<f.c.a.length;)for(i=_t(f),ut(i,1),e=0;e<i.g;e++)if(!i.L||n0(V(i.C[e],Pe),0)){if(P=w.Math.abs(i.A[e]),P>=r||!n[P])return!1;n[P]=!1}return!0}function ttt(t,e,A,n){var P,r,i,f,D,Q,o,L;for(f=t.e[n],D=f+1;D<t.A&&t.f[t.s[D]]==n;)++D;for(o=f;o<D;o++)A[o]=-1;for(i=f;;){if(L=t.u[i]==-1?t.H.g:Le(t.H,t.G[t.u[i]]),++A[i],A[i]==L){if(A[i]=-1,i==f)break;--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1);continue}if(t.u[i]==-1)e[A[i]]||Ly(t,A[i],t.s[i])&&(t.G[t.s[i]]=A[i],e[A[i]]=!0,++i);else{if(_(t.H,t.G[t.u[i]],A[i])>=t.H.g)continue;r=_(t.H,t.G[t.u[i]],A[i]),t.t[i]?r==t.G[t.s[i]]&&ey(t,Nt(t.H,t.G[t.u[i]],A[i]),t.v[i])&&++i:e[r]||Ly(t,r,t.s[i])&&ey(t,Nt(t.H,t.G[t.u[i]],A[i]),t.v[i])&&(e[r]=!0,t.G[t.s[i]]=r,++i)}if(i==D){if(Mp(t,n)&&hR(t,n)&&AR(t,e,n)){for(Q=f;Q<D;Q++)t.t[Q]||(P=t.s[Q],e[t.G[P]]=!1,t.G[P]=-1);return!0}--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1)}}return!1}function ett(t){var e,A,n,P,r,i,f;if(i=Ki(t.o),A=null,i.length!=0&&(n=i.indexOf(p0(64)),n!=-1&&(A=(Mt(0,n,i.length),i.substr(0,n)),i=(zt(n+1,i.length+1),i.substr(n+1)))),i.length!=0&&(e=zA(i,t.d.c),e!=0||e1(i,\"?\"))){if(P=0,Ki(t.p).length!=0)try{if(P=L1(Ki(t.p),f1,Et),P<(J1(),wr)[e]-18||P>wr[e]+12){ED(t.c,\"Your mass is out of range!\");return}}catch(D){if(D=_1(D),Yt(D,42)){ED(t.c,\"Your mass is not a number!\");return}else throw At(D)}if(f=-1,Ki(t.q).length!=0)try{if(f=L1(Ki(t.q),f1,Et),f<0||f>15){ED(t.c,\"Your valence is out of range!\");return}}catch(D){if(D=_1(D),Yt(D,42)){ED(t.c,\"Your valence is not a number!\");return}else throw At(D)}r=F0(t.b)==1?32:F0(t.b)==2?48:F0(t.b)==3?16:0,jG(t.d,e,P,f,r,A),t.a!=-1&&(mf(t.e,t.a,e,P,f,r),IP(t.e,t.a,A)),t.f=!0,N9(t.c)}}function T6(){T6=v1,VE=B(d(ft,1),Dt,2,6,[\"\",\"r0\",\"r\",\"r3\",\"r3-4\",\"r3-5\",\"r3-6\",\"r3-7\",\"r4\",\"r4-5\",\"r4-6\",\"r4-7\",\"r>3\",\"r5\",\"r5-6\",\"r5-7\",\"r>4\",\"r6\",\"r6-7\",\"r>5\",\"r7\",\"r>6\",\"r>7\",\"r0|>7\"]),HE=B(d(ft,1),Dt,2,6,[j8,YV,\"is in any ring\",\"3 members\",\"3-4 members\",\"3-5 members\",\"3-6 members\",\"3-7 members\",\"4 members\",\"4-5 members\",\"4-6 members\",\"4-7 members\",\"> 3 members\",\"5 members\",\"5-6 members\",\"5-7 members\",\"> 4 members\",\"6 members\",\"6-7 members\",\"> 5 members\",\"7 members\",\"> 6 members\",\"> 7 members\",\"no ring or >7 members\"]),di=B(d(XA,1),re,6,14,[0,w8,lM,h9,25769803776,60129542144,128849018880,266287972352,T9,51539607552,120259084288,257698037760,532575944704,c9,103079215104,240518168576,515396075520,w9,206158430208,481036337152,g9,412316860416,Vf,279172874240])}function Att(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;if(A&&t.eb==6)for(T=c(F,m,6,t.L.length,15,1),r=0;r<t.V.r;r++)s=t.M[r],Wn(t.L[s],T[s],!i0(t.V,r)),++T[s];for(f=c(Rl,A0,36,t.L.length,0,1),y=0;y<t.L.length;y++)t.eb==6&&(U9(new a8(A?4:0),t.L[y]),hf(t.L[y])),D=new mu(t.L[y]),ck(D,e,null,o0|t.T),f[y]=D.v;for(k=1.8000000715255737*t.T,i=Qn(t.V,24*t.ab),n=(t.U&4)==0?0:t.eb==5?EV*ND(t.k):FT(G(t.I,0))*t.T/i,g=.5*k,l=0;l<=t.L.length&&((t.U&4)!=0&&l==t.Y&&(x3(G(t.I,0),g-k/2,Y9(t.k)/2,g-k/2+n,Y9(t.k)/2),g+=n),l!=t.L.length);l++)Q=g-f[l].c,o=.5*(Y9(t.k)-f[l].a)-f[l].d,GL(t.L[l],Q,o),g+=k+f[l].b;for(_5(t.G,e,new lA(0,0,ND(t.k),Y9(t.k)),o0|t.T),h=c(F,m,6,t.L.length,15,1),P=0;P<t.V.r;P++)L=t.M[P],de(t.V,P,mt(t.L[L],h[L])),Ve(t.V,P,Rt(t.L[L],h[L])),++h[L];hf(t.V)}function ntt(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(f=new n1,ut(e,1),Q=c(Pt,it,6,e.g,16,1),A=0;A<e.g;A++)if(t.f[A]&&(X(t.i,A)==7||X(t.i,A)==8||X(t.i,A)==16||X(t.i,A)==34||X(t.i,A)==52)){for(Q[A]=!0,D=0;D<e.k[A];D++)if(n=e.j[A][D],r=e.n[A][D],L=e.o[A][D],e.p[n]!=0&&e.p[A]<L){for(Q[n]=!0,Ft(f,U1(r)),o=0;o<e.k[n];o++)P=e.j[n][o],Q[P]||(Q[P]=!0,i=e.n[n][o],s=e.o[n][o],e.p[n]+2==L+s&&(Ft(f,U1(i)),L>=s&&(e.p[P]<s?TQ(e,P)&&fy(t,e,P,!0,!1,Q,f):fy(t,e,P,!0,!0,Q,f)),s>=L&&TQ(e,A)&&fy(t,e,P,!1,!1,Q,f),t.f[P]&&(X(t.i,P)==5||X(t.i,P)==6||X(t.i,P)==7||X(t.i,P)==8||X(t.i,P)==16||X(t.i,P)==34||X(t.i,P)==52)&&e.p[P]<s&&(L<=2&&s>=2&&TQ(e,A)&&Vm(t,e,r,i),L>=2&&s<=2&&TQ(e,P)&&Vm(t,e,i,r)),cA(f,f.a.length-1)),Q[P]=!1);cA(f,f.a.length-1),Q[n]=!1}Q[A]=!1}}function Ptt(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt;for(v=-1,C=0,R=0,x=0,T=0,g=0,k=0,N=0,tt=0,C=0,o=0;o<t.d;o++)C+=n[o]*n[o];if(C=w.Math.sqrt(C),C>r)for(L=0;L<t.d;L++)n[L]*=r/C;for(R=0,s=0;s<t.d;s++)R+=n[s]*t.e[s];if(R>=0)return v;for(x=0,y=0;y<t.d;y++)S=w.Math.abs(n[y])/w.Math.max(w.Math.abs(e[y]),1),S>x&&(x=S);for(k=1e-7/x,T=1,h=0;h<1e3;){if(T<k){v=1;break}for(l=0;l<t.d;l++)P[l]=e[l]+T*n[l];if(t.k=ys(t,P),t.k-A<=go*T*R)return 0;h==0?N=-R/(2*(t.k-A-R)):(b=t.k-A-T*R,j=tt-A-g*R,i=(b/(T*T)-j/(g*g))/(T-g),f=(-g*b/(T*T)+T*j/(g*g))/(T-g),i==0?N=-R/(2*f):(D=f*f-3*i*R,D<0?N=.5*T:f<=0?N=(-f+w.Math.sqrt(D))/(3*i):N=-R/(f+w.Math.sqrt(D))),N>.5*T&&(N=.5*T)),g=T,tt=t.k,T=w.Math.max(N,.1*T),++h}for(Q=0;Q<t.d;Q++)P[Q]=e[Q];return v}function rtt(t){var e,A,n,P,r,i,f,D,Q,o,L;for(t._=c(E,I,6,t.R.g,15,1),e=0;e<t.R.g;e++)if(t.db[e]==1||t.db[e]==2){if(D=t.eb[e],oT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,o=c(F,m,6,3,15,1),Q=0;Q<O(t.R,P);Q++)o[L]=_(t.R,P,Q),o[L]!=e&&++L;L==2&&t.f[o[0]]>t.f[o[1]]^t.H[o[0]]<t.H[o[1]]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),t.H[r]<t.H[i]&&(D=!D);t._[e]=t.db[e]==1^D?1:2}else t._[e]=t.db[e];for(t.j=c(E,I,6,t.R.i,15,1),A=0;A<t.R.i;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=K(t.R,f,A),O(t.R,n)==3){for(o=c(F,m,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=K(t.R,1-f,A)&&(o[L++]=_(t.R,n,Q));t.f[o[0]]>t.f[o[1]]&&(D=!D),t.H[o[0]]<t.H[o[1]]&&(D=!D)}t.j[A]=t.o[A]==1^D?1:2}else t.j[A]=t.o[A]}function itt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b;for(e=d_(t),r=c(E,I,6,t.f.s,15,1),i$(t,r,e),P=0;P<t.f.s;P++)r[P]==2&&(Gi(t.f,K(t.f,0,P))||Gi(t.f,K(t.f,1,P)))&&(r[P]=3);for(y=0;y<t.d.a.length;y++){for(L=G(t.d,y),D=Rj(L),g=L.c,T=new f6(L),h=-1,s=0;s<224&&D.a.length!=0;s++){if(Q=FQ(t.g,D.a.length),f=(ee(Q,D.a.length),D.a[Q]),i=A$(t,f[0],f[1]),A=c(F,m,6,i.length,15,1),n=0,s<32)for(l=1;l<i.length-1;l++)r[i[l]]==3&&(A[n++]=i[l]);else if(s<96)for(l=1;l<i.length-1;l++)r[i[l]]>=2&&(A[n++]=i[l]);else for(l=1;l<i.length-1;l++)r[i[l]]>=1&&(A[n++]=i[l]);if(n!=0){if(v=A[0],n>1)do v=A[FQ(t.g,n)];while(v==h);v!=h&&(h=v,Vp(L,v),D=Rj(L),g>L.c&&(g=L.c,T=new f6(L)))}}Zr(t.d,y,T),L=T,o=1;do{for(k=9999,l=0;l<L.e.length;l++)b=e[L.e[l]],b==o?Rtt(L,l):b>o&&b<k&&(k=b);o=k}while(k!=9999)}}function mp(t,e,A,n,P){var r,i;if(P.d=!0,P.c=!0,e[A]==35){for(++A,t.r=!0,P.a=0,P.b=1;A<n&&an(e[A]&d1);)P.a=10*P.a+e[A]-48,++P.b,++A;if(P.a==0||P.a>=(J1(),a0).length)throw At(new H1(\"SmilesParser: Atomic number out of range. position:\"+(A-1)));return!0}if(e[A]>=65&&e[A]<=90){if(P.b=e[A+1]>=97&&e[A+1]<=122?2:1,P.a=(J1(),zA(z8(F2(e,A,(i=P.b,w0(),i))),321)),P.b==2&&P.a==0&&(P.b=1,P.a=zA(z8(F2(e,A,(r=P.b,r))),321)),P.d=!1,P.a==0)throw At(new H1(\"SmilesParser: Unknown atom label. position:\"+(A-1)));return!0}return e[A]==97&&e[A+1]==115||e[A]==115&&e[A+1]==101?(P.b=2,P.a=(J1(),zA(z8(F2(e,A,(r=P.b,w0(),r))),321)),P.c=!1,!0):e[A]==99||e[A]==110||e[A]==111||e[A]==112||e[A]==115?(P.b=1,P.a=(J1(),zA(z8(F2(e,A,(r=P.b,w0(),r))),321)),P.c=!1,!0):!1}function ftt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(A=-1,Q=!1,y=Ge,e=Pr(t.i,t.c),h=0;h<t.d.length;h++)t.d[h]<t.v[h].d.length-1&&(s=xh(e,h,t.d[h])/xh(e,h,t.d[h]+1),y>s&&(y=s,A=h));for(T=0;T<t.c.length;T++)t.c[T]<t.u[T].b.length-1&&(s=Bh(t.u[T],t.c[T])/Bh(t.u[T],t.c[T]+1),y>s&&(y=s,A=T,Q=!0));if(A==-1){t.a=null;return}for(r=1,f=0;f<t.d.length;f++)(Q||f!=A)&&(r*=t.d[f]+1);for(D=0;D<t.c.length;D++)(!Q||D!=A)&&(r*=t.c[D]+1);for(t.a=c(RS,H2,168,r,0,1),Q?++t.c[A]:++t.d[A],i=0;i<r;i++){for(l=i,k=c(F,m,6,t.d.length,15,1),L=0;L<t.d.length;L++)(Q||L!=A)&&(g=t.d[L]+1,g!=1&&(k[L]=l%g,l=l/g|0));for(P=c(F,m,6,t.c.length,15,1),o=0;o<t.c.length;o++)(!Q||o!=A)&&(n=t.c[o]+1,n!=1&&(P[o]=l%n,l=l/n|0));Q?P[A]=t.c[A]:k[A]=t.d[A],t.a[i]=Xu(t,k,P)}ju(t.a,new Zw),t.b=-1}function bp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(!((t.G[e]&3)==0||(t.G[e]&3)==3||!oi(t,e))){for(j=-1,v=-1,b=-1,k=-1,P=0,L=0;L<2;L++)for(n=t.F[L][e],l=0;l<t.e[n];l++)f=t.n[n][l],f!=e&&dt(t,f)==1&&(i=t.j[n][l],R=NQ(t,f,i),P<R&&(P=R,v=i,j=f,b=n,k=t.F[1-L][e]));if(v!=-1){for(s=0;s<2;s++)for(l=0;l<t.e[t.F[s][e]];l++)f=t.n[t.F[s][e]][l],f!=e&&dt(t,f)==1&&(t.I[f]=1);for(t.F[1][j]!=v&&(t.F[0][j]=t.F[1][j],t.F[1][j]=v),D=Et,y=0;y<t.k[b];y++)i=t.j[b][y],t.n[b][y]!=e&&D>i&&(D=i);for(T=c(F,m,6,2,15,1),g=0,o=0;o<t.k[k];o++)t.n[k][o]!=e&&(T[g++]=t.j[k][o]);r=pA(t.K[b].a,t.K[b].b,t.K[k].a,t.K[k].b),A=0,g==2?(T[0]>T[1]&&(C=T[0],T[0]=T[1],T[1]=C),Q=Ze(r,_0(t,k,T[0])),h=Ze(r,_0(t,k,T[1])),A=Q-h):A=Ze(r,_0(t,k,T[0])),A<0^(t.G[e]&3)==2^D==v?t.I[j]=257:t.I[j]=129}}}function Dtt(t){var e,A,n;if(null.zd()||null.zd())$5(t,!0);else if(null.zd())t.r&&nF();else if(null.zd())pN(t,null.zd());else if(null.zd())Wv(t);else if(!null.zd())if(null.zd())mQ(t),EL(t,w.Math.max(t.eb,1));else if(null.zd())f5(t,!0,!0);else if(null.zd())f5(t,!1,!0);else if(null.zd())f5(t,!0,!1);else if(null.zd())JJ(t);else if(null.zd())xo=!xo,xo&&mQ(t);else if(null.zd())K5(t,!0);else if(null.zd())K5(t,!1);else if(null.zd())tZ(t);else if(null.zd())H3(t._,aV,tE);else if(null.zd())if(null.zd(),e=L1(null.zd(),f1,Et),A=L1(null.zd(),f1,Et),i0(t.V,e))for(n=0;n<t.V.g;n++)i0(t.V,n)&&RD(t.V,n,A);else RD(t.V,e,A);else null.zd()?(t.H=6,t.eb=w.Math.max(t.eb,1),P1(t.k)):null.zd()?(t.H=256,t.eb=w.Math.max(t.eb,1),P1(t.k)):null.zd()&&OG(t,t.w==19?16:0)}function utt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(P=new LD,Ft(P.a,new ae(\"cLogP Values are estimated applying an atom-type based increment system.\",2)),Ft(P.a,new ae(IV,2)),Ft(P.a,new ae(F4,2)),t){for(Li(t),ut(t,7),f=0,n=new cP,D=new sD(\"#0.000\"),e=0;e<t.g;e++)try{A=Uy(t,e,6241),h=Be(n,gQ(A)),h?We(n,gQ(A),U1(h.a+1)):We(n,gQ(A),U1(1))}catch(T){if(T=_1(T),Yt(T,19))++f;else throw At(T)}for(f!=0&&Ft(P.a,new ae(\"Warning: \"+f+\" atom type(s) could not be determined.\",2)),l=(i=new J8(new K8(new br(n).a).b),new jr(i));Nr(l.a.a);)y=(r=H9(l.a),r.hd()),o=u9(Wf,y),(o<0?-1:o)!=-1?e8(P,(s=y,t8(e9(n,s))+\" * \"+Sh(D,yc[Q=u9(Wf,y),Q<0?-1:Q])+\" AtomType: 0x\"+D5(y.a)),2):e8(P,\"Warning: For atom type 0x\"+D5(y.a)+\" (\"+(L=y,t8(e9(n,L)))+\" times found) is no increment available.\",2)}return P}function jp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(h=e.g,t.j=c(XA,re,6,e.g,14,1),t.k=c(F,m,6,e.g,15,1),f=0;f<h;f++)t.j[f]=d0(V(J(Wp(e,f),e.C[f]),e4),gM),t.k[f]=e.D[f],(A&1)!=0&&(t.k[f]+=e.t[f]+16<<8),(A&2)!=0&&(t.k[f]+=e.B[f]<<16);for(t.B=c(XA,re,6,e.g,14,1),g=(ut(e,7),e.q),l=0;l<g.j.a.length;l++){for(y=!1,Q=G(g.k,l),o=0,L=Q.length;o<L;++o)if(s=Q[o],(e.H[s]&d8)!=0){y=!0;break}if(!y)for(k=G(g.k,l).length,P=G(g.j,l),r=0,i=P.length;r<i;++r)n=P[r],k==3?t.B[n]=J(t.B[n],h9):k==4?t.B[n]=J(t.B[n],T9):k==5?t.B[n]=J(t.B[n],c9):k==6?t.B[n]=J(t.B[n],w9):k==7&&(t.B[n]=J(t.B[n],g9))}for(T=e.i,t.n=c(F,m,6,e.i,15,1),D=0;D<T;D++)t.n[D]=(mj(e,D)|e.H[D])&6291967^6291840,(A&4)!=0?(t.n[D]&2)!=0&&(t.n[D]|=8):(A&8)!=0&&(t.n[D]&2)!=0&&D<e.i&&Ee(e.q,D)&&(t.n[D]|=8)}function Qtt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(f=-1,P=Is(t,e),i=P==-1?ns(t,e):-1,A!=0){for(y=-1,o=0;o<t.V.g;o++)o!=P&&De(t.V,o)==A&&(!bP(t.V,e)||!i0(t.V,o))&&(D=OA(t.V,o),y<D&&(y=D));for(L=0;L<t.V.i;L++)L!=i&&gP(t.V,L)==A&&(!bP(t.V,e)||!bP(t.V,L))&&(D=ef(t.V,L),y<D&&(y=D));if((P==-1?gP(t.V,i):De(t.V,P))!=A)f=w.Math.min(y+1,31);else if(f=P==-1?ef(t.V,i):OA(t.V,P),bP(t.V,e)){for(l=!0,s=0;s<t.V.g;s++)if(s!=P&&i0(t.V,s)&&De(t.V,s)==A&&OA(t.V,s)!=f){l=!1;break}for(Q=0;Q<t.V.i;Q++)if(Q!=i&&bP(t.V,Q)&&gP(t.V,Q)==A&&ef(t.V,Q)!=f){l=!1;break}l&&(f<=y?(++f,f==32&&(f=0)):f=0)}else f<=y?(++f,f==32&&(f=0)):f=0}if(bP(t.V,e))for(Q=0;Q<t.V.i;Q++)bP(t.V,Q)&&q9(t.V,Q)&&(n=Is(t,Q),r=ns(t,Q),n!=-1?Ne(t.V,n,A,f):r!=-1&&T8(t.V,r,A,f));else P!=-1?Ne(t.V,P,A,f):i!=-1&&T8(t.V,i,A,f)}function ott(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(P=c(Rl,A0,36,t.k.length,0,1),j=0,b=0,y=0;y<t.k.length;y++)w2(t.e[y],e,null,o0),P[y]=t.e[y].v,j+=P[y].b,b=w.Math.max(b,P[y].a);for(f=c(Rl,A0,36,t.a.length,0,1),v=0,k=0,l=0;l<t.a.length;l++)w2(t.b[l],e,null,65552),f[l]=t.b[l].v,v=w.Math.max(v,f[l].b),k+=f[l].a+12;if(n=w.Math.max(48,v+24),b=w.Math.max(b,24+2*k),A=-1,!t.g)t.g=new QU,Ft(t.g,new _D),A=0;else{for(h=0;h<t.g.a.length;h++)if(Yt(G(t.g,h),64)){A=h;break}A==-1&&(A=t.g.a.length,Ft(t.g,new _D))}for(g=18,s=0;s<t.k.length;s++){if(s==t.n){for(x3(G(t.g,A),g-18,b/2,g-18+n,b/2),r=g+-6,i=.5*(b-12)-k,T=0;T<t.a.length;T++)Q=r+.5*(v-f[T].b)-f[T].c,L=i-f[T].d,XU(t.b[T],new P3(Q,L)),i+=12+f[T].a;g+=n}D=g-P[s].c,o=.5*(b-P[s].a)-P[s].d,XU(t.e[s],new P3(D,o)),g+=36+P[s].b}t.o=!1}function Utt(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(ut(t.g,t.N),D=w.Math.max(t.g.g,t.g.i)+16,t.s=c(F,m,6,D,15,1),t.u=c(F,m,6,D,15,1),t.v=c(F,m,6,D,15,1),t.t=c(Pt,it,6,D+1,16,1),i=c(Pt,it,6,t.g.g,16,1),f=c(Pt,it,6,t.g.i,16,1),n=0,A=0;A<t.g.g;A++)if(!t.D[A]&&!i[A])for(t.s[n]=A,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(o=0;o<Le(t.g,t.s[n]);o++)Q=B5(t,n,Q,o,i,f,-1);for(;t.t[++n];);}if(t.w=n,t.p!=0){for(Q=t.w-1,r=0;r<t.d;r++)for(n=0;n<=Q;){for(L=0;L<Le(t.g,t.s[n]);L++)Q=B5(t,n,Q,L,i,f,r);for(;t.t[++n];);}for(e=0;e<t.g.g;e++)if(t.D[e]&&!i[e])for(t.s[n]=e,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(L=0;L<Le(t.g,t.s[n]);L++)_(t.g,t.s[n],L)<t.g.g&&(Q=B5(t,n,Q,L,i,f,t.f[e]));for(;t.t[++n];);}for(t.e=c(F,m,6,t.d,15,1),s=0;s<t.d;s++)t.e[s]=-1;for(o=t.w;o<n;o++)P=t.f[t.s[o]],t.e[P]==-1&&(t.e[P]=o)}t.A=n}function Ltt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;for(l=0,h=(D=ue(e,l),D==-1?e.length:D),r=L1((Mt(l,h,e.length),e.substr(l,h-l)),f1,Et),l=gA(e,h),h=(Q=ue(e,l),Q==-1?e.length:Q),i=L1((Mt(l,h,e.length),e.substr(l,h-l)),f1,Et),l=gA(e,h),h=(o=ue(e,l),o==-1?e.length:o),A=YD(t,L1((Mt(l,h,e.length),e.substr(l,h-l)),f1,Et)),l=gA(e,h),h=(L=ue(e,l),L==-1?e.length:L),n=YD(t,L1((Mt(l,h,e.length),e.substr(l,h-l)),f1,Et)),g=0,k=0;(l=gA(e,h))!=-1;)if(h=(f=ue(e,l),f==-1?e.length:f),T=(Mt(l,h,e.length),e.substr(l,h-l)),y=T.indexOf(p0(61)),s=(Mt(0,y,T.length),T.substr(0,y)),v=L1((zt(y+1,T.length+1),T.substr(y+1)),f1,Et),e1(s,\"CFG\"))switch(v){case 1:g=1;break;case 2:g=i==2?3:4;break;case 3:g=6}else e1(s,\"TOPO\")&&(k=v);P=bR(t,A,n,i,g,k),P+1!=r&&(!t.c&&(t.c=new cP),We(t.c,U1(r),U1(P)))}function stt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(Q=k1(X1(e)),Q.length==0||(t.e=Q),X1(e),n=X1(e),!A&&n.startsWith(Yy)&&(P=(zt(13,n.length+1),n.substr(13)),WQ(P,!0,t)))return!0;for(l=X1(e),y=L1(k1((Mt(0,3,l.length),l.substr(0,3))),f1,Et),L=L1(k1((Mt(3,6,l.length),l.substr(3,3))),f1,Et),f=new Du,i=0;i<y;i++){if(l=X1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new H1(zC));s=new _A,D=new su;do l=X1(e),D.a+=\"\"+l,D.a+=nn;while(l!=null&&!l.startsWith(hr));if(l==null)throw At(new H1(KC));SU(f,s,new un(new Sr(D.a))),Ft(t.g,s),t.d=-1}for(r=0;r<L;r++){if(l=X1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new H1(zC));o=new _A,D=new su;do l=X1(e),D.a+=\"\"+l,D.a+=nn;while(l!=null&&!l.startsWith(hr));if(l==null)throw At(new H1(KC));SU(f,o,new un(new Sr(D.a))),Ft(t.f,o),t.d=-1}return!0}function ytt(t,e){s8();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N;for(Bm(),l=c(Pt,it,6,e.s,16,1),kp(e,l),i=0;i<e.i;i++)if(l[i]&&(S=c(F,m,6,4,15,1),x=new YT,N=Qk(e,i,S,x),N!=null&&!nW(S,t)&&(C=(j=y2(LP,N),j?yp(j):null),Q=(R=y2(LP,N),R?KR(R):null),g=(b=y2(LP,N),b?Ep(b):null),C==null&&(T=new b6(e,S),C=T.b,Q=T.a,g=T.c),C!=null))){if(n=null,v=0,(e.G[i]&64)==0){for(y=j1(Pt,[c0,it],[12,6],16,[2,e.r],2),D=c(F,m,6,2,15,1),L=0;L<2;L++)D[L]=KQ(e,x.e[L],x.b[L],y[L],null,null);for(v=D[0]<D[1]?0:1,n=c(F,m,6,D[v],15,1),s=0,A=0;A<e.r;A++)y[v][A]&&(n[s++]=A)}Ft(t,new ZL(C,Q,g,S,n,v))}for(r=0;r<e.i;r++)if(e.I[r]==1&&(e.G[r]&64)==0){for(L=0;L<2;L++)if(f=e.F[L][r],h=P0(e,f),o=e.e[f]-h,h==1&&o!=0){k=e.F[1-L][r],P=e.D[f],P>6&&e.p[k]==1?Aa(e,f,k,o,t):e.p[k]!=2&&e.e[k]>1&&o$(e,f,k,o,t);break}}}function ltt(t,e,A){var n,P,r,i,f,D,Q;return r=c(Ut,Tt,6,3,15,1),r[0]=mt(t.R,A.a)-mt(t.R,e.a),r[1]=Rt(t.R,A.a)-Rt(t.R,e.a),r[2]=oA(t.R,A.a)-oA(t.R,e.a),D=c(Ut,Tt,6,3,15,1),D[0]=mt(t.R,e.b)-mt(t.R,e.a),D[1]=Rt(t.R,e.b)-Rt(t.R,e.a),D[2]=oA(t.R,e.b)-oA(t.R,e.a),Q=c(Ut,Tt,6,3,15,1),Q[0]=mt(t.R,A.b)-mt(t.R,A.a),Q[1]=Rt(t.R,A.b)-Rt(t.R,A.a),Q[2]=oA(t.R,A.b)-oA(t.R,A.a),i=c(Ut,Tt,6,3,15,1),i[0]=r[1]*D[2]-r[2]*D[1],i[1]=r[2]*D[0]-r[0]*D[2],i[2]=r[0]*D[1]-r[1]*D[0],f=c(Ut,Tt,6,3,15,1),f[0]=r[1]*i[2]-r[2]*i[1],f[1]=r[2]*i[0]-r[0]*i[2],f[2]=r[0]*i[1]-r[1]*i[0],n=(D[0]*f[0]+D[1]*f[1]+D[2]*f[2])/(w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),P=(Q[0]*f[0]+Q[1]*f[1]+Q[2]*f[2])/(w.Math.sqrt(Q[0]*Q[0]+Q[1]*Q[1]+Q[2]*Q[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),n<0^P<0?1:2}function Rp(t,e,A,n){var P,r,i,f,D;D=n.a.length,t.f[e]!=0&&Ye(n,t.f[e]==1?47:92),t.j==1&&(P=fe(t.k,e)&127,P!=0&&((P&1)!=0&&t.f[e]==0&&(n.a+=\"-\"),(P&2)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"=\"),(P&4)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"#\"),(P&32)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&64)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&8)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\":\"),(P&16)!=0&&(n.a.length!=D&&(n.a+=\",\"),q(n,Ae(t.k,A)?\"<-\":\"->\")))),D==n.a.length&&(!eA(t.k,e)||(t.j&4)!=0)&&(r=c1(t.k,e)&127,r==1?mn(t.k,K(t.k,0,e))&&mn(t.k,K(t.k,1,e))&&(t.j&4)==0&&t.f[e]==0&&(n.a+=\"-\"):r==2?n.a+=\"=\":r==4?n.a+=\"#\":r==32||r==64?n.a+=\"$\":r==8?n.a+=\":\":r==16&&q(n,Ae(t.k,A)?\"<-\":\"->\")),t.j==1&&(i=D==n.a.length?\"\":\";\",f=fe(t.k,e)&384,f==256?n.a+=i+\"@\":f==128&&(n.a+=i+\"!@\"))}function htt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;if(t.R.g==0){t.s=\"\";return}for(L=t.jb&t.b,T=t.jb?16:8,Q3(t,!0),Ye(t.u,L?35:33),qt(t,t.jb?1:0,1),qt(t,e?1:0,1),qt(t,T>>1,4),l=0,D=1;D<t.R.g;D++)l=Nj(t,t.B[D],t.F[D]==-1?-1:t.B[t.F[D]],l,A);if(L)for(Q=0;Q<t.R.g;Q++)for(n=t.B[Q],y=O(t.R,n);y<Ct(t.R,n);y++)l=Nj(t,_(t.R,n,y),n,l,A);if(t.R.g>1&&l==0){t.s=\"\";return}for(i=1<<T,s=l/((i>>1)-1),h=l+.5*s,o=1;o<t.R.g;o++)oj(t,t.B[o],t.F[o]==-1?-1:t.B[t.F[o]],h,s,T,A);if(L)for(f=0;f<t.R.g;f++)for(n=t.B[f],y=O(t.R,n);y<Ct(t.R,n);y++)oj(t,_(t.R,n,y),n,h,s,T,A);e&&(r=t.jb?1.5:(J1(),J1(),Bn),P=LR(t.R,L?t.R.r:t.R.g,L?t.R.s:t.R.i,r,A),qt(t,w.Math.min(i-1,w.Math.max(0,Bt(.5+w.Math.log10(P/.1)/w.Math.log10(2e3)*(i-1)))),T),qt(t,zT(A[t.B[0]].a/P,i),T),qt(t,zT(A[t.B[0]].b/P,i),T),t.jb&&qt(t,zT(A[t.B[0]].c/P,i),T)),t.s=OL(t)}function c6(t,e){var A,n,P,r,i,f,D,Q,o,L;for(P=au(e,0);P>0&&e[P-1]==45;)P=au(e,P+1);for(r=P==-1?-1:au(e,P+1);r>0&&e[r-1]==45;)r=au(e,r+1);if(r==-1)throw At(new H1(\"Missing one or both separators ('>').\"));if(au(e,r+1)!=-1)throw At(new H1(\"Found more than 2 separators ('>').\"));for(L=new U8,o=0,n=0;n<e.length;){for(;n<e.length&&e[n]==46;)++n;if(n==e.length)break;for(Q=n,D=-1,i=0,A=n;A<e.length;A++){if(e[A]==40){++i;continue}if(e[A]==41){if(--i<0)throw At(new H1(\"Found closing bracket without matching opening one.\"));continue}if(i==0&&(e[A]==46&&(t.o||A+1<e.length&&e[A+1]==46)||e[A]==62&&(A==0||e[A-1]!=45))){D=A;break}}if(D==-1&&(D=e.length),Q<D){if(f=new _A,R6(t,f,e,Q,D,!0,!0),t.q==1&&t.p)return c6(new dQ(t.j|2),e);o==0?(Ft(L.g,f),L.d=-1):o==1?Ft(L.a,f):(Ft(L.f,f),L.d=-1)}for(n=D;n<e.length&&e[n]==62;)++n,++o}return L}function w6(){w6=v1;var t,e,A;for(new ff(1,0),new ff(10,0),new ff(0,0),QS=c(oS,_e,31,11,0,1),qo=c(Fr,re,6,100,15,1),mc=B(d(Ut,1),Tt,6,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),bc=c(F,m,6,mc.length,15,1),vi=B(d(Ut,1),Tt,6,15,[1,10,100,1e3,fP,xy,1e6,1e7,1e8,Jf,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Cl=c(F,m,6,vi.length,15,1),zo=c(oS,_e,31,11,0,1),t=0;t<zo.length;t++)QS[t]=new ff(t,0),zo[t]=new ff(0,t),qo[t]=48;for(;t<qo.length;t++)qo[t]=48;for(A=0;A<bc.length;A++)bc[A]=Hs(mc[A]);for(e=0;e<Cl.length;e++)Cl[e]=Hs(vi[e]);Lr()}function pp(t){var e,A,n,P,r,i;if(r='<svg id=\"'+df(t.g!=null?t.g:\"mol\"+J2)+I0+'xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"'+t.n+'px\" height=\"'+t.f+'px\" viewBox=\"0 0 '+t.n+\" \"+t.f+`\">\n`,i=t.i?\"<style> #\"+df(t.g!=null?t.g:\"mol\"+J2)+\" { pointer-events:none; } #\"+df(t.g!=null?t.g:\"mol\"+J2)+` .event  { pointer-events:all; } line { stroke-linecap:round; } polygon { stroke-linejoin:round; } </style>\n`:'<g style=\"font-size:'+t.k+'px; fill-opacity:1; stroke-opacity:1; fill:black; stroke:black; font-weight:normal; text-rendering:optimizeLegibility; font-family:sans-serif; stroke-linejoin:round; stroke-linecap:round; stroke-dashoffset:0;\">',r+=\"  \",r+=i,t.i){for(P=new Zt(t.b);P.a<P.c.a.length;)n=_t(P),J9(t,n);for(A=new Zt(t.a);A.a<A.c.a.length;)e=_t(A),J9(t,e)}return t.i||J9(t,\"</g>\"),r+t.c.a+\"</svg>\"}function Ttt(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,k;if(s=c(Pt,it,6,t.i,16,1),s[P]=!0,y=c(F,m,6,11,15,1),l=B2(t,y,n,e,10,null,s),l==-1)return!1;for(i=1;!wA(t.q,A,y[i]);)++i;if(r=l-i,f=y[i],k=ah(t.q,A),k==6&&r==2&&i==3&&X3(t,y[1])>=3){for(g=jh(t.q,A),L=0;L<6;L++)if(e==g[L]){if(T=UT(t.q,A,f==g[UT(t.q,A,L+2)]?L-2:L+2),h=g[T],o=t.v[h]&gn,(o==0?0:o==Qe?2:o==O1?3:4)>=3&&Gj(t,y[1],h,2,null)==2)return!0;break}}if(D=t.p[f]==1||f<t.g&&f0(t.q,f)||xP(t,f,!1),Q=!D&&t.D[f]==7&&t.t[f]!=1,r==1)return!D&&!Q&&k<=4&&i<=3;switch(k){case 4:if(!D&&!Q&&i<=4)return!0;break;case 5:if(Q){if(i<=3)return!0}else if(!D&&i<=4)return!0;break;case 6:if(r==2){if(D){if(i<=4)return!0}else if(!Q&&i<=3)return!0}else if(r==3){if(D){if(i<=6)return!0}else if(i<=4)return!0}break;case 7:if(r==3&&i<=3)return!0}return!1}function Mp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;for(i=0,D=0;D<t.g.g;D++)if((t.f==null||t.f[D]==e)&&gt(V(h0(t.g,D),je),0)){if(s=t.G[D],L=v0(t.g,D),l=v0(t.H,s),L==0||L==3)continue;if(l==0||l==3)return!1;if(De(t.g,D)==1){++i;continue}if(De(t.H,s)==1)return!1;if(De(t.g,D)==2){++i;continue}if(De(t.H,s)==2||z5(t,D)==(L==l))return!1}if(i!=0){for(P=c(F,m,6,i,15,1),r=0,Q=0;Q<t.g.g;Q++)(t.f==null||t.f[Q]==e)&&gt(V(h0(t.g,Q),je),0)&&(L=v0(t.g,Q),L!=0&&L!=3&&(P[r++]=OA(t.g,Q)<<24|De(t.g,Q)<<22|Q));for(P.sort(pe(Q0.prototype.ld,Q0,[])),r=0;r<P.length;)for(o=P[r]&z0,y=t.G[o],A=P[r]&-4194304,n=z5(t,o)^v0(t.g,o)==v0(t.H,y),++r;r<P.length&&(P[r]&-4194304)==A;r++)if(f=P[r]&z0,s=t.G[f],De(t.H,s)!=De(t.H,y)||OA(t.H,s)!=OA(t.H,y)||(h=z5(t,f)^v0(t.g,f)==v0(t.H,s),h!=n))return!1}return!0}function ctt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;if(s=0,y=(r=ue(e,s),r==-1?e.length:r),v=(Mt(s,y,e.length),e.substr(s,y-s)),e1(\"DEFAULT\",v)&&(s=gA(e,y),y=(i=ue(e,s),i==-1?e.length:i),v=(Mt(s,y,e.length),e.substr(s,y-s)),v.startsWith(\"CLASS\")&&(s=gA(e,y),y=(f=ue(e,s),f==-1?e.length:f),v=(Mt(s,y,e.length),e.substr(s,y-s)),e1(\"-\",v)&&(s=gA(e,y),y=(D=ue(e,s),D==-1?e.length:D),v=(Mt(s,y,e.length),e.substr(s,y-s))))),L1(v,f1,Et),s=gA(e,y),y=(Q=ue(e,s),Q==-1?e.length:Q),k=(Mt(s,y,e.length),e.substr(s,y-s)),!!e1(\"DAT\",k)){for(s=gA(e,y),y=(P=ue(e,s),P==-1?e.length:P),L1((Mt(s,y,e.length),e.substr(s,y-s)),f1,Et),g=new cP,s=gA(e,y);s!=-1;)s=gW(g,e,s);n=(h=E2,t8(e9(g,h))),L=(T=\"FIELDNAME\",t8(e9(g,T))),o=(l=\"FIELDDATA\",t8(e9(g,l))),!(!e1(Sy,L)||n==null||o==null)&&(A=c8(n,\" \"),A.length==2&&IP(t.j,L1(A[1],f1,Et)-1,o))}}function Cp(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y;if(v=t.f.k,P=G(t.e,A),Y=P.a,L=e[t.a],T=xt(v,Y)>0&&v.k[Y]==v.e[Y],h=bq(t.f.a,t.f.t[Y]),!T&&!h)return i=v.j[Y][2],v.D[i]==1&&(i=t.f.t[i],(A==0?i>Y:t.f.t[v.j[Y][1]]>i)&&(n=!n)),n;if(T&&(r=v.j[Y][A],i=t.f.t[r],i>Y&&(n=!n,v.D[r]==1&&(n=!n))),h){for(b=v.e[Y],y=c(F,m,6,b-1,15,1),l=c(F,m,6,b-1,15,1),j=0,g=0,C=0;g<b;g++)i=v.j[Y][g],i!=L&&(y[C]=i,Q=o1(v,Y,i),N=Ku(t.f.s,t.f.t[Y]+\"_\"+t.f.t[i]),l[C++]=N==null?-1:Q,N!=null&&++j);if(T)y[0]<Y&&(n=!n);else switch(j){case 1:if(xt(v,Y)>0)break;k=l[0]>=0,s=y[k?0:1],R=y[k?1:0],R>Y?s>Y&&v.D[R]!=1&&(n=!n):s<Y&&(n=!n);break;case 2:f=Kv(t,l[0],Y),D=Kv(t,l[1],Y),tt=Ku(t.f.s,Y+\"_\"+t.f.t[f]),H=Ku(t.f.s,Y+\"_\"+t.f.t[D]),o=t.b,A==0?(S=tt[1]<o?tt[1]:tt[0],x=H[1]<o?H[1]:H[0]):(S=tt[0]<o?tt[1]:tt[0],x=H[0]<o?H[1]:H[0]),S<x!=f<D&&(n=!n)}}return n}function wtt(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(r=0,o=0,i=0,f=0,D=0,Q=0,L=0,s=!1,e=c(Pt,it,6,32,16,1),A=0;A<t.R.g;A++)t.db[A]!=0&&(++r,t.db[A]==3?++o:t.bb[A]==0?(++i,t.P&&yD(t.P,A)&&++f):t.bb[A]==2?t.ab[A]==0&&++Q:t.bb[A]==1&&(P=t.ab[A],e[P]||(++L,e[P]=!0),t.ab[A]==0&&++D,t.P&&yD(t.P,A)&&(s=!0)));for(n=0;n<t.R.i;n++)t.o[n]!=0&&c1(t.R,n)==1&&(++r,t.o[n]==3?++o:t.n[n]==0?(++i,t.P&&yD(t.P,K(t.R,0,n))&&yD(t.P,K(t.R,1,n))&&++f):t.n[n]==2?t.k[n]==0&&++Q:t.n[n]==1&&(P=t.k[n],e[P]||(++L,e[P]=!0),t.k[n]==0&&++D,t.P&&yD(t.P,K(t.R,0,n))&&yD(t.P,K(t.R,1,n))&&(s=!0)));if(r==0){t.R.J=o0;return}if(o!=0){t.R.J=0;return}if(t.K){th(t.R,q0+(1<<L));return}D+f==r&&!s?t.R.J=Fy:i==r?t.R.J=v8:Q==r?t.R.J=327680:i==r-1&&D==1?t.R.J=Ti:th(t.R,458752+(1<<L))}function gtt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(t.k[e]!=2||t.o[e][0]!=2||t.o[e][1]!=2||t.k[t.j[e][0]]<2||t.k[t.j[e][1]]<2||t.p[t.j[e][0]]!=1||t.p[t.j[e][1]]!=1){me(t,e,0,!1);return}for(j=-1,b=-1,v=-1,T=-1,r=0,L=0;L<2;L++)for(n=t.j[e][L],l=0;l<t.e[n];l++)i=t.j[n][l],i!=e&&(f=t.n[n][l],R=NQ(t,f,i),r<R&&(r=R,b=i,j=f,v=n,T=t.j[e][1-L]));if(b!=-1){for(s=0;s<2;s++)for(n=t.j[e][s],l=0;l<t.e[n];l++)i=t.j[n][l],f=t.n[n][l],i!=e&&t.F[0][f]==n&&(t.I[f]=1);for(t.F[1][j]!=b&&(t.F[0][j]=t.F[1][j],t.F[1][j]=b),D=Et,y=0;y<t.k[v];y++)i=t.j[v][y],i!=e&&D>i&&(D=i);for(g=c(F,m,6,2,15,1),k=0,o=0;o<t.k[T];o++)i=t.j[T][o],i!=e&&(g[k++]=i);A=pA(t.K[e].a,t.K[e].b,t.K[T].a,t.K[T].b),P=0,k==2?(g[0]>g[1]&&(C=g[0],g[0]=g[1],g[1]=C),Q=Ze(A,_0(t,T,g[0])),h=Ze(A,_0(t,T,g[1])),P=Q-h):P=Ze(A,_0(t,T,g[0])),P<0^(t.v[e]&3)==1^D==b?t.I[j]=257:t.I[j]=129}}function dtt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(gt(t.v,0)&&(q1(),I1(E1(Date.now()),t.v)))return!1;for(y=e.a,k=0,i=1;i<y.length;i++)if(y[i]!=null)for(D=0;D<i;D++)y[i][D]!=0&&Nh(t.B,i,D).length!=2&&(k+=y[i][D]);if(k>6)return!1;for(P=null,s=null,Q=null,A=Ge,l=e.b,r=1;r<y.length;r++)if(y[r]!=null){for(f=0;f<r;f++)if(y[r][f]>1&&Nh(t.B,r,f).length==2){for(g=Nh(t.B,r,f),b=c(F,m,6,2,15,1),L=0;L<2;L++)v=t.s[g[L]],b[L]=Cd(e.c,v.a);for(C=c(F,m,6,2,15,1),h=-1;h<=1;h+=2)for(C[0]=h*8,T=-1;T<=1;T+=2){for(C[1]=T*8,n=y[r][f],j=1;j<=3;j++){for(P?e2(P,e.c):P=new BD(e.c),o=0;o<2;o++)yb(P,t.s[g[o]],b[o]+j*C[o]<<16>>16);if(R=w_(t,P,t.q[r],t.q[f]),R<n-1){if(n=R,s?e2(s,P):s=new BD(P),n<1)break}else break}n<y[r][f]&&n<A&&(A=n,Q?e2(Q,s):Q=new BD(s))}}}return Q?(gp(t,e,Q),e.b>=l?(Mv(e,l,y),!1):(e2(e.c,Q),!0)):!1}function Btt(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H;if(t.e.length==1)return 0;for(x=P+w.Math.sqrt(n),o=c(Ut,Tt,6,36,15,1),l=0;l<t.e.length;l++)r=hn(e,A,t.a[l],t.b[l]),f=mN(Ot(E1(w.Math.round(r*36/m0)))),L=e-t.a[l],s=A-t.b[l],tt=L*L+s*s,o[f]<tt&&(o[f]=tt);for(j=-1,b=-1,h=0;h<36;h++)o[h]=w.Math.sqrt(o[h]),j<o[h]&&(j=o[h],b=h);for(N=b-18<0?b-18+36:b-18>=36?b-18-36:b-18,T=0;T<=18;T++)o[N+T<0?N+T+36:N+T>=36?N+T-36:N+T]+=.01*T,o[N-T<0?N-T+36:N-T>=36?N-T-36:N-T]+=.01*T;for(H=c(Ut,Tt,6,9,15,1),D=c(Ut,Tt,6,9,15,1),g=1;g<9;g++)H[g]=w.Math.sin(g*bC),D[g]=w.Math.cos(g*bC);for(C=Ge,R=-1,i=0;i<36;i++)if(!(o[i]>=C)){for(v=o[i],y=1;y<9;y++){for(k=-1;k<=1&&(S=i+k*y<0?i+k*y+36:i+k*y>=36?i+k*y-36:i+k*y,!(!(o[S]*D[y]<=v)&&(Q=D[y]*w.Math.min(o[S],x/H[y]),v<Q&&(v=Q,C<=v))));k+=2);if(C<=v)break}C>v&&(C=v,R=i)}return m0*R/36}function Hp(t){for(var e,A,n,P,r;t.t.a.length!=0;)if(n=cA(t.t,0),t.I[n.b]==0&&t.B[n.a]==0)return n;for(;t.g>=0;){for(;t.g>=2&&t.c<t.j[t.g].length;){if(A=t.j[t.g][t.c],e=Be(t.k[t.g],A),X(t.D,e[0][0])==6&&(n=HR(t,e[0],e[1]),n))return n;++t.c}for(;t.g>=2&&t.d<t.j[t.g].length;){if(A=t.j[t.g][t.d],e=Be(t.k[t.g],A),X(t.D,e[0][0])!=6&&(n=HR(t,e[0],e[1]),n))return n;++t.d}for(;t.p&&t.g==0&&t.e<t.j[0].length;)if(A=t.j[0][t.e++],e=Be(t.k[t.g],A),e[0].length==1&&e[1].length==1&&(n=jb(t,e[0][0],e[1][0]),n))return n;for(;t.g==0&&t.f<t.j[t.g].length;)if(A=t.j[t.g][t.f++],e=Be(t.k[t.g],A),e[0].length>=e[1].length&&Ij(e[0],t.I,t.G,t.H,t.J)||e[1].length>=e[0].length&&Ij(e[1],t.B,t.w,t.A,t.C)){for(r=0,P=0;r<e[0].length&&t.I[e[0][r]]!=0;)++r;for(;P<e[1].length&&t.B[e[1][P]]!=0;)++P;if(r<e[0].length&&P<e[1].length&&(n=jb(t,e[0][r],e[1][P]),n))return n}--t.g,t.c=0,t.d=0,t.e=0,t.f=0}return null}function xP(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(t.D[e]!=7||t.k[e]==4)return!1;if(e<t.g&&f0(t.q,e)||t.p[e]!=0||gt(V(t.C[e],d9),0))return!0;if(t.t[e]==1)return!1;for(D=0;D<t.k[e];D++)if(z9(t,t.n[e][D])==3)return!1;for(i=0,Q=0;Q<t.k[e];Q++)t.o[e][Q]==1&&(n=t.D[t.j[e][Q]],(n==8||n==9||n==17)&&++i);if(i==0){for(f=0;f<t.k[e];f++)if(P=t.j[e][f],t.p[P]!=0){if(P<t.g&&f0(t.q,P)){if((t.q&&P<t.g?UA(t.q,P):0)>=5){for(h=0,s=0;s<t.k[P];s++)l=t.j[P][s],l!=e&&P0(t,l)>=3&&++h;if(y=P0(t,e),h==2&&y>=2||h==1&&y==3)continue}return!A||!Ys(t,e)}for(L=0;L<t.k[P];L++)if(t.o[P][L]==2||eA(t,t.n[P][L]))return!A||!Ys(t,e)}}if(i<2)for(f=0;f<t.k[e];f++){for(P=t.j[e][f],o=!1,r=!1,L=0;L<t.k[P];L++)t.j[P][L]!=e&&(t.o[P][L]!=1&&(t.D[t.j[P][L]]==7||t.D[t.j[P][L]]==8||t.D[t.j[P][L]]==16)&&(o=!0),t.o[P][L]==1&&t.D[t.j[P][L]]==7&&(r=!0));if(o&&(!r||i==0))return!A||!Ys(t,e)}return!1}function vtt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R;for(n=c(Ut,Tt,6,2,15,1),Q=0;Q<2;Q++)t.c[Q]/=t.a[Q],t.d[Q]/=t.a[Q],n[Q]=Btt(t.b[Q],t.c[Q],t.d[Q],t.b[1-Q].e.length,e);for(Tf(t.b[0],t.c[0],t.d[0],HA-n[0]),Tf(t.b[1],t.c[1],t.d[1],4.71238898038469-n[1]),R=Ge,j=W6,i=t.d[0]-t.d[1],o=0;o<t.b[1].b.length;o++)t.b[1].b[o]+=i,R>t.b[1].b[o]&&(R=t.b[1].b[o]),j<t.b[1].b[o]&&(j=t.b[1].b[o]);for(v=j-R+2*e,P=Bt(w.Math.ceil(v)),R+=(v-P)/2-e,g=c(Ut,Tt,6,P,15,1),L=0;L<P;L++)g[L]=t.c[1]+e;for(s=0;s<t.b[1].b.length;s++)for(b=t.b[1].b[s]-R,k=Bt(b-e),f=w.Math.min(Bt(b+e),P-1),T=k;T<=f;T++)g[T]>t.b[1].a[s]&&(g[T]=t.b[1].a[s]);for(y=0;y<P;y++)g[y]-=e;for(r=t.c[0]-t.c[1],l=0;l<t.b[0].a.length;l++)h=Bt(t.b[0].b[l]-R),h>=0&&h<g.length&&r<t.b[0].a[l]-g[h]&&(r=t.b[0].a[l]-g[h]);for(D=0;D<t.b[1].a.length;D++)t.b[1].a[D]+=r;A&&(Tf(t.b[0],t.c[0],t.d[0],n[0]-HA),Tf(t.b[1],t.c[0],t.d[0],n[0]-HA))}function Vp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R;if(t.d==null&&(t.d=c(F,u0,7,t.j.s,0,2)),t.d[e]==null){for(y=c(F,m,6,t.e.length,15,1),v=c(Pt,it,6,t.j.r,16,1),P=K(t.j,0,e),r=K(t.j,1,e),y[0]=P,v[P]=!0,o=0,l=0;o<=l;){for(T=0;T<Ct(t.j,y[o]);T++)i=_(t.j,y[o],T),!v[i]&&i!=r&&(y[++l]=i,v[i]=!0);if(o==l)break;++o}if(s=l+1>(t.e.length/2|0),t.i){for(D=!1,f=!1,T=0;T<t.e.length;T++)n=t.e[T],W0(t.j,n)&&n!=P&&n!=r&&(v[t.e[T]]?D=!0:f=!0);D!=f&&(s=D)}for(Q=2,t.d[e]=c(F,m,6,s?t.e.length-l:l+2,15,1),g=0;g<t.e.length;g++)t.e[g]==P?t.d[e][s?0:1]=g:t.e[g]==r?t.d[e][s?1:0]=g:s^v[t.e[g]]&&(t.d[e][Q++]=g)}for(j=t.a[t.d[e][0]],R=t.b[t.d[e][0]],b=hn(j,R,t.a[t.d[e][1]],t.b[t.d[e][1]]),h=2;h<t.d[e].length;h++)k=t.d[e][h],L=w.Math.sqrt((t.a[k]-j)*(t.a[k]-j)+(t.b[k]-R)*(t.b[k]-R)),A=2*b-hn(j,R,t.a[k],t.b[k]),t.a[k]=j+L*w.Math.sin(A),t.b[k]=R+L*w.Math.cos(A)}function Ep(t){var e,A,n,P,r,i,f,D,Q,o;switch(e=null,o=t.d.length,t.e){case 1:for(e=j1(Kt,[ie,t1],[16,6],15,[2*o,2],2),n=0;n<o;n++)e[n][0]=t.d[n][0],e[n][1]=t.d[n][1],e[o+n][0]=180+t.d[n][0]<<16>>16,e[o+n][1]=180+t.d[n][1]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[o-1]==180?o-1:o,Q=r-P,e=j1(Kt,[ie,t1],[16,6],15,[o+Q,2],2),i=0;i<o;i++)e[i][0]=t.d[i][0],e[i][1]=t.d[i][1];for(f=P;f<r;f++)e[e.length-1-f+P][0]=360-t.d[f][1]<<16>>16,e[e.length-1-f+P][1]=360-t.d[f][0]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[o-1]==90?o-1:o,Q=r-P,e=j1(Kt,[ie,t1],[16,6],15,[2*o+2*Q,2],2),D=0;D<o;D++)e[D][0]=t.d[D][0],e[D][1]=t.d[D][1],e[o+Q+D][0]=180+t.d[D][0]<<16>>16,e[o+Q+D][1]=180+t.d[D][1]<<16>>16;for(A=P;A<r;A++)e[o+Q-1-A+P][0]=180-t.d[A][1]<<16>>16,e[o+Q-1-A+P][1]=180-t.d[A][0]<<16>>16,e[e.length-1-A+P][0]=360-t.d[A][1]<<16>>16,e[e.length-1-A+P][1]=360-t.d[A][0]<<16>>16;return e;default:return t.d}}function Sp(t,e,A,n){var P,r,i,f,D,Q;if(i=tn(t.V,e,A),f=-1,n&&t.X==8&&i!=-1&&(!XW(t,t.e,i)||M1(t.V,t.e)!=0&&M1(t.V,t.e)==M1(t.V,i)&&!Fn(t.V,t.e)||fz(t,t.e,i))&&(i=-1),i!=-1&&(t.w==101||t.w==103||t.w==102?(f=xQ(t.V,i),i=-1):t.w==19&&i>=t.V.g&&(i=-1)),f==-1&&i==-1&&t.w!=22&&t.w!=19&&t.w!=3&&t.w!=10&&t.w!=27&&t.w!=16&&t.w!=11&&t.w!=12&&t.w!=13&&t.w!=28&&t.w!=29&&t.w!=30&&t.w!=14&&t.w!=31&&t.w!=15&&t.w!=32&&t.w!=33&&(f=kf(t.V,e,A)),f!=-1&&(t.w==101||t.w==103||t.w==102)&&!(q9(t.V,f)&&(Is(t,f)!=-1||ns(t,f)!=-1))&&(f=-1),P=t.v,!n&&t.I&&(P=null,i==-1&&f==-1&&(t.w==2||t.w==4||t.w==21))){for(Q=new Zt(t.I);Q.a<Q.c.a.length;)if(D=_t(Q),(t.w==2||t.w==4&&!Yt(D,64)||t.w==21&&Yt(D,95))&&D.Eb(e,A)){P=D,t.v&&t.v!=D&&t.v.Fb();break}}return r=t.t!=i||t.u!=f||t.v!=P||!!P,t.t!=i&&(t.t!=-1&&t.i.a.length!=0?Dy(t,t.i.a):(t.t=i,Ln(t.i,0),N1(t,new x1(t,4,!0)))),t.u!=f&&(t.u=f,N1(t,new x1(t,8,!0))),t.v=P,r}function uy(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b;for(ut(t,7),o=new SA(t.g,t.i),Q=j1(E,[DA,Wy],[208,58],0,[t.g,8],2),n=c(F,m,6,t.g,15,1),P=c(F,m,6,t.g,15,1),r=c(Pt,it,6,t.g,16,1),v=0;v<t.g;v++)if(Q[v]=j1(E,[Wy,m8],[58,10],0,[t.k[v],8],2),!(e&&t.D[v]!=6))for(D=0;D<t.k[v];D++){for(L=t.j[v][D],xu(r,r.length),g=1,T=2,t.v[L]|=512,b=0;b<8&&T<t.g;b++){if(b==0)n[0]=L,r[L]=!0,n[1]=v,r[v]=!0;else{for(k=T,y=g;y<T;y++)for(A=n[y],l=0;l<t.k[A];l++)f=t.j[A][l],!r[f]&&(!e||t.D[f]==6)&&(r[f]=!0,n[k++]=f);if(k==T){if(!e)for(s=b;s<8;s++)Q[v][D][s]=Q[v][D][s-1];break}g=T,T=k}if(b==0)Q[v][D][b]=c(E,I,6,2,15,1),Q[v][D][b][0]=t.D[v]<<24>>24,Q[v][D][b][1]=t.B[v]<<24>>24;else{for(L9(t,o,r,!0,P),b0(o,P[L],0),Je(o,P[L],0),A=0;A<t.g;A++)P[A]!=-1&&t.k[A]>o.k[P[A]]&&w1(o,P[A],S0,!0);if(e)for(i=0;i<o.i;i++)o.I[i]=1,o.U=0;Q[v][D][b]=ln((h=Me(new qA(o,16)),w0(),h))}}t.v[L]&=-513}return Q}function Ftt(t,e){var A,n,P,r,i;for(i=e,A=n=P=at(at(-559038737,i),13),p1.a=A,p1.b=n,p1.c=P,r=0;i>12;)p1.a=at(p1.a,t[r]),p1.a=at(p1.a,Wt(t[r+1],8)),p1.a=at(p1.a,Wt(t[r+2],16)),p1.a=at(p1.a,Wt(t[r+3],24)),p1.b=at(p1.b,t[r+4]),p1.b=at(p1.b,Wt(t[r+5],8)),p1.b=at(p1.b,Wt(t[r+6],16)),p1.b=at(p1.b,Wt(t[r+7],24)),p1.c=at(p1.c,t[r+8]),p1.c=at(p1.c,Wt(t[r+9],8)),p1.c=at(p1.c,Wt(t[r+10],16)),p1.c=at(p1.c,Wt(t[r+11],24)),f$(p1),i-=12,r+=12;switch(i){case 12:p1.c=at(p1.c,Wt(t[r+11],24));case 11:p1.c=at(p1.c,Wt(t[r+10],16));case 10:p1.c=at(p1.c,Wt(t[r+9],8));case 9:p1.c=at(p1.c,t[8]);case 8:p1.b=at(p1.b,Wt(t[r+7],24));case 7:p1.b=at(p1.b,Wt(t[r+6],16));case 6:p1.b=at(p1.b,Wt(t[r+5],8));case 5:p1.b=at(p1.b,t[4]);case 4:p1.a=at(p1.a,Wt(t[r+3],24));case 3:p1.a=at(p1.a,Wt(t[r+2],16));case 2:p1.a=at(p1.a,Wt(t[r+1],8));case 1:p1.a=at(p1.a,t[r]);break;case 0:return Ot(p1.c)}return a_(p1),Ot(p1.c)}function ktt(t,e){Zs();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(D=z(t,0)<0,D&&(t=E0(t)),z(t,0)==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return Ey;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return y=new C0,e<0?y.a+=\"0E+\":y.a+=\"0E\",y.a+=e==f1?\"2147483648\":\"\"+-e,y.a}o=18,L=c(Fr,re,6,o+1,15,1),A=o,h=t;do Q=h,h=Sn(h,10),L[--A]=Ot(at(48,Y1(Q,yn(h,10))))&d1;while(z(h,0)!=0);if(P=Y1(Y1(Y1(o,A),e),1),e==0)return D&&(L[--A]=45),PP(L,A,o-A);if(e>0&&z(P,-6)>=0){if(z(P,0)>=0){for(r=A+Ot(P),f=o-1;f>=r;f--)L[f+1]=L[f];return L[++r]=46,D&&(L[--A]=45),PP(L,A,o-A+1)}for(i=2;Si(i,at(E0(P),1));i++)L[--A]=48;return L[--A]=46,L[--A]=48,D&&(L[--A]=45),PP(L,A,o-A)}return l=A+1,n=o,s=new Vr,D&&(s.a+=\"-\"),n-l>=1?(Ye(s,L[A]),s.a+=\".\",s.a+=PP(L,A+1,o-A-1)):s.a+=PP(L,A,o-A),s.a+=\"E\",z(P,0)>0&&(s.a+=\"+\"),s.a+=\"\"+Fe(P),s.a}function mtt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(e==0||(e&A)!=0){kQ(t);return}for(T=-1,g=0,r=1<<t.e.length-2,P=1<<t.e.length-1,f=1,i=2,Q=0;Q<t.e.length;Q++)(A&(P|f))==0&&(e&(P|f))!=0&&(e&r)==0&&(l=0,(A&r)!=0&&(l+=4),(e&P)!=0&&(l+=2),(e&f)!=0&&(l+=1),g<l&&(g=l,T=Q)),r=P,P=f,f=i,i=1<<(Q+2<t.e.length?Q+2:Q+2-t.e.length);if(T==-1){kQ(t);return}for(s=0,s|=1<<T,y=2;y<t.e.length-1;){if(L=T+y<t.e.length?T+y:T+y-t.e.length,P=1<<(L==0?t.e.length-1:L-1),(A&P)!=0){++y;continue}if(f=1<<L,(e&P)!=0){if((A&f)!=0){kQ(t);return}s|=f,y+=2;continue}if(i=1<<(L+1<t.e.length?L+1:L+1-t.e.length),(e&f)!=0&&(A&i)!=0){s|=f,y+=3;continue}++y}if(s==0){kQ(t);return}for(n=l1-l1*(t.e.length-2)/t.e.length,o=1;o<t.e.length;o++)t.a[o]=t.a[o-1]+w.Math.sin(n*(o-1)),t.b[o]=t.b[o-1]+w.Math.cos(n*(o-1));for(f=1,h=2*w.Math.sin(n/2),D=0;D<t.e.length;D++)(s&f)!=0&&(t.a[D]+=h*w.Math.cos(n*(D-.5)),t.b[D]-=h*w.Math.sin(n*(D-.5))),f<<=1}function Ip(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(t.v=n0(t.w,0)?0:(q1(),at(E1(Date.now()),t.w)),pI(t.r,t.v),t.t=null,ut(e,1),P=0;P<e.g;P++)if(G1(e,P)>(h=En(e,P),h+en(e,P,h,e.D[P])))return!1;if(uW(e),e.T=!0,i=null,o=null,f=null,L=null,(e.U&8)!=0){for(i=c(F,m,6,e.g,15,1),f=c(Pt,it,6,e.g,16,1),r=0;r<e.g;r++)i[r]=e.v[r]&3,f[r]=(e.v[r]&4)!=0;for(o=c(F,m,6,e.i,15,1),L=c(Pt,it,6,e.i,16,1),Q=0;Q<e.i;Q++)o[Q]=e.G[Q]&3,L[Q]=(e.G[Q]&4)!=0}if(ut(e,63),i!=null){for(r=0;r<e.g;r++)me(e,r,i[r],f[r]);for(Q=0;Q<e.i;Q++)Q8(e,Q,o[Q],L[Q])}for(t.k=e,t.a=0,t.p=0,t.A=null,t.s=null,t.e=c(F,m,6,e.r,15,1),t.d=Ur(e,t.e,!1,!0),t.f=c(F,m,6,t.d,15,1),n=0;n<e.r;n++)++t.f[t.e[n]];if(y=c(Pt,it,6,e.s,16,1),s=kp(e,y),s==0)return!0;if(!cY(t,y))return!1;for(t.s=c(Y8t,A0,178,s,0,1),l=0,D=0;D<e.i;D++)y[D]&&(t.s[l++]=new GR(e,D,t.g,t.e,t.f[t.e[e.F[0][D]]],t.q,A));return ju(t.s,new Yw),t.i&&(t.c=new H7),x_(t),!0}function btt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt;for(sJ(),D=new eu,bX(D,e),T=D.j,L=D.d,ut(T,1),ut(L,1),b=new Gr,h=new Gr,GA(b,T),GA(h,L),t.c=f1,i=null,r=null,P=0,x=0,t.a=new C0,A=new _A,R=bl,C=0,S=R.length;C<S&&(j=R[C],x++!=t.b);++C)if(MA(b,j.g),cI(b,j.i),CA(b,6,8)!=0&&(MA(h,j.f),CA(h,2,8)!=0&&b.F.a.length<=512)){for(f=-1e4,l=G(h.F,0),v=new Zt(b.F);v.a<v.c.a.length&&(k=_t(v),!(x++>=t.b));)Uf(T,A),Q=YW(j,A,k),tt=bZ(j,T.g,k,L.g,l),ut(A,1),n=c(F,m,6,A.g,15,1),y=c(F,m,6,L.g,15,1),qR(D,A,L,n,y,tt)&&(N=D.q-j.e,f<N&&(f=N),t.c<N&&(t.c=N,i=BX(n,y,Q,T.g),r=y,P=D.b));o=D.a<=1?\"\":JV+D.a+\")\",q(t.a,j.d+(j.b?\"_S\":j.j.length==0?\"_L\":j.n.a.length==0?\"_I\":\"_U\")+(A9(),Q9(f,5))+o+nn)}return g=c(F,m,6,T.g,15,1),s=c(F,m,6,L.g,15,1),qR(D,T,L,g,s,null)&&(N=D.q,t.c<=N&&(t.c=N,i=g,r=s,P=D.b),o=D.a<=1?\"\":JV+D.a+\")\",q(t.a,(A9(),\"no rule:\"+Q9(N,5)+o+nn))),t.c==f1?!1:(SW(D,e,i,r,P),!0)}function jtt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N;for(r=!1,S=kn(t.d),k=0;k<S.j.a.length;k++)if(C=G(S.j,k),C.length==6&&!S.f[k]){for(y=!0,b=G(S.k,k),j=0,R=b.length;j<R;++j)if(v=b[j],dt(t.d,v)!=1||Z8(t.d,v)){y=!1;break}if(y){for(i=new N0,h=new N0,D=j1(Ut,[c0,Tt],[15,6],15,[6,3],2),n6(e,C,i,h,D),Q=c(Ut,Tt,6,C.length,15,1),x=0,L=0;L<C.length;L++)Q[L]=-(h.a*D[L][0]+h.b*D[L][1]+h.c*D[L][2]),Q[L]<0^(L&1)==1&&++x;if(x!=0&&x!=6){for(o=0;o<C.length;o++)if(Q[o]<0^(o&1)==1^x>=3){if(T=c(F,m,6,2,15,1),T[0]=C[o==0?5:o-1],T[1]=C[o==5?0:o+1],g=e.k[C[o]],n=ri(lq(_8(e.k[C[o]],i),h)),A=.6+w.Math.asin(w.Math.abs(Q[o])/w.Math.sqrt((i.a-g.a)*(i.a-g.a)+(i.b-g.b)*(i.b-g.b)+(i.c-g.c)*(i.c-g.c))),N=Q[o]<0?A:-A,P=GO(new pu(g),i),s=!1,O(t.d,C[o])>2){for(l=0;l<O(t.d,C[o]);l++)if(f=_(t.d,C[o],l),f!=T[0]&&f!=T[1]&&LA(t.d,Nt(t.d,C[o],l))){s=!0;break}}s||dW(e,C[o],T,P,n,N)}r=!0}}}return r&&(GU(e),j5(e,t.j)),r}function Rtt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(l=t.a[e],k=t.b[e],r=c(ci,A0,43,4,0,1),o=0,L=0;L<t.f.length&&!(o>=4);L++)if(!(e==t.g[K(t.j,0,t.f[L])]||e==t.g[K(t.j,1,t.f[L])])){if(h=t.a[t.g[K(t.j,0,t.f[L])]],v=t.b[t.g[K(t.j,0,t.f[L])]],T=t.a[t.g[K(t.j,1,t.f[L])]],b=t.b[t.g[K(t.j,1,t.f[L])]],f=w.Math.sqrt((h-l)*(h-l)+(v-k)*(v-k)),D=w.Math.sqrt((T-l)*(T-l)+(b-k)*(b-k)),P=w.Math.sqrt((T-h)*(T-h)+(b-v)*(b-v)),f<P&&D<P){h==T?(i=w.Math.abs(l-h),i<.5&&(r[o++]=new $P(hn(h,k,l,k),(.5-i)/2))):v==b?(i=w.Math.abs(k-v),i<.5&&(r[o++]=new $P(hn(l,v,l,k),(.5-i)/2))):(s=(b-v)/(T-h),y=-1/s,A=v-s*h,n=k-y*l,g=(n-A)/(s-y),j=s*g+A,i=w.Math.sqrt((g-l)*(g-l)+(j-k)*(j-k)),i<.5&&(r[o++]=new $P(hn(g,j,l,k),(.5-i)/2)));continue}if(f<.5){r[o++]=new $P(hn(h,v,l,k),(.5-f)/2);continue}if(D<.5){r[o++]=new $P(hn(T,b,l,k),(.5-D)/2);continue}}o>0&&(Q=L2(r,o),t.a[e]+=Q.b*w.Math.sin(Q.a),t.b[e]+=Q.b*w.Math.cos(Q.a))}function xp(t){var e,A,n,P,r,i,f,D,Q;for(A=B(d(F,1),m,6,15,[8,-2,8,-2,8]),Q=B(d(F,1),m,6,15,[8,-2,4,-2,12,-2,4,-2,12,-2,4,-2,12,-2,8]),iL(t.c,A,Q),t.o=$u(t.c,1,1),YP(t.o,t),D0(t.c,he(t.c,\"Atom Label:\"),1,1),D0(t.c,t.o,3,1),ke(t.c,he(t.c,\"(examples: 'D', 'Li', 'Cys', 'R12', 'R3@C')\"),1,3,3,3),t.p=$u(t.c,1,1),YP(t.p,t),D0(t.c,he(t.c,\"Atom Mass:\"),1,5),D0(t.c,t.p,3,5),ke(t.c,he(t.c,\"(empty for natural abundance)\"),1,7,3,7),t.q=$u(t.c,1,1),YP(t.q,t),D0(t.c,he(t.c,\"Abnormal Valence:\"),1,9),D0(t.c,t.q,3,9),ke(t.c,he(t.c,\"(empty for default valence)\"),1,11,3,11),t.a==-1?(n=(J1(),a0)[t.k],Y8(t.o,t.n==null?n:t.n+\"@\"+n),t.g!=0&&Y8(t.p,\"\"+t.g),t.j!=-1&&Y8(t.q,\"\"+t.j)):(n=Vi(t.e,t.a),e=eP(t.e,t.a),Y8(t.o,e==null?n:e+\"@\"+n),ge(t.e,t.a)!=0&&Y8(t.p,\"\"+ge(t.e,t.a)),G9(t.e,t.a)!=-1&&Y8(t.q,\"\"+G9(t.e,t.a))),t.b=TA(t.c),r=EE,i=0,f=r.length;i<f;++i)P=r[i],Gt(t.b,P);D=t.a==-1?t.i:jA(t.e,t.a),$t(t.b,D==32?1:D==48?2:D==16?3:0),D0(t.c,he(t.c,\"Radical State:\"),1,13),D0(t.c,t.b,3,13)}function ptt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(e=0;e<t.j.g;e++){for(i=0,f=!1,Q=0,s=0;s<O(t.j,e)&&!f;s++)if(P=Nt(t.j,e,s),t.e[P]){for(++i,n=_(t.j,e,s),rA(t.j,n)&&++Q,h=0;h<O(t.j,n);h++)if(T=_(t.j,n,h),g=Nt(t.j,n,h),T!=e&&t.e[g]){f=!0;break}}if(i>=2&&!f&&i==Q){if(r=c(F,m,6,i,15,1),o=yf(t.j,e),o==0)if(X(t.j,e)==7&&R1(t.j,e)==0)o=1,b0(t.j,e,1);else if(X(t.j,e)>14)o=2;else continue;for(l=0,y=0;y<O(t.j,e);y++)P=Nt(t.j,e,y),t.e[P]&&(n=_(t.j,e,y),r[l++]=(A=X(t.j,n),((A==8?14+(O(t.j,n)==1?1:0):A==7?12+(O(t.j,n)==1?1:0):A==16?10+(O(t.j,n)==1?1:0):A==34?8+(O(t.j,n)==1?1:0):A==15?6+(O(t.j,n)==1?1:0):A==33?4+(O(t.j,n)==1?1:0):A==6?2+(O(t.j,n)==1?0:1):O(t.j,n)==1?0:1)<<16)+y));for(r.sort(pe(Q0.prototype.ld,Q0,[])),t.b-=1+i,t.d[e]=!1,D=w.Math.min(i-1,o),L=0;L<r.length;L++)n=_(t.j,e,r[L]&d1),P=Nt(t.j,e,r[L]&d1),t.d[n]=!1,t.e[P]=!1,--t.c,L<r.length-D?yf(t.j,n)!=0&&b0(t.j,n,-1):(yf(t.j,n)==0&&b0(t.j,n,1),g0(t.j,P,2))}}}function Mtt(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[2,1,2,1]),B(d(F,1),m,6,15,[1,2,2,1]),B(d(F,1),m,6,15,[1,1,2,2]),B(d(F,1),m,6,15,[2,1,1,2]),B(d(F,1),m,6,15,[2,2,1,1]),B(d(F,1),m,6,15,[1,2,1,2])]),n=c(Ut,Tt,6,Ct(t.R,e),15,1),i=0;i<Ct(t.R,e);i++)n[i]=_0(t.R,_(t.R,e,A[i]),e);if(Q=W5(t.R,e,A,n,null)<<24>>24,Q!=3)return Q;for(o=0,L=0,f=0;f<Ct(t.R,e);f++)P=Nt(t.R,e,A[f]),K(t.R,0,P)==e&&(c1(t.R,P)==129&&(L!=0&&hP(t.R,e),o=f,L=1),c1(t.R,P)==257&&(L!=0&&hP(t.R,e),o=f,L=2));if(L==0)return 3;for(r=1;r<Ct(t.R,e);r++)n[r]<n[0]&&(n[r]+=m0);if(Ct(t.R,e)==3){switch(o){case 0:(n[1]<n[2]&&n[2]-n[1]<l1||n[1]>n[2]&&n[1]-n[2]>l1)&&(L=3-L);break;case 1:n[2]-n[0]>l1&&(L=3-L);break;case 2:n[1]-n[0]<l1&&(L=3-L)}return L==1?2:1}return D=0,n[1]<=n[2]&&n[2]<=n[3]?D=0:n[1]<=n[3]&&n[3]<=n[2]?D=1:n[2]<=n[1]&&n[1]<=n[3]?D=2:n[2]<=n[3]&&n[3]<=n[1]?D=3:n[3]<=n[1]&&n[1]<=n[2]?D=4:n[3]<=n[2]&&n[2]<=n[1]&&(D=5),s[D][o]==L?2:1}function Ctt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;if(t.g.a.length==0||t.f.a.length==0||(s=Es(t),s==0))return null;for(L=c(F,u0,7,t.f.a.length,0,2),r=0;r<t.f.a.length;r++)for(h=G(t.f,r),ut(h,15),L[r]=c(F,m,6,s+1,15,1),mU(L[r],-1),e=0;e<h.r;e++){if(o=w.Math.abs(h.A[e]),o!=0&&L[r][o]!=-1)return null;L[r][o]=e}for(i=c(Pt,it,6,s+1,16,1),P=0;P<t.g.a.length;P++)for(v=G(t.g,P),ut(v,15),g=0;g<v.r;g++)if(o=w.Math.abs(v.A[g]),o!=0&&!i[o]){for(f=0;f<t.f.a.length;f++)if(y=L[f][o],y!=-1){if(h=G(t.f,f),v.k[g]!=h.k[y]){i[o]=!0;break}if((v.v[g]&3)!=(h.v[y]&3)){i[o]=!0;break}for(D=0;D<v.k[g];D++)if(A=M1(v,v.j[g][D]),A==0)i[o]=!0;else{for(k=v.n[g][D],n=!1,Q=0;Q<h.k[y];Q++){if(T=M1(h,h.j[y][Q]),T==0){i[o]=!0;break}if(T==A){if(n=!0,l=h.n[y][Q],(k<v.i&&(q8(v.q,k)||v.I[k]==8))^(l<h.i&&(q8(h.q,l)||h.I[l]==8))||!(k<v.i&&(q8(v.q,k)||v.I[k]==8))&&(dt(v,k)!=dt(h,l)||(v.G[k]&3)!=(h.G[l]&3))){i[o]=!0,i[A]=!0;break}break}}n||(i[o]=!0)}}}return i}function Htt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(this.r=!0,this.b=!1,this.t=!0,this.a=!1,this.i=Et,this.c=t,this.o=c(gr,B9,26,t.g.a.length,0,1),n=0;n<t.g.a.length;n++)ve(G(t.g,n),!0),ut(G(t.g,n),15);for(P=0;P<t.f.a.length;P++)ut(G(t.f,P),15);for(ua(this,t),this.k=c(F,u0,7,t.g.a.length,0,2),r=0;r<t.g.a.length;r++)for(L=G(t.g,r),this.k[r]=c(F,m,6,L.g,15,1),i=0;i<L.g;i++)if(Q=w.Math.abs(L.A[i]),Q!=0)for(f=0;f<t.f.a.length;f++)for(o=G(t.f,f),D=0;D<o.g;D++)w.Math.abs(o.A[D])==Q&&(e=(y=En(L,i),y+en(L,i,y,L.D[i])-G1(L,i)-(s=En(o,D),s+en(o,D,s,o.D[D])-G1(o,D))),this.k[r][i]=w.Math.max(e,0));for(this.f=c(Pt,c0,12,t.f.a.length,0,2),A=0;A<t.f.a.length;A++)for(o=G(t.f,A),this.f[A]=c(Pt,it,6,o.g,16,1),i=0;i<o.g;i++)if(Q=w.Math.abs(o.A[i]),Q!=0)for(f=0;f<t.g.a.length;f++)for(L=G(t.g,f),D=0;D<L.g;D++)w.Math.abs(L.A[D])==Q&&(ms(Gb(o,i),Gb(L,D))!=0||ms(kb(o,i),kb(L,D))!=0)&&(this.f[A][i]=!0);this.s=new Gr,this.g=c(J4,c0,20,this.o.length,0,1)}function Vtt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(g=new BU(t.e,t.c),h=c5(g,t.f,t.d),t.a.a.length==0)return Ay(g,h);for(k=1,b=new Zt(t.a);b.a<b.c.a.length;)v=_t(b),k*=Mz(v);if(k>4e6)return q1(),-k;for(e=0,i=c(F,m,6,t.a.a.length,15,1),y=c(F,m,6,t.a.a.length,15,1),D=0;D<t.a.a.length;D++)v=G(t.a,D),y[D]=(v.b=new n1,R=c(F,m,6,v.a,15,1),C=c(Pt,it,6,w.Math.max(v.d.length,v.c.length),16,1),Im(v,0,C,R),v.b.a.length),i[D]=e,e+=v.a;for(r=Zy,P=null,n=null,l=c(F,m,6,t.a.a.length,15,1),s=t.a.a.length!=0;s;){if(j=!1,t.i!=null){for(Q=0;Q<t.a.a.length;Q++)if(ZX(G(t.a,Q),l[Q],t.i)){j=!0;break}}if(!j){for(Q=0;Q<t.a.a.length;Q++)hX(G(t.a,Q),l[Q],h);if(T=Ay(g,h),r<T)for(r=T,P=c(F,m,6,e,15,1),n=c(F,m,6,e,15,1),A=0,o=0;o<t.a.a.length;o++)v=G(t.a,o),QJ(v,l[o],P,A),uJ(v,l[o],n,A),A+=v.a}for(s=!1,f=0;f<l.length;f++){if(++l[f],l[f]<y[f]){s=!0;break}l[f]=0}}if(r!=Zy)for(L=t.b,f=0;f<e;f++)++L,t.f[P[f]]=L,t.d[n[f]]=L;return r}function Np(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(s=new n1,g=new n1,n=new n1,r=new Zt(t.d);r.a<r.c.a.length;){for(P=_t(r),i=0,n.a.length=0,f=0;f<P.e.length;f++)e=P.e[f],A=t.i[e],A!=0&&(Ft(n,new D3(P,f,A)),i+=A);if(i!=0)for(kD(n,new Pu),Q=new Zt(n);Q.a<Q.c.a.length&&(D=_t(Q),!(i*D.b>0&&(A=w.Math.abs(i)>=w.Math.abs(D.b)?D.b:i,i-=A,Ft(A<0?s:g,new D3(P,D.a,A)),i==0))););}if(s.a.length==0||g.a.length==0)return null;for(kD(g,new Au),kD(s,new nu),h=new Zt(g);h.a<h.c.a.length;)for(y=_t(h),L=new Zt(s);L.a<L.c.a.length;)if(o=_t(L),y.b==-o.b)return t.i[lD(y.c,y.a)]-=y.b,t.i[lD(o.c,o.a)]-=o.b,new OQ(y.c,o.c,y.a,o.a);for(T=new Zt(g);T.a<T.c.a.length;)for(y=_t(T),L=new Zt(s);L.a<L.c.a.length;)if(o=_t(L),y.b>-o.b)return t.i[lD(y.c,y.a)]+=o.b,t.i[lD(o.c,o.a)]-=o.b,new OQ(y.c,o.c,y.a,o.a);for(l=new Zt(g);l.a<l.c.a.length;)for(y=_t(l),L=new Zt(s);L.a<L.c.a.length;)if(o=_t(L),y.b<-o.b)return t.i[lD(y.c,y.a)]-=y.b,t.i[lD(o.c,o.a)]+=y.b,new OQ(y.c,o.c,y.a,o.a);return null}function CA(t,e,A){var n,P,r,i,f,D,Q;if(t.P=!1,t.F=new n1,t.a=new n1,Mi(t.O.a),!t.H||!t.g||t.g.g-t.p>t.H.g||t.g.i-t.q>t.H.i||t.g.g==0)return 0;for(e==6&&(t.N=63),Lq(t,A),n=c(Pt,it,6,t.H.g,16,1),t.G=c(F,m,6,t.g.g,15,1),mU(t.G,-1),f=c(F,m,6,t.A,15,1),zr(f,f.length,-1),r=0;!t.P;){if(t.w!=0){if(Q=t.u[r]==-1?t.H.g:Le(t.H,t.G[t.u[r]]),++f[r],f[r]==Q){if(f[r]=-1,r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1);continue}if(t.u[r]==-1)n[f[r]]||Ly(t,f[r],t.s[r])&&(t.G[t.s[r]]=f[r],n[f[r]]=!0,++r);else{if(_(t.H,t.G[t.u[r]],f[r])>=t.H.g)continue;P=_(t.H,t.G[t.u[r]],f[r]),t.t[r]?P==t.G[t.s[r]]&&ey(t,Nt(t.H,t.G[t.u[r]],f[r]),t.v[r])&&++r:n[P]||Ly(t,P,t.s[r])&&ey(t,Nt(t.H,t.G[t.u[r]],f[r]),t.v[r])&&(n[P]=!0,t.G[t.s[r]]=P,++r)}}if(r==t.w){if(Mp(t,-1)&&hR(t,-1)&&AR(t,n,-1)){for(D=!1,i=0;i<t.d;i++)if(ttt(t,n,f,i)){D=!0;break}if(e==1&&!D||!D&&(Na(t,e),e==2))return 1}if(r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1)}}return jW(t),t.F.a.length}function Ett(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht;for($=kn(t.e),a=G($.k,e).length,et=G($.j,e),W=G($.k,e),x=!0,g=1;g<a;g++)if(pr(t.b,W[g])!=pr(t.b,W[0])){x=!1;break}if(x){for(r=(a-2)*S2/a,k=0;k<a;k++)i5(t,et[k],W[k],W[k==0?a-1:k-1],r);return}for(H=c(Oe,uA,6,a,15,1),P=0,v=0;v<a;v++)H[v]=e0(t.e,et[v])==0?1.9106119386631804:e0(t.e,et[v])==1?2.094499897810209:S2,P+=H[v];for(n=((a-2)*S2-P)/a,b=0;b<a;b++)H[b]+=n;for(o=c(Oe,uA,6,a,15,1),j=1;j<a;j++)o[j]=o[j-1]+S2-H[j];for(f=c(Oe,uA,6,a,15,1),i=0;i<100;i++){for(st=0,ht=0,k=0;k<a;k++)st+=pr(t.b,W[k])*w.Math.sin(o[k]),ht+=pr(t.b,W[k])*w.Math.cos(o[k]);for(y=pA(0,0,st,ht),h=w.Math.sqrt(st*st+ht*ht),tt=-1,N=0,R=0;R<a;R++)C=R==0?a-1:R-1,S=R+1==a?0:R+1,D=Ze(o[R],o[C]),Q=Ze(o[S],o[R]),Y=Ze(H[R],H[S]),f[R]=2*D-2*Q+2*Y,l=w.Math.cos(o[R]-D4-y),s=h*l-MM*f[R],w.Math.abs(s)>w.Math.abs(N)&&(N=s,tt=R);L=w.Math.exp(-5*i/100),o[tt]+=L*N}for(T=0;T<a;T++)C=T==0?a-1:T-1,A=o[C]+S2-o[T],A>m0&&(A-=m0),i5(t,et[T],W[C],W[T],A)}function Gp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(t.k=c(F,m,6,t.r,15,1),t.e=c(F,m,6,t.r,15,1),t.j=c(F,u0,7,t.r,0,2),t.n=c(F,u0,7,t.r,0,2),t.o=c(F,u0,7,t.r,0,2),t.p=c(F,m,6,t.g,15,1),o=c(F,m,6,t.r,15,1),i=0;i<t.s;i++)++o[t.F[0][i]],++o[t.F[1][i]];for(n=0;n<t.r;n++)t.j[n]=c(F,m,6,o[n],15,1),t.n[n]=c(F,m,6,o[n],15,1),t.o[n]=c(F,m,6,o[n],15,1);for(s=!1,Q=0;Q<t.i;Q++){if(y=dt(t,Q),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.F[L][Q],e=t.e[A],t.o[A][e]=y,t.j[A][e]=t.F[1-L][Q],t.n[A][e]=Q,++t.e[A],++t.k[A],A<t.g&&y>1&&(t.p[A]+=y-1)}for(D=0;D<t.i;D++)if(t.I[D]==8)for(L=0;L<2;L++)A=t.F[L][D],A<t.g&&t.p[A]==0&&(t.p[A]=1);for(f=t.i;f<t.s;f++){if(y=dt(t,f),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.F[L][f],e=t.e[A],t.o[A][e]=y,t.j[A][e]=t.F[1-L][f],t.n[A][e]=f,++t.e[A],t.F[1-L][f]<t.g&&++t.k[A]}if(s){for(e=c(F,m,6,t.r,15,1),P=0;P<t.r;P++)e[P]=t.e[P];for(r=0;r<t.s;r++)if(y=dt(t,r),y==0)for(L=0;L<2;L++)A=t.F[L][r],t.o[A][e[A]]=y,t.j[A][e[A]]=t.F[1-L][r],t.n[A][e[A]]=r,++e[A]}}function Stt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;t.b|=e;try{for(l=o2(\"torsionID.txt\"),n=(e&1)==0?null:o2(\"torsionAngle.txt\"),s=(e&1)==0?null:o2(\"torsionRange.txt\"),f=(e&1)==0?null:o2(\"torsionFrequency.txt\"),r=(e&2)==0?null:o2(\"torsionBins.txt\"),h=X1(l);h!=null;){if(y=Be(t.c,h),y||(y=new t7(h.endsWith(\"<\")||h.endsWith(\">\")?0:h.endsWith(\"-\")||h.endsWith(\"+\")?1:h.endsWith(\"=\")?3:2),We(t.c,h,y)),n)for(A=c8(X1(n),\",\"),y.a=c(Kt,t1,6,A.length,15,1),Q=0;Q<A.length;Q++)y.a[Q]=L1(A[Q],vy,32767)<<16>>16;if(s)for(L=c8(X1(s),\",\"),y.d=j1(Kt,[ie,t1],[16,6],15,[L.length,2],2),Q=0;Q<L.length;Q++)o=L[Q].indexOf(p0(45),1),y.d[Q][0]=L1(hA(L[Q],0,o),vy,32767)<<16>>16,y.d[Q][1]=L1(GD(L[Q],o+1),vy,32767)<<16>>16;if(f)for(D=c8(X1(f),\",\"),y.c=c(Kt,t1,6,D.length,15,1),Q=0;Q<D.length;Q++)y.c[Q]=L1(D[Q],-128,127)<<24>>24;if(r)for(P=c8(X1(r),\",\"),y.b=c(E,I,6,P.length,15,1),Q=0;Q<P.length;Q++)y.b[Q]=L1(P[Q],-128,127)<<24>>24;h=X1(l)}}catch(T){if(T=_1(T),Yt(T,79))i=T,ur(i,(q1(),k9),\"\");else throw At(T)}}function si(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;if(t.R.g!=0&&!t.G){for(t.I=0,j=0,A=1;A<t.R.g;A++)t.f[A]>t.f[j]&&(j=A);for(n=c(Pt,it,6,t.R.g,16,1),i=c(Pt,it,6,t.R.i,16,1),t.H=c(F,m,6,t.R.g,15,1),t.B=c(F,m,6,t.R.g,15,1),t.F=c(F,m,6,t.R.g,15,1),t.C=c(F,m,6,t.R.i,15,1),t.B[0]=j,t.H[j]=0,n[j]=!0,P=1,D=0,Q=1,o=0;D<t.R.g;)if(D<Q){for(;;){for(l=0,h=0,s=-1,e=t.B[D],T=0;T<Le(t.R,e);T++)(T<O(t.R,e)||T>=Ct(t.R,e))&&(f=_(t.R,e,T),!n[f]&&t.f[f]>s&&(l=f,h=Nt(t.R,e,T),s=t.f[f]));if(s==-1)break;t.H[l]=Q,t.F[Q]=D,t.B[Q++]=l,t.C[o++]=h,n[l]=!0,i[h]=!0}++D}else{for(y=0,s=-1,e=0;e<t.R.g;e++)!n[e]&&t.f[e]>s&&(y=e,s=t.f[e]);++P,t.H[y]=Q,t.F[Q]=-1,t.B[Q++]=y,n[y]=!0}for(t.D=c(F,m,6,2*(t.R.i-o),15,1);;){for(k=t.R.N,v=t.R.N,b=-1,r=0;r<t.R.i;r++)i[r]||(t.H[K(t.R,0,r)]<t.H[K(t.R,1,r)]?(g=t.H[K(t.R,0,r)],L=t.H[K(t.R,1,r)]):(g=t.H[K(t.R,1,r)],L=t.H[K(t.R,0,r)]),(g<k||g==k&&L<v)&&(k=g,v=L,b=r));if(b==-1)break;i[b]=!0,t.C[o++]=b,t.D[2*t.I]=k,t.D[2*t.I+1]=v,++t.I}t.G=!0}}function Op(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R;if(t==null||t.length==0||(R=t.indexOf(p0(33)),R==-1))return null;for(l=!1,L=R!=0?0:t.length==1?-1:1,v=0,D=0,i?Sv(i):i=new U8;L!=-1;)L>R&&(l=!0),Q=t.indexOf(p0(32),L),R>L&&(Q>R||Q==-1)&&(Q=R),o=Q==-1?(zt(L,t.length+1),t.substr(L)):(Mt(L,Q,t.length),t.substr(L,Q-L)),L=Q==-1||Q==t.length-1?-1:Q+1,k=null,e!=null&&e.length!=0&&(Q=e.indexOf(p0(32),v),Q==-1?k=(zt(v,e.length+1),e.substr(v)):(k=(Mt(v,Q,e.length),e.substr(v,Q-v)),v=Q+1)),f=null,A!=null&&A.length!=0&&(Q=A.indexOf(p0(32),D),Q==-1?f=(zt(D,A.length+1),A.substr(D)):(f=(Mt(D,Q,A.length),A.substr(D,Q-D)),D=Q+1)),j=new WA(r),b=o==null?null:ds(j,ln((T=o,w0(),T)),f==null?null:ln((g=f,g)),0),k!=null&&EY(j,ln((h=k,w0(),h))),l?(Ft(i.f,b),i.d=-1):(Ft(i.g,b),i.d=-1);if(n!=null&&n.length!=0&&FI(i,new Ib(n)),P!=null&&P.length!=0){for(j=new WA(r),s=0,y=P.indexOf(p0(43));y!=-1;)oh(i,tf(j,(Mt(s,y,P.length),P.substr(s,y-s)))),s=y+1,y=P.indexOf(p0(43),s);oh(i,tf(j,(zt(s,P.length+1),P.substr(s))))}return i}function Itt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S;for(Q=c(F,m,6,t.j.g,15,1),g=c(F,m,6,t.d.g,15,1),o=c(F,m,6,t.j.g,15,1),v=c(F,m,6,t.d.g,15,1),Q[0]=e.b,o[e.b]=e.b,g[0]=e.a,v[e.a]=e.a,t.n[e.b]==0&&(++t.c,t.n[e.b]=t.c,t.f[e.a]=t.c),f=0,L=0;f<=L;){for(R=Q[f],b=g[f],T=j1(F,[u0,m],[7,6],15,[O(t.j,R),O(t.d,b)],2),y=0;y<O(t.j,R);y++)if(j=_(t.j,R,y),t.n[j]==0)for(r=iF(t.j,Nt(t.j,R,y)),h=0;h<O(t.d,b);h++)k=_(t.d,b,h),t.f[k]==0&&X(t.j,j)==X(t.d,k)&&(i=Nt(t.d,b,h),S=FZ(t,R,j,b,k),r==iF(t.d,i)||S!=0?ra(t,R,j,b,k)&&(D=Pj(t,R,j,b,k),C=w.Math.max(S,D),C!=0&&(l=c_(t,o[R],R,j,v[b],b,k),j_(t,R,j,b,k,C,l)&&(T[y][h]=C,l&&(T[y][h]+=64),LB(o[R],R,j,t.o)==LB(v[b],b,k,t.g)&&(T[y][h]+=128),kF(t.j,j)==kF(t.d,k)&&(T[y][h]+=1)))):Pj(t,R,j,b,k)==O1&&(T[y][h]=768));for(;;){for(A=0,P=-1,n=-1,s=0;s<T.length;s++)if(j=_(t.j,R,s),t.n[j]==0)for(h=0;h<T[s].length;h++)k=_(t.d,b,h),t.f[k]==0&&A<T[s][h]&&(A=T[s][h],P=j,n=k);if(A==0)break;++L,Q[L]=P,o[P]=Q[f],g[L]=n,v[n]=g[f],++t.c,t.n[P]=t.c,t.f[n]=t.c}++f}return L+1}function qp(){qp=v1,Ro=B(d(Kt,1),t1,6,15,[-1,-1,-1,0,0,1,2,3,4,5,-1,0,0,0,6,7,8,9,-1,0,0,10,10,10,10,10,10,10,10,10,10,1,11,11,12,13,-1,0,0,10,10,10,10,10,10,10,10,10,10,0,0,0,11,14,-1,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,10,10,10,10,10,10,10,10,1,1,1,1,-1,-1,-1,-1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),z4=B(d(Kt,1),t1,6,15,[-1,-1,-1,0,0,0,2,5,5,5,-1,0,0,0,0,9,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])}function xtt(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;P=e.a,y=e.g,Q=gt(V(h0(t.k,P),1),0),r=IA(t.k,P),L=r!=null?kZ(t,P,r,n):Q?\"*\":Vi(t.k,P),!Q&&r==null&&mn(t.k,P)&&(t.j&4)==0&&(e0(t.k,P)!=0||G9(t.k,P)==-1&&jA(t.k,P)==0)&&(L=L.toLowerCase()),e.f&&(A.a+=\"(\"),y!=-1&&Rp(t,o1(t.k,e.a,e.g),e.g,A),i=R1(t.k,P),i==0&&(t.j&1)!=0&&(f=V(h0(t.k,P),yr),z(f,Sf)==0?i=-1:z(f,Ef)==0&&(i=1)),o=ge(t.k,P),s=(t.j&2)!=0?M1(t.k,P):0,l=(t.j&1)!=0?D1t(t,P,n):null,g=!Q&&!WG(X(t.k,P))||r!=null||(v0(t.k,P)==1||v0(t.k,P)==2)&&(T=De(t.k,P)-1,!(T!=-1&&t.i[T][OA(t.k,P)]<=1))&&(X(t.k,P)!=7||R1(t.k,P)>0)||mn(t.k,P)&&e0(t.k,P)==0&&(t.j&4)==0||i!=0||o!=0||s!=0||G9(t.k,P)!=-1||jA(t.k,P)!=0||l!=null,g&&(A.a+=\"[\"),o!=0&&(A.a+=o),A.a+=\"\"+L,(v0(t.k,P)==1||v0(t.k,P)==2)&&(h=De(t.k,P)-1,!(h!=-1&&t.i[h][OA(t.k,P)]<=1))&&(X(t.k,P)!=7||R1(t.k,P)>0)&&q(A,Sa(t,P,y)),(t.j&1)==0&&g&&(D=_d(t.k,P),D==1?A.a+=\"H\":D>1&&(A.a+=\"H\"+D)),i!=0&&(A.a+=String.fromCharCode(i>0?43:45),w.Math.abs(i)>1&&Mh(A,w.Math.abs(i))),l!=null&&(A.a+=\"\"+l),s!=0&&(A.a+=\":\",A.a+=s),g&&(A.a+=\"]\"),uX(t,e,A),e.e&&(A.a+=\")\")}function Ntt(t,e,A,n){var P,r,i,f,D,Q;if(i=1,z(t,0)==0)return n||A==1?\"0\":\"0.\"+HP(A-1);if(z(t,0)!=0){for(;n0(n9(t,10),0);)t=Sn(t,10),++e;for(i=0,f=t;z(f,0)!=0;f=Sn(f,10))++i}return r=new C0,z(t,0)<0&&(r.a+=\"-\"),D=w.Math.max(0,A-i),P=\"\"+Fe(z(t,0)<0?E0(t):t),e==0?(r.a+=P,!n&&D!=0&&(r.a+=\".\",q(r,HP(D)))):e>0?(Q=n?e>4:e-D>4,Q?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":q(r,HP(D)))):(q(r,(Mt(0,1,P.length),P.substr(0,1))),r.a+=\".\",q(r,(zt(1,P.length+1),P.substr(1))),!n&&D!=0&&q(r,HP(D))),r.a+=\"e\",r.a+=\"\"+(e+i-1)):(r.a+=P,q(r,HP(e)),!n&&D>e&&(r.a+=\".\",q(r,HP(D-e))))):-e<i?(q(r,(Mt(0,i+e,P.length),P.substr(0,i+e))),r.a+=\".\",q(r,(zt(i+e,P.length+1),P.substr(i+e))),!n&&D!=0&&q(r,HP(D))):-e==i?(r.a+=\"0.\",r.a+=P,!n&&D!=0&&q(r,HP(D))):e+i<-2?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":q(r,HP(D)))):(Ye(r,(zt(0,P.length),P.charCodeAt(0))),r.a+=\".\",q(r,(zt(1,P.length+1),P.substr(1))),!n&&D!=0&&q(r,HP(D))),r.a+=\"e-\",r.a+=\"\"+(1-e-i)):(r.a+=\"0.\",q(r,HP(-e-i)),r.a+=P,!n&&D!=0&&q(r,HP(D))),r.a}function Gtt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(r=tn(t.V,e,A),i=kf(t.V,e,A),t.w==2){if(t.V.L){if(r!=-1)GF(t,r);else if(i!=-1)Jv(t,i);else if(t.v){if(!t.Z){for(s=0;s<t.V.r;s++)vP(t.V,s,!1);for(P=new Zt(t.I);P.a<P.c.a.length;)n=_t(P),n.g=!1}t.v.g=!0,t.eb=w.Math.max(t.eb,1),P1(t.k)}}else if(g=-1,r!=-1?g=r:i!=-1&&(g=K(t.V,0,i)),g!=-1||t.v){if(!t.Z){for(s=0;s<t.V.r;s++)vP(t.V,s,!1);if(t.I)for(Q=new Zt(t.I);Q.a<Q.c.a.length;)D=_t(Q),D.g=!1}if(g!=-1)if((t.U&1)!=0)for(o=t.M[g],s=0;s<t.V.r;s++)t.M[s]==o&&vP(t.V,s,!0);else for(L=xm(t.V,g,!1),s=0;s<L.length;s++)vP(t.V,L[s],!0);else t.v.g=!0;t.eb=w.Math.max(t.eb,1),P1(t.k)}}else if(t.w==18&&(o=-2,(t.U&1)!=0&&(o=_J(t)),o!=-1)){for(T=Et,h=f1,y=0;y<t.V.r;y++)(o==-2||t.M[y]==o)&&(T>mt(t.V,y)&&(T=mt(t.V,y)),h<mt(t.V,y)&&(h=mt(t.V,y)));if(h>T){for(f=(h+T)/2,l=0;l<t.V.r;l++)(o==-2||t.M[l]==o)&&de(t.V,l,2*f-mt(t.V,l));for(s=0;s<t.V.s;s++)if(o==-2||t.M[K(t.V,0,s)]==o)switch(c1(t.V,s)){case 257:g0(t.V,s,129);break;case 129:g0(t.V,s,257)}}t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0))}}function zp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(o=t.Q,L=t.F,(t.G&Gn)!=0&&(t.Q=-6,t.F=hy,$1(t,1)),t.o=c(lc,A0,56,t.L.r,0,1),D=0;D<t.L.s;D++)(c1(t.L,D)==2||c1(t.L,D)==386||c1(t.L,D)==8)&&tM(t,D);for(Q=0;Q<t.L.s;Q++)c1(t.L,Q)!=2&&c1(t.L,Q)!=386&&c1(t.L,Q)!=8&&tM(t,Q);if((t.G&64)==0)for(f=0;f<t.L.s;f++)bu(t.L,f)!=0&&(P=null,bu(t.L,f)==1||bu(t.L,f)==2?(dt(t.L,f)==2||gP(t.L,f)==0||e[gP(t.L,f)][ef(t.L,f)]>1)&&(bu(t.L,f)==1?P=dt(t.L,f)==2?\"E\":RU(t.L,f)?\"p\":\"P\":P=dt(t.L,f)==2?\"Z\":RU(t.L,f)?\"m\":\"M\"):P=\"?\",P!=null&&(t.Cb((t.X*2+1)/3|0),$1(t,V9(t.L,f)?-3:t.L.P==1||(t.G&S0)!=0?t.Q:448),A=K(t.L,0,f),n=K(t.L,1,f),y=(W1(t.R,mt(t.L,A))+W1(t.R,mt(t.L,n)))/2,l=(Z1(t.R,Rt(t.L,A))+Z1(t.R,Rt(t.L,n)))/2,r=(W1(t.R,mt(t.L,A))-W1(t.R,mt(t.L,n)))/3,i=(Z1(t.R,Rt(t.L,A))-Z1(t.R,Rt(t.L,n)))/3,EP(t,y+i,l-r,P,!0),$1(t,t.Q),t.Cb(t.X)));if((t.G&4)!=0){for(t.Cb((t.X*2+1)/3|0),$1(t,384),f=0;f<t.L.s;f++)A=K(t.L,0,f),n=K(t.L,1,f),s=Z8(t.L,f)?\"d\":eA(t.L,f)?\"a\":\"\",y=(W1(t.R,mt(t.L,A))+W1(t.R,mt(t.L,n)))/2,l=(Z1(t.R,Rt(t.L,A))+Z1(t.R,Rt(t.L,n)))/2,EP(t,y,l,s+(\"\"+f),!0);$1(t,t.Q),t.Cb(t.X)}(t.G&Gn)!=0&&(t.Q=o,t.F=L)}function Kp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R;for(ut(t,1),A&&(e=!0),D=0;D<t.s;D++)if(Q=dt(t,D),Q==1||Q==2){if(t.t[t.F[0][D]]>0&&t.t[t.F[1][D]]<0)r=t.F[0][D],i=t.F[1][D];else if(t.t[t.F[0][D]]<0&&t.t[t.F[1][D]]>0)r=t.F[1][D],i=t.F[0][D];else continue;if(Ae(t,r)||Ae(t,i)||t.D[r]<9&&G1(t,r)>3||t.D[i]<9&&G1(t,i)>3)continue;L=xt(t,r)!=0,t.t[r]-=1,t.t[i]+=1,L||(k=t.I[D],Q==1?t.I[D]=2:t.I[D]=4,(k==129||k==257)&&(R=t.F[0][D],g=_s(t,R,!1),t.F[0][g]!=R&&(t.F[1][g]=t.F[0][g],t.F[0][g]=R))),t.U=0}for(v=0,h=0,y=0,P=0;P<t.r;P++)v+=t.t[P],t.t[P]<0&&!CF(t,P)&&(++h,rA(t,P)&&(y-=t.t[P]));if(!e&&v!=0)throw At(new H1(\"molecule's overall charges are not balanced\"));for(ut(t,1),b=0,j=A?v+y:y,f=0;f<t.r;f++)t.t[f]>0&&!Sq(t,f)&&rA(t,f)&&(o=w.Math.min(xt(t,f),t.t[f]),o!=0&&j>=o&&(v-=o,b-=o,j-=o,t.t[f]-=o,t.U&=1));if(T=A?v:b,T<0){for(l=c(F,m,6,h,15,1),h=0,r=0;r<t.r;r++)t.t[r]<0&&!CF(t,r)&&(l[h++]=(t.D[r]<<22)+r);for(l.sort(pe(Q0.prototype.ld,Q0,[])),s=l.length-1;T<0&&s>=l.length-h;s--)n=l[s]&z0,rA(t,n)&&(o=w.Math.min(-T,-t.t[n]),v+=o,T+=o,t.t[n]+=o,t.U&=1)}return v}function Jp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;for(o=c(ft,Dt,2,t.g.a.length+t.f.a.length,6,1),l=c(ft,Dt,2,t.g.a.length+t.f.a.length,6,1),r=c(ft,Dt,2,t.g.a.length+t.f.a.length,6,1),D=0;D<t.g.a.length+t.f.a.length;D++){if(g=D<t.g.a.length?G(t.g,D):G(t.f,D-t.g.a.length),g.L&&D<t.g.a.length)for(n=0;n<g.r;n++)w1(g,n,k8,!1);if(P=new bA(g),o[D]=Me(P),o[D]==null)return null;l[D]=cB(P),r[D]=zu(P,e)}for(L=new C0,i=new C0,h=new C0,Q=0;Q<t.g.a.length;Q++){if(s=Q,A)for(T=\"\",s=-1,y=0;y<t.g.a.length;y++)a9(T,o[y])<0&&(T=o[y],s=y);Q>0&&(L.a+=\" \",h.a+=\" \",i.a+=\" \"),L.a+=\"\"+o[s],h.a+=\"\"+l[s],i.a+=\"\"+r[s],o[s]=\"\"}for(L.a+=\"!\",t.f.a.length!=0&&t.g.a.length!=0&&(h.a+=\" \",i.a+=\" \"),f=t.g.a.length;f<t.g.a.length+t.f.a.length;f++){if(s=f,A)for(T=\"\",s=-1,y=t.g.a.length;y<t.g.a.length+t.f.a.length;y++)a9(T,o[y])<0&&(T=o[y],s=y);f>t.g.a.length&&(L.a+=\" \",h.a+=\" \",i.a+=\" \"),L.a+=\"\"+o[s],h.a+=\"\"+l[s],i.a+=\"\"+r[s],o[s]=\"\"}return k=c(ft,Dt,2,5,6,1),k[0]=L.a,h.a.length>t.g.a.length+t.f.a.length-1&&(k[1]=h.a),i.a.length>t.g.a.length+t.f.a.length-1&&(k[2]=i.a),t.b&&(k[3]=Tm(t.b)),t.a.a.length!=0&&(k[4]=dY(t,e)),k}function Yp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(this.i=t,this.v=t.s,this.u=t.q,this.C=new xR(this.u,this.v),r=0,o=this.v,y=0,T=o.length;y<T;++y)D=o[y],r=w.Math.max(r,w.Math.max(1+D.i,1+D.j));for(e=c(F,m,6,r,15,1),L=this.v,l=0,g=L.length;l<g;++l)D=L[l],++e[D.i],++e[D.j];for(this.j=c(F,u0,7,e.length,0,2),this.k=c(F,u0,7,e.length,0,2),f=0;f<e.length;f++)this.j[f]=c(F,m,6,e[f],15,1),this.k[f]=c(F,m,6,e[f],15,1);for(zr(e,e.length,0),i=0;i<this.v.length;i++)n=ag(this.v[i],0),P=ag(this.v[i],1),this.j[n][e[n]]=P,this.j[P][e[P]]=n,this.k[n][e[n]]=i,this.k[P][e[P]]=i,++e[n],++e[P];for(this.o=c(F,m,6,r,15,1),this.n=c(F,m,6,r,15,1),this.q=c(F,m,6,r,15,1),this.p=c(Pt,it,6,r,16,1),this.f=c(F,DA,29,r,0,3),A=1;A<r;A++)for(this.f[A]=c(F,u0,7,A,0,2),P=0;P<A;P++)this.f[A][P]=e_(this,A,P);for(this.t=1,Q=this.v,s=0,h=Q.length;s<h;++s)D=Q[s],this.t*=D.d.length;for(v=this.u,b=0,j=v.length;b<j;++b)k=v[b],this.t*=k.b.length;this.t<=0&&(this.t=Et),this.D=new dd,this.w=new Oh((y1(new Xw),new mw)),this.A=new Ci,this.g=0,this.B=0,this.r=3,this.F=!1,this.s=w.Math.min(fP,this.t)}function Ott(t,e){var A,n;return n={},A=t.C[e],n.aromatic=I1(V(A,2),0),n.notAromatic=I1(V(A,4),0),n.notChain=I1(V(A,8),0),n.not2RingBonds=I1(V(A,16),0),n.not3RingBonds=I1(V(A,32),0),n.not4RingBonds=I1(V(A,64),0),n.noMoreNeighbours=I1(V(A,O1),0),n.moreNeighbours=I1(V(A,S0),0),n.matchStereo=I1(V(A,je),0),n.not0PiElectrons=I1(V(A,Gn),0),n.not1PiElectron=I1(V(A,g8),0),n.not2PiElectrons=I1(V(A,o0),0),n.not0Hydrogen=I1(V(A,128),0),n.not1Hydrogen=I1(V(A,256),0),n.not2Hydrogen=I1(V(A,512),0),n.not3Hydrogen=I1(V(A,Qe),0),n.not0Neighbours=I1(V(A,q0),0),n.not1Neighbour=I1(V(A,v8),0),n.not2Neighbours=I1(V(A,B8),0),n.not3Neighbours=I1(V(A,F8),0),n.not4Neighbours=I1(V(A,KA),0),n.notChargeNeg=I1(V(A,oo),0),n.notCharge0=I1(V(A,wn),0),n.noChargePos=I1(V(A,134217728),0),n.ringSize0=I1(V(A,w8),0),n.ringSize3=I1(V(A,h9),0),n.ringSize4=I1(V(A,T9),0),n.ringSize5=I1(V(A,c9),0),n.ringSize6=I1(V(A,w9),0),n.ringSize7=I1(V(A,g9),0),n.ringSizeLarge=I1(V(A,Vf),0),n}function qtt(t,e){s8();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(g=c(Pt,it,6,e.i,16,1),j=(ut(e,7),e.q),T=c(Pt,it,6,j.j.a.length,16,1),Py(j,T,c(Pt,it,6,j.j.a.length,16,1),c(F,m,6,j.j.a.length,15,1),!0),b=0;b<j.j.a.length;b++)if(T[b])for(h=0;h<G(j.k,b).length;h++)g[G(j.k,b)[h]]=!0;for(P=c(F,m,6,2,15,1),i=0;i<e.i;i++)if(D=e.F[0][i],Q=e.F[1][i],P[0]=e.D[D],P[1]=e.D[Q],g[i]=g[i]|(i<e.i&&Ee(e.q,i)||dt(e,i)==2&&P[0]<=8&&P[1]<=8&&e.p[D]==1&&e.p[Q]==1&&e.e[D]>1&&e.e[Q]>1),!g[i]&&dt(e,i)==1){for(l=0;l<2;l++)if((P[l]==7||P[l]==8)&&P[1-l]==6){for(o=e.F[1-l][i],v=0;v<e.k[o];v++)if(e.o[o][v]==2&&(L=e.j[o][v],e.D[L]==7||e.D[L]==8||e.D[L]==16)){g[i]=!0;break}}}for(k=c(Pt,it,6,e.g,16,1),f=0;f<e.i;f++)g[f]&&(k[e.F[0][f]]=!0,k[e.F[1][f]]=!0);for(y=c(F,m,6,e.r,15,1),r=0;r<e.i;r++)if(g[r]){for(y[0]=e.F[0][r],s=r_(y,g,e),n=c(F,m,6,s,15,1),l=0;l<s;l++)n[l]=y[l];Ft(t,new U5(n,e))}for(A=0;A<e.g;A++)if(!k[A]&&(e.D[A]==5&&e.t[A]==0&&e.e[A]<=3||e.D[A]<=8&&e.p[A]==1&&e.e[A]>1||xP(e,A,!0)&&e.p[A]!=2&&e.e[A]>1)){for(n=c(F,m,6,1+e.e[A],15,1),l=0;l<e.e[A];l++)n[l]=e.j[A][l];n[e.e[A]]=A,Ft(t,new U5(n,e))}}function ztt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H;for(v=c(Pt,it,6,t.j.g,16,1),x=0;x<e.j.a.length;x++)if(N=G(e.k,x).length,(N==3||N==5||N==6||N==7)&&t.i[x])for(n=G(e.j,x),P=0,r=n.length;P<r;++P)A=n[P],v[A]=!0;for(s=c(F,m,6,t.j.g,15,1),l=c(Pt,it,6,t.j.g,16,1),Q=0;Q<t.j.i;Q++)i=K(t.j,0,Q),f=K(t.j,1,Q),!v[i]&&!v[f]&&(t.e[Q]&&(++s[i],++s[f]),c1(t.j,Q)==16&&(l[i]=!0,l[f]=!0));for(S=c(F,m,6,t.j.g,15,1),y=c(F,m,6,t.j.g,15,1),H=0;H<t.j.g;H++)if(s[H]==1)for(y[0]=H,L=0,h=0;L<=h;){for(T=0;T<O(t.j,y[L]);T++)if(t.e[Nt(t.j,y[L],T)]&&(o=_(t.j,y[L],T),(L==0||o!=y[L-1])&&s[o]!=0)){if(y[++h]=o,(s[o]&1)!=0){for(j=1;j<h;j+=2)S[y[j]]=-1;h=0}break}++L}for(D=c(Pt,it,6,t.j.g,16,1),tt=0;tt<t.j.g;tt++)if(!D[tt]&&s[tt]!=0){for(y[0]=tt,D[tt]=!0,L=0,h=0;L<=h;){for(T=0;T<O(t.j,y[L]);T++)t.e[Nt(t.j,y[L],T)]&&(o=_(t.j,y[L],T),D[o]||(y[++h]=o,D[o]=!0));++L}if((h&1)==0){for(g=0;g<=h;g++)S[y[g]]==0&&(S[y[g]]=Tp(t,y[g],!1));for(b=!0,k=0;k<=h;k++)if(S[y[k]]<=0&&!cf(t,y[k],!1)){b=!1;break}if(b){for(C=0,R=-1,T=0;T<=h;T++)C<S[y[T]]&&(C=S[y[T]],R=y[T]);C>0&&(Tp(t,R,!0),Df(t,R))}}}}function Xp(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;P=new h1,D=new h1,o=new we,Q=new we,i=K(t.L,0,A),f=K(t.L,1,A),n&&(s=e.a,e.a=e.b,e.b=s,s=e.c,e.c=e.d,e.d=s,y=i,i=f,f=y),vA(t,e)&&(LA(t.L,A)?(P.a=e.a,P.c=e.c,P.b=e.b,P.d=e.d,L=n?-Q6(t.L,A):Q6(t.L,A),L==0&&(L=1),Lf(t,e.b-e.a,e.d-e.c,o),L>0?(D.a=e.a+o.a,D.c=e.c+o.b,D.b=e.b+o.a,D.d=e.d+o.b,(Ui(t,i,f,1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+o.b,D.c+=Q.b-o.a)):(D.a=e.a-o.a,D.c=e.c-o.b,D.b=e.b-o.a,D.d=e.d-o.b,(Ui(t,i,f,-1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+o.b,D.c+=Q.b-o.a)),c1(t.L,A)==386&&lL(P,D),vA(t,P)&&In(t,P,i,f),c1(t.L,A)==8?vA(t,D)&&qQ(t,D,i,f):vA(t,D)&&In(t,D,i,f)):(Lf(t,e.b-e.a,e.d-e.c,o),l=o.a/2,h=o.b/2,r=!1,P.a=e.a+l,P.c=e.c+h,P.b=e.b+l,P.d=e.d+h,O(t.L,i)>1&&(Ui(t,i,f,1,Q)?(P.a+=Q.a,P.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(P.a+=o.b,P.c-=o.a)):t.o[i]=new Hh(P.a,P.c)),D.a=e.a-l,D.c=e.c-h,D.b=e.b-l,D.d=e.d-h,O(t.L,i)>1&&(Ui(t,i,f,0,Q)?(D.a+=Q.a,D.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(D.a+=o.b,D.c-=o.a)):(t.o[i]=new Hh(D.a,D.c),r=!0)),c1(t.L,A)==386&&lL(P,D),c1(t.L,A)==8?r?(qQ(t,P,i,f),In(t,D,i,f)):(In(t,P,i,f),qQ(t,D,i,f)):(In(t,P,i,f),In(t,D,i,f))))}function Ktt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;this.i=t,this.g=7,this.j=new n1,this.k=new n1,this.b=new n1,this.a=c(F,m,6,this.i.g,15,1),this.c=c(F,m,6,this.i.i,15,1),this.i._b(1),s=c(Pt,it,6,this.i.g,16,1),y=c(Pt,it,6,this.i.i,16,1);do for(i=!1,A=0;A<this.i.g;A++)if(!s[A]){for(T=0,L=0;L<O(this.i,A);L++)s[_(this.i,A,L)]||++T;if(T<2){for(s[A]=!0,o=0;o<O(this.i,A);o++)y[Nt(this.i,A,o)]=!0;i=!0}}while(i);for(k=0;k<this.i.g&&s[k];)++k;if(k!=this.i.g){for(D=c(F,m,6,this.i.g,15,1),D[0]=k,h=c(F,m,6,this.i.g,15,1),h[0]=-1,f=c(F,m,6,this.i.g,15,1),f[k]=1,r=0,Q=0,l=1;r<=Q;){for(o=0;o<O(this.i,D[r]);o++)if(P=_(this.i,D[r],o),P!=h[D[r]]){if(f[P]!=0){R_(this,Nt(this.i,D[r],o),s);continue}s[P]||(f[P]=l,h[P]=D[r],D[++Q]=P)}if(++r,r>Q){for(A=0;A<this.i.g;A++)if(f[A]==0&&!s[A]){f[A]=++l,D[++Q]=A,h[A]=-1;break}}}if((e&4)!=0&&(this.e=c(Pt,it,6,this.j.a.length,16,1),this.f=c(Pt,it,6,this.j.a.length,16,1),this.d=c(F,m,6,this.j.a.length,15,1),Py(this,this.e,this.f,this.d,(e&8)!=0),Pa(this)),(e&2)!=0)for(n=0;n<this.i.i;n++)!y[n]&&dt(this.i,n)!=0&&(g=W_(this,n,s),g!=null&&ij(this,g,mb(this,g)))}}function Jtt(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a;for(v=c(F,m,6,P,15,1),b=c(F,m,6,P,15,1),h=0;h<P;h++)v[h]=L8(e,n[h]),b[h]=L8(A,n[h]);for(tt=0,Y=0,H=0,et=0,T=0;T<P;T++)tt+=e.a[v[T]],Y+=e.b[v[T]],H+=A.a[b[T]],et+=A.b[b[T]];for(tt/=P,Y/=P,H/=P,et/=P,Iv(A,tt-H,Y-et),Q=c(ci,A0,43,P,0,1),L=c(ci,A0,43,P,0,1),r=c(ci,A0,43,P,0,1),i=c(ci,A0,43,P,0,1),g=0;g<P;g++)Q[g]=new rQ(tt,Y,e.a[v[g]],e.b[v[g]]),L[g]=new rQ(tt,Y,A.a[b[g]],A.b[b[g]]),r[g]=new $P(Q[g].a-L[g].a,Q[g].b*L[g].b),i[g]=new $P(Q[g].a+L[g].a,Q[g].b*L[g].b);for(R=L2(r,P),C=L2(i,P),$=0,a=0,k=0;k<P;k++)for(j=0;j<Ct(t.f,n[k]);j++)f=_(t.f,n[k],j),ar(e,f)&&!ar(A,f)&&++$,!ar(e,f)&&ar(A,f)&&++a;for(o=c(ci,A0,43,$,0,1),s=c(ci,A0,43,a,0,1),y=c(ci,A0,43,a,0,1),$=0,a=0,l=0;l<P;l++)for(j=0;j<Ct(t.f,n[l]);j++)f=_(t.f,n[l],j),ar(e,f)&&!ar(A,f)&&(D=L8(e,f),o[$]=new rQ(e.a[v[l]],e.b[v[l]],e.a[D],e.b[D]),++$),!ar(e,f)&&ar(A,f)&&(D=L8(A,f),W=new rQ(A.a[b[l]],A.b[b[l]],A.a[D],A.b[D]),s[a]=new $P(R.a+W.a,W.b),y[a]=new $P(C.a-W.a,W.b),++a);return S=L2(o,$),x=L2(s,a),N=L2(y,a),w.Math.abs(VL(S.a,x.a))>w.Math.abs(VL(S.a,N.a))?Tf(A,tt,Y,R.a):(fX(A,tt,Y),Tf(A,tt,Y,C.a)),X5(t,e,A,P)}function Ytt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x;for(ut(t,7),S=0,y=c(Pt,it,6,t.g,16,1),x=c(F,m,6,t.g,15,1),r=0;r<t.i;r++)A=t.F[0][r],n=t.F[1][r],i=t.t[A],f=t.t[n],i!=0&&f!=0&&i<0^f<0&&(y[A]=!0,y[n]=!0),x[A]+=dt(t,r),x[n]+=dt(t,r);for(D=0;D<t.g;D++)if(S+=t.t[D],t.t[D]==1){if(t.D[D]==7&&!y[D]){if(x[D]<=3)S-=1,t.t[D]=0,t.U=0,t.k[D]!=t.e[D]&&(jQ(t,_(t,D,t.e[D]-1)),ut(t,7));else if(D<t.g&&f0(t.q,D)){for(g=c(Pt,it,6,t.g,16,1),k=c(Pt,it,6,t.i,16,1),Oj(t,D,!0,g,k),o=0;o<t.g;o++)if(g[o]&&t.D[o]==7&&t.t[o]==0&&x[o]==2&&B$(t,k,D,o)){S-=1;break}}}}else if(t.t[D]<0&&(t.D[D]==6||t.D[D]==7||t.D[D]==8||t.D[D]==16))if(y[D]){for(j=c(F,m,6,16,15,1),j[0]=D,C=1,R=0;R<C;){for(P=0;P<t.s;P++)if(e=-1,t.F[0][P]==j[R]?e=t.F[1][P]:t.F[1][P]==j[R]&&(e=t.F[0][P]),e!=-1&&t.t[e]!=0){for(L=!1,h=0;h<C;h++)if(e==j[h]){L=!0;break}L||(C==j.length&&(Q=c(F,m,6,2*j.length,15,1),PA(j,0,Q,0,j.length),j=Q),j[C++]=e)}++R}for(s=0,T=0;T<C;T++)s+=t.t[j[T]];if(s<0){for(v=-1,b=99,l=0;l<C;l++)t.t[j[l]]<0&&b>ej(t.D[j[l]])&&(b=ej(t.D[j[l]]),v=j[l]);v!=-1&&(S-=t.t[v],t.t[v]=0,t.U=0)}}else S-=t.t[D],t.t[D]=0,t.U=0;return S>0&&(S=F_(t,S)),S}function g6(){g6=v1,sl=B(d(F,1),m,6,15,[0,yi,14286847,13402367,12779264,16758197,9474192,3166456,16715021,9494608,11789301,11230450,9109248,12560038,1578e4,16744448,16777008,2093087,8442339,9388244,4062976,15132390,12567239,10921643,9083335,10255047,14706227,15765664,5296208,13140019,8224944,12750735,6721423,12419299,16752896,10889513,6076625,7351984,DP,9764863,9756896,7586505,5551541,3907230,2396047,687500,27013,12632256,16767375,10909043,6717568,10380213,13924864,9699476,4366e3,5707663,51456,7394559,16777159,14286791,13107143,10747847,9437127,6422471,4587463,3211207,2097095,65436,58997,54354,48952,43812,5096191,5089023,2200790,2522539,2516630,1528967,13684960,16765219,12105936,10900557,5724513,10375093,11230208,7688005,4358806,4325478,32e3,7384058,47871,41471,36863,33023,27647,5528818,7888099,9064419,10565332,11739092,11739066,11734438,12389767,13041766,13369433,13697103,14221381,14680120,15073326,15400998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13158600,1334015,56540,15075850,15132160,56540,15075850,15461355,8553170,1016335,1016335,1334015,15132160,3289770,14456450,16422400,16422400,11819700,3289770,1016335])}function Qy(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(t.db[e]!=0||X(t.R,e)!=5&&X(t.R,e)!=6&&X(t.R,e)!=7&&X(t.R,e)!=14&&X(t.R,e)!=15&&X(t.R,e)!=16||(t.Q&S0)!=0&&X(t.R,e)>=14)return!1;if(e0(t.R,e)!=0){if(oT(t.R,e))return sa(t,e,A);if(X(t.R,e)!=15&&X(t.R,e)!=16)return!1}if(O(t.R,e)<3||Ct(t.R,e)>4||R1(t.R,e)>0&&X(t.R,e)==6||X(t.R,e)==5&&Ct(t.R,e)!=4)return!1;if(t.R.L){if(ye(t.R,e))return!1;for(f=0;f<Ct(t.R,e);f++)if(ye(t.R,_(t.R,e,f)))return!1}if(X(t.R,e)==7&&!t.S[e])return!1;for(l=c(F,m,6,4,15,1),h=c(F,m,6,4,15,1),o=c(Pt,it,6,4,16,1),D=0;D<Ct(t.R,e);D++){for(r=-1,P=0,Q=0;Q<Ct(t.R,e);Q++)o[Q]||r<t.f[_(t.R,e,Q)]&&(r=t.f[_(t.R,e,Q)],P=Q);l[D]=P,h[D]=r,o[P]=!0}if(Ct(t.R,e)==4&&h[0]==h[1]&&h[2]==h[3]||Ct(t.R,e)==4&&(h[0]==h[2]||h[1]==h[3])||Ct(t.R,e)==3&&h[0]==h[2])return!1;for(L=0,s=0,y=!1,i=1;i<Ct(t.R,e);i++)if(h[i-1]==h[i]){if(A==1||h[i]==0)return!1;L=_(t.R,e,l[i-1]),s=_(t.R,e,l[i]),A==3&&LA(t.R,Nt(t.R,e,l[i]))&&(t.W[e]=!0),y=!0}return A!=1&&!y?!1:(n=t.jb?ha(t,e,l):Mtt(t,e,l),A==1?t.db[e]=n:A==2&&(n==1?se(t.e[L],t.f[e]):n==2&&se(t.e[s],t.f[e])),!0)}function oy(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;if(Y5(t,e),!((t.v[e]&3)==0||(t.v[e]&3)==3)){if(t.p[e]==2&&t.k[e]==2){gtt(t,e);return}if(t.k[e]<3||t.k[e]>4){me(t,e,0,!1);return}for(A=t.e[e],l=!1,i=0;i<A;i++)if(dt(t,t.n[e][i])==1){l=!0;break}if(l){for(h=gY(t,e),n=c(Ut,Tt,6,A,15,1),f=0;f<A;f++)n[f]=_0(t,t.j[e][h[f]],e);for(D=0;D<A;D++)t.F[0][t.n[e][D]]==e&&dt(t,t.n[e][D])==1&&(t.I[t.n[e][D]]=1);if(!((t.q&&e<t.g?UA(t.q,e):0)<=24&&yZ(t,e,h,n))&&(s=_s(t,e,!0),s!=-1)){for(t.F[0][s]!=e&&(t.F[1][s]=t.F[0][s],t.F[0][s]=e),y=-1,Q=0;Q<A;Q++)if(s==t.n[e][h[Q]]){y=Q;break}for(T=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[2,1,2,1]),B(d(F,1),m,6,15,[1,2,2,1]),B(d(F,1),m,6,15,[1,1,2,2]),B(d(F,1),m,6,15,[2,1,1,2]),B(d(F,1),m,6,15,[2,2,1,1]),B(d(F,1),m,6,15,[1,2,1,2])]),r=1;r<A;r++)n[r]<n[0]&&(n[r]+=m0);if(A==3){switch(o=!1,y){case 0:o=n[1]<n[2]&&n[2]-n[1]<l1||n[1]>n[2]&&n[1]-n[2]>l1;break;case 1:o=n[2]-n[0]>l1;break;case 2:o=n[1]-n[0]<l1}P=(t.v[e]&3)==1^o?257:129}else L=0,n[1]<=n[2]&&n[2]<=n[3]?L=0:n[1]<=n[3]&&n[3]<=n[2]?L=1:n[2]<=n[1]&&n[1]<=n[3]?L=2:n[2]<=n[3]&&n[3]<=n[1]?L=3:n[3]<=n[1]&&n[1]<=n[2]?L=4:n[3]<=n[2]&&n[2]<=n[1]&&(L=5),P=(t.v[e]&3)==1^T[L][y]==1?129:257;t.I[s]=P}}}}function Uy(t,e,A){qp();var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(t,7),y=c(XA,re,6,t.k[e],14,1),s=0,D=0;D<t.k[e];D++)if(P=t.j[e][D],t.D[P]!=1){if(i=0,(A&32)!=0&&(r=t.o[e][D],A==32190?z(r,3)<0&&Z8(t,t.n[e][D])&&t.p[e]==1&&(r=0):z(r,3)<0&&eA(t,t.n[e][D])&&(r=0),i=J(i,Wt(r,4))),(A&128)!=0){if(Ro[t.D[P]]==-1)throw At(new H1(Y6+t.D[P]));i=at(i,Ro[t.D[P]])}else if((A&64)!=0){if(z4[t.D[P]]==-1)throw At(new H1(Y6+t.D[P]));i=at(i,z4[t.D[P]])}for((A&256)!=0&&(l=t.k[P]-1,l>3&&(l=3),(A&512)==0&&l>1&&(l=1),i=J(i,l<<6)),(A&Qe)!=0&&(t.v[P]&8)!=0&&(i=J(i,256)),(A&O1)!=0&&P<t.g&&f0(t.q,P)&&(i=J(i,512)),(A&Gn)!=0&&(t.v[P]&je)!=0&&(i=J(i,Qe)),o=0;z(i,y[o])<0;)++o;for(L=D;L>o;L--)y[L]=y[L-1];y[o]=i,++s}for(s>4&&(s=4),n=0,Q=0;Q<s;Q++)n=Wt(n,11),n=J(n,y[Q]);if(n=Wt(n,15),Ro[t.D[e]]==-1)throw At(new H1(Y6+t.D[e]));if(n=J(n,Ro[t.D[e]]),(A&2)!=0?(T=t.q&&e<t.g?UA(t.q,e):0,T>9&&(T=9),T>2&&(T-=2),n=J(n,T<<4)):(A&1)!=0&&(t.v[e]&8)!=0&&(n=J(n,64)),(A&4)!=0&&e<t.g&&f0(t.q,e)&&(n=J(n,Qe)),(A&8)!=0&&(t.v[e]&S0)!=0&&(n=J(n,O1)),(A&16)!=0&&(t.v[e]&je)!=0&&(n=J(n,S0)),(A&S0)!=0&&(GX(t,e)&&(n=J(n,je)),u1t(t,e))){for(f=0;f<t.g;f++)if(w$(t,f)){n=J(n,Gn);break}}return(A&je)!=0&&(h=P6(t,e,10),n=J(n,Wt(h,7))),n}function d6(t,e){Zs();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y;if(S=t.e,l=t.d,P=t.a,S==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return Ey;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return R=new C0,e<0?R.a+=\"0E+\":R.a+=\"0E\",R.a+=-e,R.a}if(v=l*10+1+7,b=c(Fr,re,6,v+1,15,1),A=v,l==1)if(f=P[0],f<0){Y=V(f,g1);do h=Y,Y=Sn(Y,10),b[--A]=48+Ot(Y1(h,yn(Y,10)))&d1;while(z(Y,0)!=0)}else{Y=f;do h=Y,Y=Y/10|0,b[--A]=48+(h-Y*10)&d1;while(Y!=0)}else{N=c(F,m,6,l,15,1),H=l,PA(P,0,N,0,H);t:for(;;){for(C=0,Q=H-1;Q>=0;Q--)tt=at(Wt(C,32),V(N[Q],g1)),g=CY(tt),N[Q]=Ot(g),C=Ot(O0(g,32));k=Ot(C),T=A;do b[--A]=48+k%10&d1;while((k=k/10|0)!=0&&A!=0);for(n=9-T+A,D=0;D<n&&A>0;D++)b[--A]=48;for(L=H-1;N[L]==0;L--)if(L==0)break t;H=L+1}for(;b[A]==48;)++A}if(y=S<0,i=v-A-e-1,e==0)return y&&(b[--A]=45),PP(b,A,v-A);if(e>0&&i>=-6){if(i>=0){for(o=A+i,s=v-1;s>=o;s--)b[s+1]=b[s];return b[++o]=46,y&&(b[--A]=45),PP(b,A,v-A+1)}for(L=2;L<-i+1;L++)b[--A]=48;return b[--A]=46,b[--A]=48,y&&(b[--A]=45),PP(b,A,v-A)}return x=A+1,r=v,j=new Vr,y&&(j.a+=\"-\"),r-x>=1?(Ye(j,b[A]),j.a+=\".\",j.a+=PP(b,A+1,v-A-1)):j.a+=PP(b,A,v-A),j.a+=\"E\",i>0&&(j.a+=\"+\"),j.a+=\"\"+i,j.a}function Ly(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(f=O(t.H,e),n=t.o[A],n>f)return!1;if(Q=h0(t.H,e),r=h0(t.g,A),P=IA(t.g,A),D=IA(t.H,e),gt(V(r,1),0)){if(P!=null){if(gt(V(Q,1),0)){if(D==null||!Em(P,D))return!1}else if(D!=null){if(CK(D,P))return!1}else if(TF(X(t.H,e),P))return!1}}else{if(gt(V(Q,1),0))return!1;if(P!=null){if(D!=null){if(!Em(D,P))return!1}else if(!TF(X(t.H,e),P))return!1}else if(D!=null||t.J[e]!=t.k[A])return!1}if(gt(J(Q,r),0)){if(gt(V(r,O1),0)){if(t.H.L&&n0(V(Q,O1),0))return!1;if(n!=f)return!1}if(gt(V(r,S0),0)&&n>=f&&n0(V(Q,S0),0))return!1}if(gt(V(t.I[e],Zn(t.j[A])),0)||gt(V(t.B[A],Zn(t.M[e])),0))return!1;if(i=V(r,l9),t.H.L){if(o=V(r,l9),z(o,0)!=0&&(z(i,0)==0||gt(V(i,Zn(o)),0)))return!1}else if(z(i,0)!=0&&n0(V(i,t.M[e]),0))return!1;return R1(t.g,A)!=0&&R1(t.g,A)!=R1(t.H,e)||ge(t.g,A)!=0&&ge(t.g,A)!=ge(t.H,e)||jA(t.g,A)!=0&&jA(t.g,A)!=jA(t.H,e)||(L=V(r,M2),z(L,0)!=0&&oa(t.H,e)!=Ot(O0(L,47))-7)?!1:(s=V(r,lr),z(s,0)!=0?(s=O0(s,22),t.H.L?(y=Ot(O0(V(h0(t.H,e),lr),22)),Ot(s)==y):Or(t.H,e)==Ot(s)):!0)}function Xtt(t,e){var A,n,P,r,i,f,D,Q;if(A=0,i=0,r=e.length,f=null,Q=new Vr,i<r&&(zt(i,e.length),e.charCodeAt(i)==43)&&(++i,++A,i<r&&(zt(i,e.length),e.charCodeAt(i)==43||(zt(i,e.length),e.charCodeAt(i)==45))))throw At(new _P(b2+e+'\"'));for(;i<r&&(zt(i,e.length),e.charCodeAt(i)!=46)&&(zt(i,e.length),e.charCodeAt(i)!=101)&&(zt(i,e.length),e.charCodeAt(i)!=69);)++i;if(Q.a+=\"\"+(Mt(A,i,(e??y9).length),(e??y9).substr(A,i-A)),i<r&&(zt(i,e.length),e.charCodeAt(i)==46)){for(++i,A=i;i<r&&(zt(i,e.length),e.charCodeAt(i)!=101)&&(zt(i,e.length),e.charCodeAt(i)!=69);)++i;t.e=i-A,Q.a+=\"\"+(Mt(A,i,(e??y9).length),(e??y9).substr(A,i-A))}else t.e=0;if(i<r&&(zt(i,e.length),e.charCodeAt(i)==101||(zt(i,e.length),e.charCodeAt(i)==69))&&(++i,A=i,i<r&&(zt(i,e.length),e.charCodeAt(i)==43)&&(++i,i<r&&(zt(i,e.length),e.charCodeAt(i)!=45)&&++A),f=(Mt(A,r,e.length),e.substr(A,r-A)),t.e=t.e-L1(f,f1,Et),t.e!=Bt(t.e)))throw At(new _P(\"Scale out of range.\"));if(D=Q.a,D.length<16){if(t.f=(jc==null&&(jc=new RegExp(\"^[+-]?\\\\d*$\",\"i\")),jc.test(D)?parseInt(D,10):NaN),isNaN(t.f))throw At(new _P(b2+e+'\"'));t.a=Hs(t.f)}else CT(t,new id(D));for(t.d=Q.a.length,P=0;P<Q.a.length&&(n=Xi(Q.a,P),!(n!=45&&n!=48));++P)--t.d;t.d==0&&(t.d=1)}function Zp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(this.j=t,n=0;n<t.i.g;n++)t.f[n]&&(t.o[n]==1||t.o[n]==2)&&(t.k[n]==1?this.a<=t.j[n]&&(this.a=1+t.j[n]):t.k[n]==2&&this.i<=t.j[n]&&(this.i=1+t.j[n]));for(this.b=this.a+this.i,this.e=j1(Pt,[c0,it],[12,6],16,[this.b+1,t.g.length+1],2),P=0;P<t.i.g;P++)t.f[P]&&(t.o[P]==1||t.o[P]==2)&&!t.e[P]&&(this.e[PF(this,P)][t.g.length]=!0);for(D=0;D<t.g.length;D++)for(T=0;T<t.g[D].length;T++)A=t.g[D][T],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&(this.e[PF(this,A)][D]=!0);for(this.d=c(F,u0,7,this.b,0,2),Q=0;Q<t.g.length;Q++)for(y=1;y<this.b;y++)if(this.e[y][Q])for(l=0;l<y;l++)this.e[l][Q]&&(this.d[y]=uf(this.d[y],l),this.d[l]=uf(this.d[l],y));for(this.c=c(F,m,6,this.b+1,15,1),s=0;s<this.b;s++)this.e[s][t.g.length]?this.c[s]=-1:this.c[s]=-2;for(o=0;o<t.g.length;o++)if(this.e[this.b][o])for(L=0;L<this.b;L++)this.e[L][o]&&this.c[L]!=o&&(this.c[L]==-2?this.c[L]=o:this.c[L]=-3);for(e=0;e<this.b;e++)if(this.c[e]>=-1&&(r=c(F,m,6,this.b,15,1),AZ(this,r,e)))for(L=0;L<this.b;L++)r[L]!=0&&(this.c[L]=-3);for(f=0;f<t.g.length-1;f++)for(y=1;y<this.b;y++)if(this.e[y][f]&&this.c[y]!=-3){for(l=0;l<y;l++)if(this.e[l][f]&&this.c[l]!=-3&&(i=E$(this,y,l,f),i!=null)){for(h=0;h<i.length;h++)this.c[i[h]]=-3;__(this,i);break}}}function Ztt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt;for(t.e=c(Ut,Tt,6,t.d,15,1),n=c(Ut,Tt,6,t.d,15,1),Q=c(Ut,Tt,6,t.d,15,1),S=c(Ut,Tt,6,t.d,15,1),wt=c(Ut,Tt,6,t.d,15,1),k=c(Ut,Tt,6,t.d*t.d,15,1),L=0;L<t.d;L++)S[L]=t.i[L];for(f=ys(t,t.i),cj(t),N=0,s=0;s<t.d;s++)k[s*t.d+s]=1,wt[s]=-t.e[s],N+=t.i[s]*t.i[s];for(C=100*w.Math.max(w.Math.sqrt(N),t.d),Y=(q1(),E1(Date.now())),b=1;b<=e&&!t.f;b++){if(x=Ptt(t,t.i,f,wt,S,C),x<0)return 2;for(f=t.k,a=0,y=0;y<t.d;y++)wt[y]=S[y]-t.i[y],t.i[y]=S[y],W=w.Math.abs(wt[y])/w.Math.max(w.Math.abs(t.i[y]),1),W>a&&(a=W),n[y]=t.e[y];if(a<12e-8)return 0;for(D=cj(t),a=0,$=w.Math.max(t.k*D,1),l=0;l<t.d;l++)ht=w.Math.abs(t.e[l])*w.Math.max(w.Math.abs(t.i[l]),1),a=w.Math.max(a,ht),n[l]=t.e[l]-n[l];if(a/=$,a<A)return 0;for(P=0,i=0,tt=0,H=0,h=0;h<t.d;h++){for(v=h*t.d,Q[h]=0,j=0;j<t.d;j++)Q[h]+=k[v+j]*n[j];P+=n[h]*wt[h],i+=n[h]*Q[h],tt+=n[h]*n[h],H+=wt[h]*wt[h]}if(P>w.Math.sqrt(3e-8*tt*H)){for(P=1/P,r=1/i,T=0;T<t.d;T++)n[T]=P*wt[T]-r*Q[T];for(g=0;g<t.d;g++)for(v=g*t.d,j=g;j<t.d;j++)k[v+j]+=P*wt[g]*wt[j]-r*Q[g]*Q[j]+i*n[g]*n[j],k[j*t.d+g]=k[v+j]}for(o=0;o<t.d;o++)for(v=o*t.d,wt[o]=0,j=0;j<t.d;j++)wt[o]-=k[v+j]*t.e[j];if(et=E1(Date.now()),st=Y1(et,Y),ku(st,t.j)){for(R=new Zt(t.c);R.a<R.c.a.length;)_t(R),null.zd();Y=et}}return 1}function Wtt(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(e=0;t.a.length!=0;){if(t.a.length==1){if(t.e==1||t.e==0)break;if(t.e==2&&(t.a[0]==0||t.a[0]==180))break;if(t.e==3&&(t.a[0]==0||t.a[0]==90))break}for(s=t.a[0]!=0&&(t.e==2||t.e==3)?-1:0,L=-1,o=Et,i=s;i<t.a.length;i++)D=i+1,A=i>=0?t.a[i]:-t.a[0],n=D<t.a.length?t.a[D]:t.e==1?t.a[0]+180:t.e==2?360-t.a[t.a[i]==180?i-1:i]:t.e==3?180-t.a[t.a[i]==90?i-1:i]:t.a[0]+360,o>n-A&&(o=n-A,L=i);if(o>15)break;r=L,f=r+1,r==-1?(e+=t.c[0],t.a[0]=0,t.c[0]=t.c[0]*2<<16>>16,t.d[0][0]=-t.d[0][1]):f<t.a.length?(Q=nQ(t,r,f,t.a[f]),Bf(t,Q,r,f,t.d[r][0],t.d[f][1])):t.e==1?(f=0,Q=nQ(t,r,f,t.a[f]+180),Q<=180?Bf(t,Q,r,f,t.d[r][0],t.d[f][1]+180):Bf(t,Q-180,f,r,t.d[f][0],t.d[r][1]-180)):t.e==2?(f=t.a[r]==180?r-1:r,t.a[r]<180?(e+=t.c[r],t.a[r]=180,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=360-t.d[r][0]<<16>>16):(q1(),Q=nQ(t,r,f,t.a[f]),Bf(t,Q,f,r,t.d[f][0],t.d[r][1]))):t.e==3?(f=t.a[r]==90?r-1:r,t.a[r]<90?(e+=t.c[r],t.a[r]=90,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=180-t.d[r][0]<<16>>16):(q1(),Q=nQ(t,r,f,t.a[f]),Bf(t,Q,f,r,t.d[f][0],t.d[r][1]))):(f=0,Q=nQ(t,r,f,t.a[f]+360),Q<=360?Bf(t,Q,r,f,t.d[r][0],t.d[f][1]+360):Bf(t,Q-360,f,r,t.d[f][0],t.d[r][1]-360))}if(e!=0)for(P=0;P<t.c.length;P++)t.c[P]=Bt(w.Math.round(100*t.c[P]/(100+e)))<<16>>16}function Wp(t,e){var A,n,P,r,i,f,D,Q;if(D=0,t.L){switch(e<t.g&&Xh(t.q,e)?D=J(D,t4):e<t.g&&f0(t.q,e)&&(D=J(D,2)),Q=(P=t.v[e]&gn,P==0?0:P==Qe?2:P==O1?3:4),Q!=0&&(D=J(D,8),Q>2&&(D=J(D,16)),Q>3&&(D=J(D,32))),A=t.t[e],A<0?D=J(D,Sf):A>0&&(D=J(D,Ef)),i=t.k[e],i){case 0:break;case 1:D=J(D,q0);break;case 2:D=J(D,Ti);break;case 3:D=J(D,NP);break;default:D=J(D,If)}switch(n=TT(t,e),n){case 0:break;case 1:D=J(D,p2);break;case 2:D=J(D,dy);break;case 3:D=J(D,By);break;default:D=J(D,Do)}f=t.p[e],f>0&&(D=J(D,Gn)),f>1&&(D=J(D,g8))}else{switch(e<t.g&&Xh(t.q,e)?D=J(D,t4):e<t.g&&f0(t.q,e)?D=J(D,2):D=J(D,4),(t.v[e]&wn)!=0?D=J(D,eo):D=J(D,Ao),Q=(P=t.v[e]&gn,P==0?0:P==Qe?2:P==O1?3:4),Q==0?D=J(D,112):Q==2?D=J(D,104):Q==3?D=J(D,88):D=J(D,56),A=t.t[e],A==0?D=J(D,Po):A<0?D=J(D,Sf):D=J(D,Ef),r=t.e[e]-P0(t,e)+xt(t,e),r){case 0:D=J(D,1792);break;case 1:D=J(D,1664);break;case 2:D=J(D,1408);break;default:D=J(D,896)}switch(i=t.k[e],i){case 0:D=J(D,3932160);break;case 1:D=J(D,ro);break;case 2:D=J(D,j2);break;case 3:D=J(D,R2);break;default:D=J(D,If)}switch(n=TT(t,e),n){case 0:D=J(D,Ty);break;case 1:D=J(D,cy);break;case 2:D=J(D,wy);break;case 3:D=J(D,gy);break;default:D=J(D,Do)}switch(f=t.p[e],f){case 0:D=J(D,98304);break;case 1:D=J(D,81920);break;default:D=J(D,49152)}}return D}function _p(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(D=c(F,m,6,t.i.g,15,1),g=c(F,m,6,t.i.g,15,1),l=c(Pt,it,6,t.i.g,16,1),Q=c(Pt,it,6,t.i.g,16,1),k=new Md(t.i.g),D[0]=e,g[e]=A,g[A]=-2,k.a[e]=!0,k.a[A]=!0,r=0,o=0;r<=o;){if(i=D[r],g[i]==i){for(L=0;L<O(t.i,i);L++)if(n=_(t.i,i,L),!k.a[n]){if(EA(t.i,i,L)==2&&X(t.i,n)<10)D[++o]=n,g[n]=n,Q[n]=Q[i]||e0(t.i,n)==2,l[n]=Q[i]&&!l[i],k.a[n]=!0;else if(Q[i]&&l[i]){if(v=gj(t,n,g[i],k.a),v==-1)return null;D[++o]=n,g[n]=v,g[v]=-2,Q[n]=!1,k.a[n]=!0,k.a[v]=!0}else if(LA(t.i,Nt(t.i,i,L))&&(D[++o]=n,g[n]=n,Q[n]=!1,k.a[n]=!0,(X(t.i,n)==6&&e0(t.i,n)==0||X(t.i,n)==7&&R1(t.i,n)==1||X(t.i,n)==14||X(t.i,n)==15&&O(t.i,n)>2||X(t.i,n)==16&&O(t.i,n)>2)&&O(t.i,n)>2)){for(f=!1,h=1;h<O(t.i,n);h++)if(b=_(t.i,n,h),!k.a[b])for(T=0;T<h;T++)j=_(t.i,n,T),k.a[j]||ny(t,b,j)&&(D[++o]=b,g[b]=j,g[j]=-2,Q[b]=!1,k.a[b]=!0,k.a[j]=!0,f=!0);if(!f)return null}}}else{for(P=c(Pt,it,6,O(t.i,i),16,1),s=0;s<O(t.i,i);s++)if(n=_(t.i,i,s),k.a[n])P[s]=g[n]==n;else for(h=0;h<O(t.i,n);h++)if(_(t.i,n,h)==g[i]){P[s]=!0;break}for(y=0;y<O(t.i,i);y++)if(P[y])if(n=_(t.i,i,y),k.a[n]){if(o1(t.i,n,g[i])==-1)return null}else D[++o]=n,g[n]=n,l[n]=!1,Q[n]=!0,k.a[n]=!0;for(L=0;L<O(t.i,i);L++)if(!P[L]&&(n=_(t.i,i,L),!k.a[n])){if(v=gj(t,n,g[i],k.a),v==-1)return null;D[++o]=n,g[n]=v,g[v]=-2,Q[n]=!1,k.a[n]=!0,k.a[v]=!0}}++r}return k}function _tt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;switch(s=t.X,t.X=0,s){case 1:if(l=tn(t.V,t.ib,t.lb),l!=-1&&Le(t.V,l)==8)return;K1(t),t.e==-1&&(t.e=te(t.V,t.hb,t.kb,0)),l==-1&&(l=te(t.V,t.ib,t.lb,0)),t.e!=-1&&l!=-1&&(P=Ae(t.V,t.e)||Ae(t.V,l)?16:1,t.w==6&&(P=257),t.w==23&&(P=129),rj(t.V,t.e,l,P)),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));break;case 2:if(K1(t),t.q>0&&(t.e==-1&&(t.e=te(t.V,t.hb,t.kb,0)),t.n[0]==-1&&(t.n[0]=te(t.V,t.o[0],t.p[0],0)),t.n[0]!=-1&&uL(t.V,t.e,t.n[0])),t.q>1)for(f=1;f<t.q;f++)t.n[f]==-1&&(t.n[f]=te(t.V,t.o[f],t.p[f],0)),t.n[f]!=-1&&uL(t.V,t.n[f-1],t.n[f]);t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));break;case 3:case 4:case 7:t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));break;case 10:t.eb=w.Math.max(t.eb,3),P1(t.k);break;case 5:case 6:for(y=!1,i=0;i<t.V.r;i++)if(t.P[i]!=i0(t.V,i)){y=!0;break}P1(t.k),y&&N1(t,new x1(t,2,!0));break;case 8:if(L=!1,n=t.t,n!=-1&&t.V.L&&ye(t.V,n)&&(n=-1),Q=M1(t.V,t.e),n==-1){if(K1(t),Q!=0){for(L=!0,h=!1,e=0;e<t.V.g;e++)M1(t.V,e)==Q&&(h=h|Fn(t.V,e),tA(t.V,e,0,!1));xo&&!h&&mQ(t)}}else{if(K1(t),L=!0,h=!1,t.e==n)for(D=M1(t.V,t.e),e=0;e<t.V.g;e++)M1(t.V,e)==D&&(h=h|Fn(t.V,e),tA(t.V,e,0,!1));else{for(o=M1(t.V,n),A=0;A<t.V.g;A++)(M1(t.V,A)==Q||M1(t.V,A)==o)&&tA(t.V,A,0,!1);for(r=1,e=0;e<t.V.g;e++)M1(t.V,e)==r&&(++r,e=-1);tA(t.V,t.e,r,!1),tA(t.V,n,r,!1)}xo&&!h&&mQ(t)}L&&EL(t,w.Math.max(t.eb,1)),P1(t.k)}}function $tt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b;if(v=pA(t.hb,t.kb,t.ib,t.lb),g=t.ib-t.hb,k=t.lb-t.kb,L=t.q,s=0,l=0,y=0,h=0,L>0&&(s=Ot(E1(w.Math.round(t.o[0]))),l=Ot(E1(w.Math.round(t.p[0])))),L>1&&(y=Ot(E1(w.Math.round(t.o[1]))),h=Ot(E1(w.Math.round(t.p[1])))),D=0,t.e==-1||Le(t.V,t.e)==0)D=fA*$9(E1(w.Math.round(v*3/l1)));else if(Le(t.V,t.e)==1)A=_0(t.V,_(t.V,t.e,0),t.e),n=A-fA,P=A+fA,D=w.Math.abs(Ze(v,n))<w.Math.abs(Ze(v,P))?n:P;else{for(r=c(Ut,Tt,6,Le(t.V,t.e),15,1),o=0;o<Le(t.V,t.e);o++)r[o]=_0(t.V,t.e,_(t.V,t.e,o));for(r.sort(pe(ki.prototype.ld,ki,[])),Q=0;Q<r.length;Q++){if(T=Q==0?r[r.length-1]-m0:r[Q-1],T<v&&v<r[Q]){D=(r[Q]+T)/2;break}if(T<v-m0&&v-m0<r[Q]){D=(r[Q]+T)/2;break}}}if(e=Qn(t.V,24*t.ab),t.q=w.Math.abs(Ze(v,D))>fA?0:Bt(w.Math.sqrt(g*g+k*k)/e),t.q>0){for((t.o==null||t.o.length<t.q)&&(t.o=c(Ut,Tt,6,t.q,15,1),t.p=c(Ut,Tt,6,t.q,15,1)),i=c(Ut,Tt,6,2,15,1),f=c(Ut,Tt,6,2,15,1),b=Ze(v,D)<0?D-fA:D+fA,i[0]=e*w.Math.sin(D),f[0]=e*w.Math.cos(D),i[1]=e*w.Math.sin(b),f[1]=e*w.Math.cos(b),o=0;o<t.q;o++)t.o[o]=(o==0?t.hb:t.o[o-1])+i[o&1],t.p[o]=(o==0?t.kb:t.p[o-1])+f[o&1];for(t.n=c(F,m,6,t.q,15,1),Q=0;Q<t.q;Q++)t.n[Q]=tn(t.V,t.o[Q],t.p[Q]),t.n[Q]!=-1&&(t.o[Q]=mt(t.V,t.n[Q]),t.p[Q]=Rt(t.V,t.n[Q]))}return L!=t.q||t.q!=0&&(s!=Ot(E1(w.Math.round(t.o[0])))||l!=Ot(E1(w.Math.round(t.p[0]))))||t.q>1&&(y!=Ot(E1(w.Math.round(t.o[1])))||h!=Ot(E1(w.Math.round(t.p[1]))))}function att(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt;for(st=new n1,g=new Zt(t.g);g.a<g.c.a.length;)if(T=_t(g),T.g!=-1&&(v=o1(t.k,T.a,T.g),!oi(t.k,v)&&!A8(t.k,v)&&(ze(t.k,v)==1||ze(t.k,v)==2))){if($=G(t.g,t.q[T.g]),A=c(F,m,6,O(t.k,T.a)+O(t.k,$.a)-2,15,1),S=0,a=!1,$.g!=-1)A[S++]=$.b;else{for(b=-1,ht=-1,j=Et,N=0;N<O(t.k,$.a);N++)L=_(t.k,$.a,N),L!=T.a&&(b==-1?(b=N,j=t.q[L]):j<t.q[L]?ht=N:(ht=b,b=N));ht==-1?(Y=_(t.k,$.a,b),et=Nt(t.k,$.a,b),A[S++]=et|(cQ(t,$.a,Y)?dn:0)):(s=_(t.k,$.a,b),l=Nt(t.k,$.a,b),y=_(t.k,$.a,ht),h=Nt(t.k,$.a,ht),A[S++]=l|(cQ(t,$.a,s)?dn:0),A[S++]=h|(cQ(t,$.a,y)?0:dn))}if(O(t.k,$.a)==3&&$.g!=-1){for(N=0;N<O(t.k,$.a);N++)if(L=_(t.k,$.a,N),L!=$.g&&L!=T.a){n=Nt(t.k,$.a,N),A[S++]=n|(cQ(t,$.a,L)?dn:0),L<$.g&&(a=!a);break}}for(ze(t.k,v)==2&&(a=!a),x=0;x<O(t.k,T.a);x++)if(D=_(t.k,T.a,x),D!=T.g){if(C=a,O(t.k,T.a)==3){for(H=0;H<O(t.k,T.a);H++)if(L=_(t.k,T.a,H),L!=T.g&&L!=D){L<D&&(C=!C);break}}RU(t.k,v)&&(R=rx(t.d,v),t.n[R]||(t.n[R]=!0,t.o[R]=C),t.o[R]&&(C=!C)),Q=o1(t.k,T.a,D),A[S++]=Q|(C^cQ(t,T.a,D)?0:dn)}st.a.push(A)}for(t.f=c(F,m,6,t.k.i,15,1),st.a.length!=0&&kT(t,cA(st,0),!1);st.a.length!=0;){for(wt=st.a.length,x=st.a.length-1;x>=0;x--){for(A=(ee(x,st.a.length),st.a[x]),W=0,tt=!1,o=!1,r=A,i=0,f=r.length;i<f;++i)P=r[i],e=P&1073741823,t.f[e]!=0&&(k=(P&dn)!=0^t.f[e]==2,W==0?tt=k:tt!=k&&(o=!0),++W);W!=0&&(A=cA(st,x),o||kT(t,A,tt))}wt==st.a.length&&kT(t,cA(st,0),!1)}}function $p(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x;for(this.d=t,x=WQ(e,!1,null),(x.g.a.length!=1||x.f.a.length!=1)&&q1(),x.c||bQ(x)||q1(),this.g=G(x.g,0),this.f=G(x.f,0),ut(this.g,1),ut(this.f,63),Q=new Ci,this.c=c(F,m,6,this.g.g+1,15,1),this.c[0]=-1,n=0;n<this.g.g;n++)M1(this.g,n)!=0&&(this.c[M1(this.g,n)]=n);for(oZ(this,this.c),R=c(Pt,it,6,this.g.i,16,1),g=0;g<this.f.i;g++)h=K(this.f,0,g),T=K(this.f,1,g),s=M1(this.f,h),y=M1(this.f,T),s!=0&&y!=0&&(P=this.c[s],r=this.c[y],k=cu(this.f,g),j=o1(this.g,P,r),j==-1?tr(Q,new os(P,r,s,y,k)):((fe(this.g,j)&31)==0&&(C=cu(this.g,j),C!=k&&tr(Q,new os(P,r,s,y,k))),R[j]=!0));for(D=0;D<this.g.i;D++)R[D]||(P=K(this.g,0,D),r=K(this.g,1,D),!ye(this.g,P)&&!ye(this.g,r)&&(s=M1(this.g,P),y=M1(this.g,r),(s!=0||y!=0)&&tr(Q,new os(P,r,s,y,-1))));for(this.k=px(Q,c(O1t,{487:1,4:1,5:1,11:1,8:1},149,0,0,1)),o=0,i=0;i<this.g.g;i++)M1(this.g,i)==0&&!ye(this.g,i)&&++o;for(this.j=c(F,m,6,o,15,1),o=0,f=0;f<this.g.g;f++)M1(this.g,f)==0&&!ye(this.g,f)&&(this.j[o++]=f);for(this.n=new n1,L=c(Pt,it,6,this.f.g,16,1),A=0;A<this.f.g;A++)M1(this.f,A)==0&&!ye(this.f,A)&&!L[A]&&Ft(this.n,new lj(this.f,A,L));for(this.b=this.j.length==0&&this.n.a.length==0,this.a=c(F,m,6,0,15,1),l=0;l<this.f.g;l++)v=v0(this.f,l),(v==1||v==2)&&(b=this.c[M1(this.f,l)],b!=-1&&(S=v0(this.g,b),YY(this,l,this.c)==(S==v)&&(this.a=Mn(this.a,this.a.length+1),this.a[this.a.length-1]=b)));this.e=AX(this)}function B6(){B6=v1,ME=B(d(ft,1),Dt,2,6,[\"[N](-*)(-*)-*\",\"[N](-*)=*\",\"[N]#*\",\"[N](-*)(=*)=* as in nitro\",\"[N](=*)#* middle atom of azide\",\"[N]1(-*)-*-*-1 3-membered ring\",\"[NH](-*)-*\",\"[NH]1-*-*-1 3-membered ring\",\"[NH]=*\",\"[NH2]-*\",\"[N+](-*)(-*)(-*)-*\",\"[N+](-*)(-*)=*\",\"[N+](-*)#* N in isocyano\",\"[NH+](-*)(-*)-*\",\"[NH+](-*)=*\",\"[NH2+](-*)-*\",\"[NH2+]=*\",\"[NH3+]-*\",\"[n](:*):*\",\"[n](:*)(:*):*\",\"[n](-*)(:*):*\",\"[n](=*)(:*):* as in pyridine-N-oxid\",\"[nH](:*):*\",\"[n+](:*)(:*):*\",\"[n+](-*)(:*):*\",\"[nH+](:*):*\",\"[O](-*)-*\",\"[O]1-*-*-1 3-membered ring\",\"[O]=*\",\"[OH]-*\",\"[O-]-*\",\"[o](:*):*\",\"[S](-*)-*\",\"[S]=*\",\"[S](-*)(-*)=*\",\"[S](-*)(-*)(=*)=*\",\"[SH]-*\",\"[s](:*):*\",\"[s](=*)(:*):*\",\"[P](-*)(-*)-*\",\"[P](-*)=*\",\"[P](-*)(-*)(-*)=*\",\"[PH](-*)(-*)=*\"]),qP=B(d(Oe,1),uA,6,15,[3.240000009536743,12.359999656677246,23.790000915527344,11.680000305175781,13.600000381469727,NV,12.029999732971191,21.940000534057617,23.850000381469727,26.020000457763672,0,NV,4.360000133514404,4.440000057220459,13.970000267028809,16.610000610351562,25.59000015258789,27.639999389648438,12.890000343322754,4.409999847412109,4.929999828338623,8.390000343322754,15.789999961853027,4.099999904632568,3.880000114440918,14.140000343322754,9.229999542236328,12.529999732971191,17.06999969482422,20.229999542236328,23.059999465942383,13.140000343322754,25.299999237060547,32.09000015258789,19.209999084472656,8.380000114440918,38.79999923706055,28.239999771118164,21.700000762939453,13.59000015258789,34.13999938964844,9.8100004196167,23.469999313354492])}function ap(){ap=v1,mE=B(d(ft,1),Dt,2,6,[\"gkvt@@@@LddTTTrbTRTRTRRRRRRRRRRRRRrVRrIh\\\\IAaQxlY@gRHdJCJcRXlv_CfJx|A\\\\hRHejiLaQjTje^kSjtFcIhvXmVKMjt{lN{Kavy\\\\^wGjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjh@@vo@HBC@PhLN@bPhtFKCcpDbILaRhtzCIbsX\\\\nOO`JDbqDjSKdJeJmQjtz}Ahr[LVkMnpz\\\\nwGj{PBhBdBlBBBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajijej` !BnkjyVwsVr|iQn|Q|goTZWPIJwbudnRkVYBez]siZymNJZUqNFBqZWxS~iCXVU]SeRjwrtSPAjkvXLpBAZauDPzq]PfMlecrMnkv|@\\\\SFD`m|mWiEoCXp`SIe_J[l|[XCbloTV`[Gc@FJGopyyoOlFQfUy^w\\\\Bgz|\",\"gcrt@@@@LdbbbbTRbRbRbRRRRRRRRRRRRVRrVQIA`HtRGAaIxZAHfShTjCIbqylQGKgqdBaXeQJeruBiPitZmFoPZLFSYbvZlVGMnsZ]vWSmr{]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUT@@[G`DAA`HTFG@QHTZCEaqxBQDfPiTZ]AdqYlNWGgpEBQXbUIerEReVhuZ]^`tYMfKUfwX]NW[jkPBhBdBlBbBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajij` !B^cR]`]Fm]QkfljE\\\\p?UVfgOmFXsQe_gXPyXis_wF|vUUX_XbxpzU]HUFgYViwFo~@uemc@}~T?IEPioYVwr]JnM~[ZEC\\\\g}~o_pUfdo~irsklTLiyVJshnw^iVAsZ`_~}PYkckURH{FYMImFaRaccUlCZSHMfP\",\"dml@@Dje^VGiyZjjjh@vtHSBinFU@ !BPTCTy[skMzUPF`AJbBixEZHS[Il\",\"dml@@DjYVvGiyZjjjh@vtHSBinFU@ !BwLo~BJ~UquhXBinZ\\\\ykA@F_eMrT\",\"dml@@LdfbbQX^fUZjjj`C[PaLJfxYT !BzxIHVc{OiJVRpprePho~]}y?wLl\",\"deL@@DjUYkfEijjjj@MeBDpj[ad !B?aA?MVr[AvkKzm_jKvVbD{sk\",\"dil@@LddTQRl[NX^Fjjjj@MiBDpj[a@ !BPfL@?ox@M~T@?ox@?`C~@@\",\"daL@@DjYtKJqjynjjjj@MaBDpj[` !B`bL@_gx@@Gy~@Gx@_`@\"])}function t1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x;i=c(Ut,Tt,6,t.r,15,1);t:for(r=0;r<i.length;r++){switch(x=t.a[r],i[r]=0,x){case 32:case 72:for(Q=0;Q<t.e[r];Q++){for(g=t.j[r][Q],b=t.a[g],h=0,T=0,L=0;L<t.e[g];L++)k=t.j[g][L],t.D[k]==7&&t.e[k]+xt(t,k)==2&&!(k<t.g&&f0(t.q,k))&&++h,(t.D[k]==8||t.D[k]==16)&&t.e[k]+xt(t,k)==1&&++T;if(t.D[g]==16&&T==2&&h==1&&(h=0),t.D[g]==6&&T>0){i[r]=T==1?-1:-(T-1)/T;continue t}if(b==45&&T==3){i[r]=-.3333333333333333;continue t}if(b==25&&T>0){i[r]=T==1?0:-(T-1)/T;continue t}if(b==18&&T>0){i[r]=h+T==2?0:-(h+T-2)/T;continue t}if(b==73&&T>0){i[r]=T==1?0:-(T-1)/T;continue t}if(b==77&&T>0){i[r]=-1/T;continue t}}break;case 76:for(C=0,S=(ut(t,7),t.q),R=0;R<S.j.a.length;R++)if(wA(S,R,r)){C=R;break}if(C<S.j.a.length){for(l=0,A=G(S.j,C),n=0,P=A.length;n<P;++n)e=A[n],e>-1&&t.a[e]==76&&++l;if(l>0){i[r]=-1/l;continue t}}break;case 55:case 56:case 81:for(i[r]=t.t[r],y=1,j=0,f=c(Pt,it,6,t.r,16,1),f[r]=!0;y>j;)for(j=y,o=0;o<t.r;o++)if(f[o]){for(L=0;L<t.e[o];L++)if(g=t.j[o][L],b=t.a[g],!(b!=57&&b!=80))for(s=0;s<t.e[g];s++)k=t.j[g][s],v=t.a[k],!(v!=55&&v!=56&&v!=81)&&(f[k]||(f[k]=!0,i[r]+=t.t[k],++y))}i[r]/=y;continue t;case 61:for(D=0;D<t.e[r];D++)if(g=t.j[r][D],t.a[g]==42){i[r]=1;continue t}continue t;case 34:case 49:case 51:case 54:case 58:case 92:case 93:case 94:case 97:i[r]=1;continue t;case 87:case 95:case 96:case 98:case 99:i[r]=2;continue t;case 88:i[r]=3;continue t;case 35:case 62:case 89:case 90:case 91:i[r]=-1;continue t}i[r]=0}return i}function e1t(t,e,A){var n,P,r,i;for(t.u=e,t.a=A,n=Bt(w.Math.round((Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*8))),P=B(d(F,1),m,6,15,[n,-1,-2,-2,n]),i=B(d(F,1),m,6,15,[n,-2,n,-2,-2,-2,-2,-2,-2,-2,n,-2,n,-2,n,-2,n,-2,2*n,-2,n/2|0,-2,n/2|0,-2,2*n]),iL(t.s,P,i),ke(t.s,he(t.s,\"Desired Bond type(s):\"),1,1,3,1),t.k=Un(t.s,\"Single\"),ke(t.s,t.k,1,3,3,3),t.c=Un(t.s,\"Double\"),ke(t.s,t.c,1,4,3,4),t.n=Un(t.s,\"Triple\"),ke(t.s,t.n,1,5,3,5),t.i=Un(t.s,\"Quadruple\"),ke(t.s,t.i,1,6,3,6),t.j=Un(t.s,\"Quintuple\"),ke(t.s,t.j,1,7,3,7),t.b=Un(t.s,\"Delocalized\"),ke(t.s,t.b,1,8,3,8),t.g=Un(t.s,\"Coordinate (0-order)\"),ke(t.s,t.g,1,9,3,9),t.q=TA(t.s),Gt(t.q,\"any ring state\"),Gt(t.q,YV),Gt(t.q,\"is any ring bond\"),Gt(t.q,\"is non-aromatic ring bond\"),Gt(t.q,\"is aromatic bond\"),Gt(t.q,\"is any non-aromatic bond\"),YP(t.q,t),ke(t.s,t.q,1,11,3,11),t.r=TA(t.s),Gt(t.r,\"any ring size\"),Gt(t.r,\"is in 3-membered ring\"),Gt(t.r,\"is in 4-membered ring\"),Gt(t.r,\"is in 5-membered ring\"),Gt(t.r,\"is in 6-membered ring\"),Gt(t.r,\"is in 7-membered ring\"),Gt(t.r,\"smallest ring 8 to 11\"),Gt(t.r,\"smallest ring >= 12\"),ke(t.s,t.r,1,13,3,13),t.e=Un(t.s,\"Match formal bond order\"),yA(t.e,(e.H[A]&Nf)!=0),YP(t.e,t),ke(t.s,t.e,1,15,3,15),t.f=Un(t.s,\"Match Stereo Configuration\"),yA(t.f,(e.H[A]&F8)!=0),YP(t.f,t),ke(t.s,t.f,1,17,3,17),t.d=Un(t.s,\"Is atom bridge between\"),YP(t.d,t),ke(t.s,t.d,1,19,3,19),t.p=TA(t.s),r=0;r<16;r++)Gt(t.p,\"\"+r);D0(t.s,t.p,2,21),D0(t.s,he(t.s,\" and\"),3,21),YP(t.p,t),t.o=TA(t.s),wT(t,0),D0(t.s,t.o,2,23),D0(t.s,he(t.s,\" atoms\"),3,23),ut(t.u,7),Ta(t)}function A1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S;for(k=c(Pt,it,6,t.R.g,16,1),v=c(Pt,it,6,t.R.i,16,1),e=0,j=!1,(t.Q&128)!=0&&(t.Y=c(F,m,6,t.R.g,15,1),t.X=c(F,m,6,t.R.i,15,1)),n=0;n<t.R.g;n++)t.W[n]&&(t.fb[n]||Qy(t,n,1)&&(t.fb[n]=!0,k[n]=!0,++e));for(r=0;r<t.R.i;r++)t.V[r]&&(t.p[r]||$Q(t,r,1)&&(t.p[r]=!0,v[r]=!0,++e));if(e==1){for(A=0;A<t.R.g;A++)if(k[A]){t.db[A]=0;break}for(P=0;P<t.R.i;P++)if(v[P]){t.o[P]=0;break}}else if(e>1)for(h$(t),t.T=0,f=new Zt(t.A);f.a<f.c.a.length;){for(i=_t(f),b=0,R=0,o=0,Q=0,L=-1,D=-1,l=0;l<i.a.length;l++)k[i.a[l]]&&(++b,(t.db[i.a[l]]==1||t.db[i.a[l]]==2)&&(++R,j=!0,L<t.f[i.a[l]]&&(L=t.f[i.a[l]],o=i.a[l])));for(h=0;h<i.b.length;h++)v[i.b[h]]&&(++b,C=t.f[K(t.R,0,i.b[h])],S=t.f[K(t.R,1,i.b[h])],s=C>S?(C<<16)+S:(S<<16)+C,(t.o[i.b[h]]==1||t.o[i.b[h]]==2)&&(++R,j=!0,D<s&&(D=s,Q=i.b[h])));if(b!=0)if(b==1){for(T=0;T<i.a.length;T++)k[i.a[T]]&&(t.db[i.a[T]]=0);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=0)}else if(R==1){for(T=0;T<i.a.length;T++)k[i.a[T]]&&(t.db[i.a[T]]=3);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=3)}else{if((t.Q&128)!=0){for(++t.T,T=0;T<i.a.length;T++)k[i.a[T]]&&(t.Y[i.a[T]]=t.T);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.X[i.b[y]]=t.T)}if(g=!1,L!=-1?t.db[o]==2&&(g=!0):t.o[Q]==2&&(g=!0),g){for(T=0;T<i.a.length;T++)if(k[i.a[T]])switch(t.db[i.a[T]]){case 1:t.db[i.a[T]]=2;break;case 2:t.db[i.a[T]]=1}for(y=0;y<i.b.length;y++)if(v[i.b[y]])switch(t.o[i.b[y]]){case 1:t.o[i.b[y]]=2;break;case 2:t.o[i.b[y]]=1}}}}return j}function n1t(t,e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt;for(et=G(t.j,e),L=et,s=0,y=L.length;s<y;++s)if(o=L[s],!cZ(t,o))return!0;for(W=G(t.k,e),$=W.length,h=0,Q=0,rt=!1,C=0;C<$;C++)h<<=1,Q<<=1,dt(t.i,W[C])>1||c1(t.i,W[C])==8?h|=1:f&&Gs(t,W[C])?(h|=1,Q|=1):(D=A[e][C],D!=-1&&(n[D]?P[D]&&(h|=1,r[D]||(Q|=1)):rt=!0));switch(j=!1,$){case 3:for(T=B(d(F,1),m,6,15,[2,1,4]),j=!0,b=0;b<3;b++)(h&T[b])==T[b]&&(X(t.i,et[b])==6&&R1(t.i,et[b])==1||X(t.i,et[b])==5&&R1(t.i,et[b])==0)&&(P[e]=!0,i[e]=b,(Q&T[b])==0&&(j=!1));break;case 5:for(g=B(d(F,1),m,6,15,[10,5,18,9,20]),j=!0,Y=0;Y<5;Y++)if((h&g[Y])==g[Y])switch(X(t.i,et[Y])){case 6:R1(t.i,et[Y])==-1&&(P[e]=!0,i[e]=Y,(Q&g[Y])==0&&(j=!1));break;case 7:R1(t.i,et[Y])<=0&&(P[e]=!0,i[e]=Y);break;case 8:P[e]=!0,i[e]=Y;break;case 16:case 34:case 52:O(t.i,et[Y])==2&&(P[e]=!0,i[e]=Y)}break;case 6:j=!0,(h&21)==21&&(P[e]=!0,(Q&21)==0&&(j=!1)),(h&42)==42&&(P[e]=!0,(Q&42)==0&&(j=!1));break;case 7:for(k=B(d(F,1),m,6,15,[42,21,74,37,82,41,84]),j=!0,v=0;v<7;v++)if((h&k[v])==k[v]){if(X(t.i,et[v])==6&&(R1(t.i,et[v])==1||f&&DK(t,et[v]))||X(t.i,et[v])==5&&R1(t.i,et[v])==0)P[e]=!0,i[e]=v,(Q&k[v])==0&&(j=!1);else for(R=0;R<2;R++)if(st=(v+6+R)%7,a=W[st],ht=A[e][st],ht!=-1&&!P[ht]&&G(t.k,ht).length==5){for(wt=G(t.k,ht),S=0;wt[S]!=a;)++S;for(x=!1,H=0,N=1;N<=4;N++){if(l=wt[(S+N)%5],tt=dt(t.i,l)>1||c1(t.i,l)==8||f&&Gs(t,l),tt&&x){H=0;break}x=tt,x&&++H}if(H==2){P[e]=!0,P[ht]=!0,r[e]=!0,r[ht]=!0,Ft(t.b,U1(a));break}}}}return P[e]&&!j&&(r[e]=!0),P[e]?!0:!rt}function P1t(t){var e,A,n,P,r,i,f,D,Q,o,L;for(ut(t,1),P=c(F,m,6,191,15,1),A=0;A<t.r;A++)switch(t.D[A]){case 171:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1;break;case 172:P[1]+=12,P[6]+=6,P[7]+=4,P[8]+=1;break;case 173:P[1]+=6,P[6]+=4,P[7]+=2,P[8]+=2;break;case 174:P[1]+=5,P[6]+=4,P[7]+=1,P[8]+=3;break;case 175:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1,P[16]+=1;break;case 176:P[1]+=8,P[6]+=5,P[7]+=2,P[8]+=2;break;case 177:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=3;break;case 178:P[1]+=3,P[6]+=2,P[7]+=1,P[8]+=1;break;case 179:P[1]+=7,P[6]+=6,P[7]+=3,P[8]+=1;break;case 181:case 180:P[1]+=11,P[6]+=6,P[7]+=1,P[8]+=1;break;case 182:P[1]+=12,P[6]+=6,P[7]+=2,P[8]+=1;break;case 183:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1,P[16]+=1;break;case 184:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=1;break;case 185:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=1;break;case 186:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=2;break;case 187:P[1]+=7,P[6]+=4,P[7]+=1,P[8]+=2;break;case 188:P[1]+=10,P[6]+=11,P[7]+=2,P[8]+=1;break;case 189:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=2;break;case 190:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1;break;case 1:switch(t.B[A]){case 0:case 1:++P[1];break;case 2:++P[151];break;case 3:++P[152]}break;default:++P[t.D[A]]}for(n=0;n<t.r;n++)t.D[n]>=171&&t.D[n]<=190?P[1]+=2-G1(t,n):P[1]+=xt(t,n);for(f=0,Q=1;Q<=190;Q++)P[Q]!=0&&++f;for(this.b=c(F,m,6,f,15,1),this.c=c(F,m,6,f,15,1),f=0,D=0;D<z2.length;D++)P[z2[D]]!=0&&(this.b[f]=P[z2[D]],this.c[f]=z2[D],++f,P[z2[D]]=0);for(;;){for(L=\"zzz\",o=-1,i=1;i<=190;i++)P[i]>0&&a9(L,(J1(),a0)[i])>0&&(L=(J1(),a0)[i],o=i);if(o==-1)break;this.b[f]=P[o],this.c[f]=o,++f,P[o]=0}for(this.a=0,this.d=0,e=0;e<t.g;e++)t.D[e]!=1&&t.B[e]!=0&&(i=t.D[e],r=t.B[e],this.a+=Fk(i,r)-X4[i],this.d+=Fk(i,r)-Z4[i])}function r1t(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0;for(l0=A[4],Jt=A[3]==-1?3:4,l=c(F,m,6,e.r,15,1),St=c(Pt,it,6,e.s,16,1),g=0;g<Jt;g++)St[n[g]]=!0;for(y=Vj(e,l,St,!1),h=c(F,m,6,y,15,1),Q=l,o=0,L=Q.length;o<L;++o)s=Q[o],++h[s];for(Qt=0,C=c(Pt,it,6,y,16,1),k=0;k<Jt;k++)s=l[A[k]],C[s]||(C[s]=!0,++Qt);for(bt=c(F,m,6,Qt,15,1),yt=c(F,m,6,Qt,15,1),A1=c(F,m,6,Qt,15,1),R=0,D=0;D<y;D++)if(C[D]){for(bt[R]=D,yt[R]=h[D],v=0;v<Jt;v++)D==l[A[v]]&&++A1[R];++R}if(S=c(Pt,it,6,e.r,16,1),D1=0,V1=2,Qt==Jt)for(Xt=-1,v=0;v<Jt-2;v++){for(Lt=-1,pt=Et,N=0;N<Qt;N++)N!=Xt&&yt[N]<pt&&(Lt=N,pt=yt[N]);for(P=0;P<e.r;P++)l[P]==bt[Lt]&&(S[P]=!0,++D1);Xt=Lt}else for(v=0;v<bt.length;v++){if(A1[v]==1&&Jt==3){for(x=2*yt[v]<e.r,x||(V1=1),P=0;P<e.r;P++)P!=l0&&l[P]==bt[v]==x&&(S[P]=!0,++D1);break}if(A1[v]==2&&Jt==4){for(x=2*yt[v]<e.r,P=0;P<e.r;P++)P!=l0&&l[P]==bt[v]==x&&(S[P]=!0,++D1);break}}if(D1==0){for(v=0;v<bt.length;v++)if(A1[v]==1){for(P=0;P<e.r;P++)l[P]==bt[v]&&(S[P]=!0,++D1);break}for(S1=Jt-2-(D1==0?0:1),b=0;b<S1;b++)for(N=0;N<Jt;N++)if(!S[A[N]]){S[A[N]]=!0,++D1;break}}for(R=0,t.a=c(F,m,6,D1,15,1),j=0;j<S.length;j++)S[j]&&(t.a[R++]=j);for(U0=0,Q1=0,t.c=c(F,m,6,V1,15,1),t.b=c(F,m,6,Jt-V1,15,1),T=0;T<Jt;T++)if(S[A[T]]){if(Q1>=t.b.length){for(q1(),\"\"+new zh(e).a.a,H=A,$=0,wt=H.length;$<wt;++$);for(Y=n,a=0,rt=Y.length;a<rt;++a);for(et=l,st=0,ct=et.length;st<ct;++st);for(tt=C,W=0,ht=tt.length;W<ht;++W);for(r=S,i=0,f=r.length;i<f;++i);}t.b[Q1++]=A[T]}else t.c[U0++]=A[T]}function i1t(t,e){var A;switch(t.D[e]){case 7:if(e<t.g&&f0(t.q,e)){if(t.t[e]==0)if(t.e[e]-P0(t,e)+xt(t,e)==0){if(P0(t,e)==2)return 18;for(A=0;A<P0(t,e);A++)if(!eA(t,t.n[e][A]))return 20;return 19}else return 22;else if(t.t[e]==1)if(t.e[e]-P0(t,e)+xt(t,e)==0){for(A=0;A<P0(t,e);A++)if(!eA(t,t.n[e][A]))return R1(t,t.j[e][A])<0?21:24;return 23}else return 25}else if(t.t[e]==0)switch(t.e[e]-P0(t,e)+xt(t,e)){case 0:switch(t.p[e]){case 0:return(t.q&&e<t.g?UA(t.q,e):0)==3?5:0;case 1:return 1;case 2:return 2}break;case 1:switch(t.p[e]){case 0:return(t.q&&e<t.g?UA(t.q,e):0)==3?7:6;case 1:return 8}break;case 2:return 9}else if(t.t[e]==1)switch(t.e[e]-P0(t,e)+xt(t,e)){case 0:switch(t.p[e]){case 0:return 10;case 1:return IF(t,e)?3:11;case 2:return t.o[e][0]==2?IF(t,e)?4:qP.length+1:12}break;case 1:switch(t.p[e]){case 0:return 13;case 1:return 14}break;case 2:return t.p[e]==0?15:16;case 3:return 17}return qP.length+1;case 8:if(e<t.g&&f0(t.q,e)){if(t.t[e]==0)return 31}else{if(t.t[e]==0)return t.p[e]>0?28:P0(t,e)==1?29:(t.q&&e<t.g?UA(t.q,e):0)==3?27:26;if(t.t[e]==-1)return P0(t,e)==1&&R1(t,t.j[e][0])>0?28:30}return qP.length+1;case 15:if(t.t[e]==0){if(t.e[e]-P0(t,e)+xt(t,e)==0){if(P0(t,e)==3&&t.p[e]==0)return 39;if(P0(t,e)==2&&t.p[e]==1)return 40;if(P0(t,e)==4&&t.p[e]==1)return 41}else if(t.e[e]-P0(t,e)+xt(t,e)==1&&P0(t,e)==3&&t.p[e]==1)return 42}return qP.length+1;case 16:if(t.t[e]==0){if(e<t.g&&f0(t.q,e))return P0(t,e)==2?37:38;if(t.e[e]-P0(t,e)+xt(t,e)==0){if(P0(t,e)==2&&t.p[e]==0)return 32;if(P0(t,e)==1&&t.p[e]==1)return 33;if(P0(t,e)==3&&t.p[e]==1)return 34;if(P0(t,e)==4&&t.p[e]==2)return 35}else if(t.e[e]-P0(t,e)+xt(t,e)==1&&P0(t,e)==1)return 36}return qP.length+1}return qP.length}function f1t(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt;for(ut(t.k,1),t.g=c(Pt,it,6,t.k.i,16,1),t.c=0,L=0;L<t.k.i;L++)c1(t.k,L)==8&&(g0(t.k,L,1),t.g[L]=!0,++t.c);for(v=c(Pt,it,6,t.k.g,16,1),Qt=new gU(t.k,3),k=c(Pt,it,6,Qt.j.a.length,16,1),ct=0;ct<Qt.j.a.length;ct++){for(St=G(Qt.j,ct),k[ct]=!0,C=St,N=0,Y=C.length;N<Y;++N)if(j=C[N],!W0(t.k,j)){k[ct]=!1;break}if(k[ct]){for(S=St,tt=0,et=S.length;tt<et;++tt)j=S[tt],v[j]=!0;for(A1=G(Qt.k,ct),R=A1,x=0,H=R.length;x<H;++x)j=R[x],t.g[j]||(t.g[j]=!0,++t.c)}}for(s=0;s<t.k.i;s++)!t.g[s]&&(Qt.c[s]&d1)!=0&&W0(t.k,K(t.k,0,s))&&W0(t.k,K(t.k,1,s))&&p$(t,s);for(y=0;y<t.k.i;y++)t.g[y]||(r=K(t.k,0,y),i=K(t.k,1,y),!v[r]&&!v[i]&&W0(t.k,r)&&W0(t.k,i)&&(t.g[y]=!0,++t.c));for(ut(t.k,7),(t.q==2||t.q==1&&t.p)&&GZ(t),g=c(Pt,it,6,t.k.i,16,1),t.k.i>=0&&PA(t.g,0,g,0,t.k.i),Xt=0;Xt<Qt.j.a.length;Xt++)if(k[Xt]){for(St=G(Qt.j,Xt),$=St,a=0,st=$.length;a<st;++a)if(W=$[a],!GW(t,W))for(W0(t.k,W)&&(Wn(t.k,W,!1),--t.b),j=0;j<O(t.k,W);j++)h=Nt(t.k,W,j),t.g[h]&&(t.g[h]=!1,--t.c)}for(M5(t),rt=0;rt<Qt.j.a.length;rt++)if(k[rt]&&G(Qt.k,rt).length==6){for(A1=G(Qt.k,rt),b=!0,D=A1,Q=0,o=D.length;Q<o;++Q)if(f=D[Q],!t.g[f]){b=!1;break}b&&(MQ(t,A1[0]),MQ(t,A1[2]),MQ(t,A1[4]),M5(t))}for(wt=5;wt>=4;wt--)do for(ht=!1,f=0;f<t.k.i;f++)if(t.g[f]){for(n=0,T=0;T<2;T++)for(l=K(t.k,T,f),j=0;j<O(t.k,l);j++)t.g[Nt(t.k,l,j)]&&++n;if(n==wt){MQ(t,f),M5(t),ht=!0;break}}while(ht);for(;t.b>=2&&N$(t,g););if(e){if(t.b!=0)for(P=0;P<t.k.g;P++)W0(t.k,P)&&(Wn(t.k,P,!1),w1(t.k,P,2,!0),--t.b,A=!0);if(t.c!=0)for(f=0;f<t.k.i;f++)t.g[f]&&(t.g[f]=!1,g0(t.k,f,8),--t.c,A=!0)}else for(P=0;P<t.k.g;P++)W0(t.k,P)&&xt(t.k,P)!=0&&(Wn(t.k,P,!1),Je(t.k,P,32),--t.b);if(t.q==0||t.q==1&&!A){if(t.b!=0)throw At(new H1(jM));if(t.c!=0)throw At(new H1(jM))}}function k2(){k2=v1,JA=B(d(Oe,1),uA,6,15,[1,ho,o4,2.119999885559082,1.9800000190734863,1.909999966621399,1.7699999809265137,Oy,1.5,U4,1.5800000429153442,2.5,2.509999990463257,2.25,2.190000057220459,L4,1.8899999856948853,GM,1.8300000429153442,2.7300000190734863,2.619999885559082,2.5799999237060547,OM,qM,qy,qy,s4,zM,zM,2.380000114440918,2.390000104904175,y4,l4,1.8799999952316284,GM,KM,2.25,3.2100000381469727,2.8399999141693115,2.75,2.5199999809265137,2.559999942779541,qy,s4,OM,s4,2.1500000953674316,JM,YM,2.430000066757202,qM,XM,1.9900000095367432,2.0399999618530273,2.059999942779541,3.4800000190734863,3.0299999713897705,2.9800000190734863,ZM,WM,2.950000047683716,WM,2.9000000953674316,_M,h4,$M,_M,aM,h4,$M,tC,2.740000009536743,2.630000114440918,JM,2.569999933242798,YM,2.4800000190734863,2.4100000858306885,l4,y4,qy,XM,2.5999999046325684,2.5399999618530273,2.5,2.5,2.5,2.5,2.5,tC,2.930000066757202,ZM,2.7100000381469727,2.819999933242798,aM,h4,eC,3.4000000953674316,eC,2.700000047683716]),Xf=B(d(Oe,1),uA,6,15,[.25,T4,.46000000834465027,AC,1.0199999809265137,To,.75,.7099999785423279,.6299999952316284,.6399999856948853,.9599999785423279,nC,PC,1.2599999904632568,c4,rC,1.0299999713897705,.9900000095367432,iC,fC,DC,1.4800000190734863,w4,uC,QC,1.190000057220459,c4,rC,1.100000023841858,ho,ho,oC,zy,zy,c4,1.1399999856948853,zy,UC,g4,d4,1.5399999618530273,LC,1.3799999952316284,sC,1.25,1.25,ho,PC,yC,U4,yo,yo,w4,AC,1.350000023841858,y4,fC,Ny,d4,lC,1.7400000095367432,hC,TC,Ky,cC,Ky,wC,Oy,B4,1.6399999856948853,co,gC,1.5199999809265137,U4,dC,1.309999942779541,BC,QC,1.2300000190734863,oC,1.4199999570846558,1.5,yC,1.5099999904632568,vC,LC,vC,2.2300000190734863,2.009999990463257,KM,1.75,cC,co,DC,TC,Oy,Oy,Ky,Ky,B4,wC,hC,lC,1.6100000143051147,FC,1.4900000095367432,o4,1.409999966621399,uC,BC,sC,zy,dC,w4,o4,gC,1.75,B4,FC])}function D1t(t,e,A){var n,P,r,i,f,D,Q,o;switch(f=A.a.length,0<f?A.a=hA(A.a,0,0):0>f&&(A.a+=z8(c(Fr,re,6,-f,15,1))),D=h0(t.k,e),P=Ot(O0(V(D,yr),3)),P){case 20971520:A.a+=\"+0\";break;case 25165824:R1(t.k,e)==0&&(A.a+=\"-\");break;case 12582912:R1(t.k,e)==0&&(A.a+=\"+\")}return n=V(D,ky),z(n,2)==0?A.a+=\";a\":z(n,4)==0&&(A.a+=\";A\"),r=V(D,uP),z(r,0)!=0&&(z(r,1792)==0?A.a+=\";H0\":z(r,1664)==0?A.a+=\";H1\":z(r,1408)==0?A.a+=\";H2\":z(r,896)==0?A.a+=\";H3\":z(r,128)==0?A.a+=\";!H0\":z(r,384)==0?A.a+=\";!H0;!H1\":z(r,1536)==0?A.a+=\";!H2;!H3\":z(r,Qe)==0&&(A.a+=\";!H3\")),o=V(D,120),z(o,8)==0?A.a+=\";!R0\":z(o,16)==0?A.a+=\";!R1\":z(o,32)==0?A.a+=\";!R2\":z(o,64)==0?A.a+=\";!R3\":z(o,112)==0?A.a+=\";R0\":z(o,104)==0?A.a+=\";R1\":z(o,88)==0?A.a+=\";R2\":z(o,56)==0&&(A.a+=\";R3\"),Q=V(D,l9),z(Q,w8)==0?A.a+=\";!r\"+Fe(Q):z(Q,lM)==0?A.a+=\";r\"+Fe(Q):z(Q,0)!=0&&(gt(V(Q,Vf),0)?(n0(V(Q,w8),0)&&(A.a+=\";!r0\"+Fe(Q)),n0(V(Q,h9),0)&&(A.a+=\";!r3\"+Fe(Q)),n0(V(Q,T9),0)&&(A.a+=\";!r4\"+Fe(Q)),n0(V(Q,c9),0)&&(A.a+=\";!r5\"+Fe(Q)),n0(V(Q,w9),0)&&(A.a+=\";!r6\"+Fe(Q)),n0(V(Q,g9),0)&&(A.a+=\";!r7\"+Fe(Q))):(A.a+=\";\",gt(V(Q,w8),0)&&(A.a+=\"r0,\"+Fe(Q)),gt(V(Q,h9),0)&&(A.a+=\"r3,\"+Fe(Q)),gt(V(Q,T9),0)&&(A.a+=\"r4,\"+Fe(Q)),gt(V(Q,c9),0)&&(A.a+=\"r5,\"+Fe(Q)),gt(V(Q,w9),0)&&(A.a+=\"r6,\"+Fe(Q)),gt(V(Q,g9),0)&&(A.a+=\"r7,\"+Fe(Q)),Ln(A,A.a.length-1))),z(Q,0)==0&&(Q=O0(V(D,lr),22),z(Q,0)!=0&&(A.a+=\";r\"+Fe(Q))),i=V(D,hi),z(i,ro)==0&&(A.a+=\";D1\"),z(i,j2)==0&&(A.a+=\";D2\"),z(i,R2)==0&&(A.a+=\";D3\"),z(i,io)==0&&(A.a+=\";!D3;!D4\"),z(i,KA)==0&&(A.a+=\";!D4\"),z(i,Ti)==0&&(A.a+=\";!D0;!D1\"),z(i,NP)==0&&(A.a+=\";!D0;!D1;!D2\"),z(i,If)==0&&(A.a+=\";!D0;!D1;!D2;!D3\"),gt(V(D,O1),0)&&q(A,\";D\"+O(t.k,e)),gt(V(D,S0),0)&&q(A,\";!D\"+O(t.k,e)),A.a.length==0?null:A.a}function u1t(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;if(t.D[e]!=7||t.t[e]!=0||t.k[e]+t.p[e]>3)return!1;if(e<t.g&&f0(t.q,e)){if(t.p[e]!=1||P6(t,e,7)!=1)return!1;for(b=(ut(t,7),t.q),k=0;k<b.j.a.length;k++)if(wA(b,k,e)){if(G(b.k,k).length==5||G(b.k,k).length==6){for(j=G(b.j,k),T=-1,D=0;D<j.length;D++)if(j[D]==e){T=D;break}for(P=0,g=null,h=null,j.length==5&&(g=c(F,m,6,2,15,1),g[0]=j[T-1<0?T+4:T-1],g[1]=j[T-4<0?T+1:T-4],h=c(F,m,6,2,15,1),h[0]=j[T-2<0?T+3:T-2],h[1]=j[T-3<0?T+2:T-3]),j.length==6&&(g=c(F,m,6,3,15,1),g[0]=j[T-1<0?T+5:T-1],g[1]=j[T-3<0?T+3:T-3],g[2]=j[T-5<0?T+1:T-5],h=c(F,m,6,2,15,1),h[0]=j[T-2<0?T+4:T-2],h[1]=j[T-4<0?T+2:T-4]),Q=0;Q<j.length;Q++)e!=j[Q]&&t.D[j[Q]]==7&&t.p[j[Q]]==1&&--P;for(o=0;o<g.length;o++){for(r=-1,i=-1,l=0;l<t.k[g[o]];l++)if(!eA(t,t.n[g[o]][l])){r=t.j[g[o]][l],i=t.n[g[o]][l];break}if(r!=-1){if(t.D[r]==7&&t.p[r]==0&&t.k[r]+t.p[r]<=3&&!d5(t,r,!1)){++P;continue}if(t.D[r]==8&&t.k[r]==1){P+=2;continue}if(i<t.i&&Ee(t.q,i)){for(R=0;R<b.j.a.length;R++)if(b.e[R]&&wA(b,R,r)){for(v=G(b.j,R),y=0;y<v.length;y++)if(t.D[v[y]]==7&&t.p[v[y]]==1){--P;break}break}}}}for(L=0;L<h.length;L++){for(r=-1,y=0;y<t.k[h[L]];y++)eA(t,t.n[h[L]][y])||(r=t.j[h[L]][y]);t.D[h[L]]==6?r!=-1&&of(t,r)!=0&&--P:t.D[h[L]]==7&&t.p[h[L]]==0&&(r==-1||!(r<t.g&&f0(t.q,r))&&of(t,r)==0)&&++P}return P>0}break}return!1}if(t.p[e]>1)return!1;if(t.p[e]==1){for(s=-1,C=0,D=0;D<t.k[e];D++){if(n=t.j[e][D],t.o[e][D]==2){if(t.D[n]!=6)return!1;s=n;continue}if(t.D[n]==8)return!1;if(t.D[n]==7){--C,d5(t,n,!1)&&--C;continue}n<t.g&&f0(t.q,n)&&--C}if(s==-1)return!1;for(A=0,Q=0;Q<t.k[s];Q++)if(t.o[s][Q]==1){if(n=t.j[s][Q],of(t,n)!=0)return!1;n<t.g&&f0(t.q,n)&&++A,t.D[n]==7&&!d5(t,n,!0)&&++C,(t.D[n]==8||t.D[n]==16)&&--C}return A==2&&--C,C>=0}for(f=0;f<t.k[e];f++)if(n=t.j[e][f],n<t.g&&f0(t.q,n)||t.D[n]!=6||of(t,n)!=0||t.p[n]!=0&&$J(t,n))return!1;return!0}function v6(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st;if(X(t.R,A)!=X(t.R,n))return X(t.R,A)>X(t.R,n);if(ge(t.R,A)!=ge(t.R,n))return Y=hu(t.R,A)?(J1(),wr)[X(t.R,A)]:ge(t.R,A),et=hu(t.R,n)?(J1(),wr)[X(t.R,n)]:ge(t.R,n),Y>et;for(R=t.R.g,k=c(F,m,6,R,15,1),b=c(F,m,6,R,15,1),j=c(F,m,6,R,15,1),v=c(Pt,it,6,R,16,1),D=c(Pt,it,6,t.R.r,16,1),k[0]=e,k[1]=A,k[2]=n,b[0]=-1,b[1]=0,b[2]=0,D[e]=!0,D[A]=!0,D[n]=!0,s=1,C=2,H=c(F,m,6,64,15,1),H[1]=1,H[2]=3,l=2;s<=C;){for(;s<H[l];){if(y=k[s],!v[s]){for(h=0,T=0,x=0;x<O(t.R,y);x++){if(o=_(t.R,y,x),C+EA(t.R,y,x)+1>=R&&(R+=t.R.g,k=CL(k,R),b=CL(b,R),j=CL(j,R),v=(st=c(Pt,it,6,R,16,1),PA(v,0,st,0,v.length),st)),Z8(t.R,Nt(t.R,y,x)))++h,T+=X(t.R,o);else if(o!=e)for(tt=1;tt<EA(t.R,y,x);tt++)++C,k[C]=o,b[C]=s,v[C]=!0;if($=b[s],o!=k[$]){if(f=!1,D[o])for(W=b[$];W!=-1;){if(o==k[W]){f=!0;break}W=b[W]}f?(++C,k[C]=o,b[C]=s,v[C]=!0):(++C,k[C]=o,b[C]=s,D[o]=!0)}}h!=0&&(++C,j[C]=(T<<2)/h|0,b[C]=s,v[C]=!0)}if(++s,s==fP)throw At(new H1(\"Emergency break in while loop.\"))}for(H.length==l+1&&(H=CL(H,H.length+64)),H[l+1]=C+1,S=H[l];S<H[l+1];S++)j[S]==0&&(j[S]=(X(t.R,k[S])==151||X(t.R,k[S])==152?1:X(t.R,k[S]))<<2),j[S]+=j[b[S]]<<16;if(kR(t,v,j,b,k,H,l),j[1]!=j[2])return j[1]>j[2];l>1&&Kj(j,b,H,l),++l}for(L=c(F,m,6,t.R.g,15,1),N=!1,r=0;r<t.R.g;r++)if(D[r]&&!hu(t.R,r)){N=!0;break}if(N){for(i=0;i<t.R.g;i++)L[i]=hu(t.R,i)?(J1(),wr)[X(t.R,i)]:ge(t.R,i);if(A5(t,v,j,b,k,L,H,l))return j[1]>j[2]}for(zr(L,L.length,0),g=!1,Q=0;Q<t.R.i;Q++)(D[K(t.R,0,Q)]||D[K(t.R,1,Q)])&&(t.i[Q]==1?(L[K(t.R,0,Q)]=1,L[K(t.R,1,Q)]=1,g=!0):t.i[Q]==2&&(L[K(t.R,0,Q)]=2,L[K(t.R,1,Q)]=2,g=!0));if(g&&A5(t,v,j,b,k,L,H,l))return j[1]>j[2];for(zr(L,L.length,0),a=!1,P=0;P<t.R.g;P++)D[P]&&(t.$[P]==2?(L[P]=1,a=!0):t.$[P]==1&&(L[P]=2,a=!0));if(a&&A5(t,v,j,b,k,L,H,l))return j[1]>j[2];throw t.d=!0,At(new H1(\"no distinction applying CIP rules\"))}function F6(){F6=v1,af=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[-1432180054,-1434146134,-1441453406,-1471067516,-1589095916,-2060839854,1420461386,1454022954,1454024874]),B(d(F,1),m,6,15,[-1431677611,-1431764987,-1432092655,-1433403327,-1438646015,-1459616762,-1543499750,-1879031702,1431634346,1073809066,1073814186,1073834666,1431677610]),B(d(F,1),m,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,M4,1094713345,1077936134,-1879048186,-1543503866,-1543503846,-1459617766,C4,x2,x2]),B(d(F,1),m,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,M4,1094713345,1077952518,-1879031802,-1543154682,-1543487462,-1459601382,C4,x2,x2]),B(d(F,1),m,6,15,[il,il,-1431741782,-1437330070,-1459351462,-1459351482,M4,-1858076671,-1874853882,-1879048186,-1543503866,-1543503846,-1459617766,C4,x2,x2]),B(d(F,1),m,6,15,[il,-1432005270,-1454374890,-1543503871,-1879048191,1073741825,1073741846,1073743210,-1795073366,1079421610,1147841194,-1783977302,fl,fl,-1498764630]),B(d(F,1),m,6,15,[il,-1432005270,-1454374890,-1543438335,-1878982655,1075138561,1073807382,1073808746,-1795073366,1079421610,1147841194,-1783977302,fl,fl,-1498764630]),B(d(F,1),m,6,15,[1431655786,Tr,Kf,Tr,Kf,Tr,Kf,Tr,Kf,Tr,Kf,Tr,1145324650]),B(d(F,1),m,6,15,[1431655786,Tr,Kf,Tr,Kf,Tr,1073758314,1073758250,1074091114,1073758250,1073758314,Tr,1145324650]),B(d(F,1),m,6,15,[-1432003926,-1437248086,1767548266,1437248090,1437248086,1433053846,1433037477,-1431672155,-1432004955,1433037477,1433037462,1437248086,1437248090,1767548266,-1437248086,-1432003926]),null]),xE=B(d(F,1),m,6,15,[1,7,7,5,8,7,8,7,8,7,2,14,2,14,0,0,0,0,8,8,0,0]),NE=B(d(F,1),m,6,15,[4,20,10,29,18,18,18,18,18,18,16,11,16,11,4,5,4,5,16,16,16,16,0,0,0,0,12,2]),GE=B(d(ft,1),Dt,2,6,[\"chain.png\",\"eraser.png\",\"hand.png\",\"handPlus.png\",\"fist.png\",\"lasso.png\",\"lassoPlus.png\",\"rect.png\",\"rectPlus.png\",\"zoom.png\",\"invisible.png\",null,null,\"pointingHand.png\"])}function Q1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;if(L=!1,t.R.L){for(Q=0;Q<t.R.i;Q++)if(fe(t.R,Q)!=0){L=!0;break}}for(t.O=2,A=0;A<t.R.g;A++)t.O=w.Math.max(t.O,O(t.R,A)+qi(t.R,A));for(D=w.Math.max(2,L?(62+t.c+t.O*(t.c+23))/63|0:(62+t.c+t.O*(t.c+5))/63|0),t.f=c(F,m,6,t.R.r,15,1),t.e=c(K4,H2,101,t.R.g,0,1),n=0;n<t.R.g;n++)t.e[n]=new xU(D);for(f=!1,P=0;P<t.R.g;P++)AA(t.e[P],P),gt(V(h0(t.R,P),1),0)||IA(t.R,P)!=null?a1(t.e[P],8,6):a1(t.e[P],8,X(t.R,P)),a1(t.e[P],8,ge(t.R,P)),a1(t.e[P],2,e0(t.R,P)),a1(t.e[P],4,O(t.R,P)+qi(t.R,P)),gt(V(h0(t.R,P),1),0)?a1(t.e[P],4,8):a1(t.e[P],4,8+R1(t.R,P)),a1(t.e[P],5,w.Math.min(31,Or(t.R,P))),a1(t.e[P],4,pZ(t,P)+1),a1(t.e[P],2,jA(t.R,P)>>4),t.R.L&&(a1(t.e[P],51,h0(t.R,P)),IA(t.R,P)!=null&&(f=!0));if(t.U=tP(t),t.U<t.R.g){for(e=0;e<t.R.g;e++){for(AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),s=c(F,m,6,O(t.R,e),15,1),l=0;l<O(t.R,e);l++)s[l]=t.f[_(t.R,e,l)]<<5,s[l]|=w.Math.min(31,z9(t.R,Nt(t.R,e,l)));for(s.sort(pe(Q0.prototype.ld,Q0,[])),h=t.O;h>s.length;h--)a1(t.e[e],t.c+5,0);for(y=s.length-1;y>=0;y--)a1(t.e[e],t.c+5,s[y])}t.U=tP(t)}if(f&&t.U<t.R.g){for(e=0;e<t.R.g;e++){for(AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),i=IA(t.R,e),k=i==null?0:w.Math.min(12,i.length),l=12;l>k;l--)a1(t.e[e],8,0);for(y=k-1;y>=0;y--)a1(t.e[e],8,i[y])}t.U=tP(t)}if(L&&t.U<t.R.g){for(e=0;e<t.R.g;e++){for(AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),o=c(XA,re,6,O(t.R,e)+qi(t.R,e),14,1),T=0,l=0;l<Le(t.R,e);l++)(l<O(t.R,e)||l>=Ct(t.R,e))&&(o[T]=t.f[_(t.R,e,l)],o[T]=Wt(o[T],23),o[T]=J(o[T],fe(t.R,Nt(t.R,e,l))),++T);for(o.sort(pe($l.prototype.md,$l,[])),h=t.O;h>o.length;h--)a1(t.e[e],t.c+23,0);for(y=o.length-1;y>=0;y--)a1(t.e[e],t.c+23,o[y])}t.U=tP(t)}if((t.Q&8)!=0&&t.U<t.R.g){for(g=new ou,r=0;r<t.R.g;r++)eP(t.R,r)!=null&&Ns(g,eP(t.R,r));for(e=0;e<t.R.g;e++)v=eP(t.R,e)==null?0:1+T5(g,eP(t.R,e)),AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),a1(t.e[e],t.c,v);t.U=tP(t)}if((t.Q&16)!=0&&t.U<t.R.g){for(e=0;e<t.R.g;e++)AA(t.e[e],e),a1(t.e[e],t.c,t.f[e]),a1(t.e[e],1,i0(t.R,e)?1:0);t.U=tP(t)}(t.Q&512)!=0&&t.R.L&&eW(t)}function o1t(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k;if(e.j==1){if(t.t!=-1&&t.i.a.length!=0&&Dy(t,t.i.a),Ln(t.i,0),e.e){dR(t);return}if(e.b==1){if(e.c==2)return;t.W=!0,or(t),F1t(t,e)}}if(e.j==2){if(e.e){dR(t);return}e.b==1&&(t.W=!1,or(t),_tt(t))}if(e.j==3&&e.b==1&&e.c==2){Gtt(t,e.g,e.i);return}if(e.j==4&&(oB(t._),or(t)),e.j==6&&(t.W=!1,g=e.g,k=e.i,Sp(t,g,k,!1)&&P1(t.k),or(t)),e.j==7){switch(t.W=!0,t.ib=e.g,t.lb=e.i,s=Sp(t,t.ib,t.lb,!0),t.X){case 2:$tt(t)&&(s=!0);break;case 1:(t.ib-t.hb)*(t.ib-t.hb)+(t.lb-t.kb)*(t.lb-t.kb)<100&&L6(t,t.e),s=!0;break;case 3:de(t.V,t.e,t.gb[t.e]+t.ib-t.hb),Ve(t.V,t.e,t.jb[t.e]+t.lb-t.kb),t.f!=-1&&(de(t.V,t.f,t.gb[t.f]+t.ib-t.hb),Ve(t.V,t.f,t.jb[t.f]+t.lb-t.kb)),t.eb=w.Math.max(t.eb,2),P1(t.k);break;case 9:z$(t),t.X=4;case 4:if(t.I)for(r=new Zt(t.I);r.a<r.c.a.length;)P=_t(r),P.g&&P.Ob(t.ib,t.lb);for(f=0;f<t.V.r;f++)i0(t.V,f)&&(de(t.V,f,t.gb[f]+t.ib-t.hb),Ve(t.V,f,t.jb[f]+t.lb-t.kb));t.eb=w.Math.max(t.eb,2),P1(t.k);break;case 11:Ft(t.I,t.v.Gb()),t.X=10;case 10:t.v.Ob(t.ib,t.lb),t.eb=w.Math.max(t.eb,2),P1(t.k);break;case 7:for(y=!1,n=0;n<t.V.r&&!y;n++)y=i0(t.V,n);if(l=!1,t.I)for(D=0;D<t.I.a.length&&!l;D++)l=G(t.I,D).g;if(o=w.Math.abs(t.lb-t.kb)<20?1:w.Math.exp((t.lb-t.kb)/100),A=w.Math.abs(t.ib-t.hb)<20?0:(t.ib-t.hb)/50,h=y||l,t.I&&(!h||l)){for(D=0;D<t.I.a.length;D++)(!h||G(t.I,D).g)&&G(t.I,D).Pb(o,A);t.eb=w.Math.max(t.eb,2),P1(t.k)}(!h||y)&&(sb(t.V,o,A,h),t.eb=w.Math.max(t.eb,2),P1(t.k));break;case 5:case 6:if(T=null,t.X==5){if(w.Math.abs(t.ib-I7(t.R,t.R.a-1))<3&&w.Math.abs(t.lb-x7(t.R,t.R.a-1))<3)break;WI(t.R),Ie(t.R,t.ib,t.lb),Ie(t.R,t.hb,t.kb),T=t.R}else T=new lA(w.Math.min(t.hb,t.ib),w.Math.min(t.kb,t.lb),w.Math.abs(t.ib-t.hb),w.Math.abs(t.lb-t.kb));if(t.I)for(D=0;D<t.I.a.length;D++)L=G(t.I,D),Q=VK(L,T),(!t.O||!t.Q[D])&&Q!=L.g&&(L.g=Q,t.eb=w.Math.max(t.eb,1));for(i=0;i<t.V.r;i++)Q=T.Hb(Bt(mt(t.V,i)),Bt(Rt(t.V,i))),(!t.O||!t.P[i])&&Q!=i0(t.V,i)&&(vP(t.V,i,Q),t.eb=w.Math.max(t.eb,1));s=!0;break;case 8:s=!0}s&&P1(t.k)}}function U1t(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x;if(o=B(d(Ut,2),c0,15,0,[B(d(Ut,1),Tt,6,15,[20]),null,null,B(d(Ut,1),Tt,6,15,[0,10]),null,null,B(d(Ut,1),Tt,6,15,[-4,12]),B(d(Ut,1),Tt,6,15,[0,0,-7.5]),null,null,null,null,B(d(Ut,1),Tt,6,15,[8.571428571428571,-8.571428571428571]),null,null,null,B(d(Ut,1),Tt,6,15,[-2.4])]),L=B(d(F,2),u0,7,0,[B(d(F,1),m,6,15,[146]),B(d(F,1),m,6,15,[627]),null,B(d(F,1),m,6,15,[2457,1170]),null,B(d(F,1),m,6,15,[2451,8643,2519]),B(d(F,1),m,6,15,[9362,14798]),B(d(F,1),m,6,15,[34377,-2147448999,26214]),null,B(d(F,1),m,6,15,[37449,137313,95703,34371,37815,54891,132867,-2147309741,54857,55129,-2147449005,-2147449065]),null,B(d(F,1),m,6,15,[530697,531819,899169,137289,694617,-2146951863,-2146952797,-2146939175,-2146929547,-2146929564,-2146625111,-2146931799,-2146940503,-2146931935]),B(d(F,1),m,6,15,[1007293,610915]),B(d(F,1),m,6,15,[542985,137283,2122017,530691,2206773,-2144711351,219209,2840841,137555,-2146871031,-2147264167,613705,-2145360543,-2146625271,694611,2454837,-2145356703,-2147345133,-2146928951,-2146931805,-2144641719,-2146951869,-2146625237,-2146624183,2841963,1074905,-2146625117,2799955,-2144723645,138583,859225,-2145264843,-2145216253,-2146624149,-2144700727,-2146928917,-2143905527,-2144045771,-2146789097,2288547,544407,2104323,-2146911977,-2144479405,3633737,-2146870089,-2146952169]),null,B(d(F,1),m,6,15,[8487297,2172633,2116611,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8829813]),B(d(F,1),m,6,15,[14071213])]),k=1<<e.e.length,i=0,D=0,e.e.length>7)for(y=0;y<e.e.length;y++)f=OW(t,A,n,y),f==1?i+=k:f==2&&(D+=k),i>>>=1,D>>>=1;if(j=e.e.length-9,e.e.length>=9&&e.e.length<=25&&L[j]!=null)for(x=0;x<L[j].length;x++)for(g=(f1&L[j][x])==0,Q=Et&L[j][x],h=!1;!h;h=!h){if(h){if(g)break;for(v=0,P=1;P!=k;P<<=1)v<<=1,(Q&P)!=0&&(v|=1);Q=v}for(R=0;R<e.e.length;R++){if((Q&i)==0&&(~Q&D)==0){for(r=0,s=mC*(o[j]==null?0:o[j][x]),b=0,C=Q,T=!0,l=0;l<e.e.length;l++)T&&++b,(C&1)==0&&(T=!T),C>>>=1;for(S=b>(e.e.length/2|0),y=1;y<e.e.length;y++)e.a[y]=e.a[y-1]+w.Math.sin(r),e.b[y]=e.b[y-1]+w.Math.cos(r),(Q&1)==0&&(S=!S),r+=s+(S?fA:wo),Q>>>=1;return}(Q&1)!=0&&(Q|=k),Q>>>=1}}mtt(e,i,D)}function L1t(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W;for(h=0,T=(f=ue(e,h),f==-1?e.length:f),n=L1((Mt(h,T,e.length),e.substr(h,T-h)),f1,Et),h=gA(e,T),T=(D=ue(e,h),D==-1?e.length:D),v=(Mt(h,T,e.length),e.substr(h,T-h)),tt=null,P=!1,k=f_(e),k!=0&&(tt=h_(e),k<0&&(P=!0),T=w.Math.abs(k)),h=gA(e,T),T=(Q=ue(e,h),Q==-1?e.length:Q),Y=sn((Mt(h,T,e.length),e.substr(h,T-h))),h=gA(e,T),T=(o=ue(e,h),o==-1?e.length:o),et=sn((Mt(h,T,e.length),e.substr(h,T-h))),h=gA(e,T),T=(L=ue(e,h),L==-1?e.length:L),W=sn((Mt(h,T,e.length),e.substr(h,T-h))),h=gA(e,T),T=(s=ue(e,h),s==-1?e.length:s),j=L1((Mt(h,T,e.length),e.substr(h,T-h)),f1,Et),A=te(t.j,Y,-et,-W),A+1!=n&&(!t.b&&(t.b=new cP),We(t.b,U1(n),U1(A))),tt!=null&&($0(t.j,A,6),gf(t.j,A,tt,P)),j!=0&&tA(t.j,A,j,!1),e1(v,\"A\")||e1(v,\"*\")?w1(t.j,A,1,!0):e1(v,\"Q\")?(b=c(F,m,6,1,15,1),b[0]=6,gf(t.j,A,b,!0)):$0(t.j,A,zA(v,67));(h=gA(e,T))!=-1;)if(T=(i=ue(e,h),i==-1?e.length:i),x=(Mt(h,T,e.length),e.substr(h,T-h)),l=x.indexOf(p0(61)),y=(Mt(0,l,x.length),x.substr(0,l)),e1(y,\"CHG\"))H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),b0(t.j,A,H);else if(e1(y,\"RAD\"))switch(H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),H){case 1:Je(t.j,A,16);break;case 2:Je(t.j,A,32);break;case 3:Je(t.j,A,48)}else if(!e1(y,\"CFG\"))if(e1(y,\"MASS\"))H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),O9(t.j,A,H);else if(e1(y,\"VAL\"))H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),aA(t.j,A,H==-1?0:H==0?-1:H);else if(e1(y,\"HCOUNT\"))switch(H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),H){case 0:break;case-1:w1(t.j,A,1792,!0);break;case 1:w1(t.j,A,128,!0);break;case 2:w1(t.j,A,384,!0);break;default:w1(t.j,A,896,!0)}else if(e1(y,\"SUBST\")){if(H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),H==-1)w1(t.j,A,O1,!0);else if(H>0){for(N=0,r=0;r<t.j.s;r++)(K(t.j,0,r)==A||K(t.j,1,r)==A)&&++N;H>N&&w1(t.j,A,S0,!0)}}else if(e1(y,\"RBCNT\"))switch(H=L1((zt(l+1,x.length+1),x.substr(l+1)),f1,Et),H){case 3:case-1:w1(t.j,A,112,!0);break;case 1:w1(t.j,A,8,!0);break;case 2:w1(t.j,A,104,!0);break;case 4:w1(t.j,A,56,!0)}else e1(y,\"RGROUPS\")&&(C=tJ(),R=(g=iN(C.a,e),new h7(g)),HK(R)&&(S=\"R\"+(R.b.a[2]||null),IP(t.j,A,S)))}function s1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(o=h0(t.A,t.a),gt(V(o,1),0)?(yA(t.b,!0),aU(t.w,k4)):aU(t.w,_V),Y8(t.D,IA(t.A,t.a)==null?\"\":L5(t.A,t.a)),e=V(o,ky),gt(V(e,no),0)?$t(t.g,2):z(e,2)==0?$t(t.g,1):z(e,4)==0?$t(t.g,3):$t(t.g,0),y=V(o,120),z(y,112)==0?$t(t.s,1):z(y,96)==0?$t(t.s,2):z(y,8)==0?$t(t.s,3):z(y,104)==0?$t(t.s,4):z(y,88)==0?$t(t.s,5):z(y,56)==0?$t(t.s,6):$t(t.s,0),h=Ot(O0(V(o,lr),22)),$t(t.t,h==0?0:h-2),s=V(o,l9),f=-1,i=0;i<di.length;i++)if(n0(s,di[i])){f=i;break}f!=-1?$t(t.r,f):(n=new bn(\"Custom:\"),gt(V(s,w8),0)&&(n.a+=\" 0\"),gt(V(s,h9),0)&&(n.a+=\" 3\"),gt(V(s,T9),0)&&(n.a+=\" 4\"),gt(V(s,c9),0)&&(n.a+=\" 5\"),gt(V(s,w9),0)&&(n.a+=\" 6\"),gt(V(s,g9),0)&&(n.a+=\" 7\"),gt(V(s,Vf),0)&&(n.a+=\" >=8\"),t.C=s,Gt(t.r,n.a),$t(t.r,di.length)),D=V(o,hi),z(D,ro)==0?$t(t.n,1):z(D,j2)==0?$t(t.n,2):z(D,R2)==0?$t(t.n,3):z(D,io)==0?$t(t.n,4):z(D,KA)==0?$t(t.n,5):z(D,q0)==0?$t(t.n,6):z(D,Ti)==0?$t(t.n,7):z(D,NP)==0?$t(t.n,8):z(D,If)==0?$t(t.n,9):z(D,3276800)==0?$t(t.n,10):z(D,2228224)==0?$t(t.n,11):z(D,2490368)==0?$t(t.n,12):$t(t.n,0),P=V(o,xf),z(P,Ty)==0?$t(t.j,1):z(P,cy)==0?$t(t.j,2):z(P,wy)==0?$t(t.j,3):z(P,gy)==0?$t(t.j,4):z(P,x6)==0?$t(t.j,5):z(P,N6)==0?$t(t.j,6):z(P,fo)==0?$t(t.j,7):z(P,p2)==0?$t(t.j,8):z(P,dy)==0?$t(t.j,9):z(P,By)==0?$t(t.j,10):z(P,Do)==0?$t(t.j,11):z(P,G6)==0?$t(t.j,12):z(P,O6)==0?$t(t.j,13):z(P,q6)==0?$t(t.j,14):$t(t.j,0),A=V(o,yr),z(A,Po)==0?$t(t.i,1):z(A,Sf)==0?$t(t.i,2):z(A,Ef)==0?$t(t.i,3):$t(t.i,0),r=V(o,uP),z(r,1792)==0?$t(t.k,1):z(r,1664)==0?$t(t.k,2):z(r,1408)==0?$t(t.k,3):z(r,128)==0?$t(t.k,4):z(r,384)==0?$t(t.k,5):z(r,896)==0?$t(t.k,6):z(r,1536)==0?$t(t.k,7):z(r,Qe)==0?$t(t.k,8):z(r,1152)==0?$t(t.k,9):$t(t.k,0),Q=V(o,li),z(Q,98304)==0?$t(t.p,1):z(Q,81920)==0?$t(t.p,2):z(Q,49152)==0?$t(t.p,3):z(Q,Gn)==0?$t(t.p,4):$t(t.p,0),L=O0(V(o,M2),47),$t(t.o,Ot(L)),gt(V(o,O1),0)&&yA(t.c,!0),gt(V(o,S0),0)&&yA(t.f,!0),T=V(o,X6),n0(T,eo)?$t(t.u,1):n0(T,Ao)?$t(t.u,2):$t(t.u,0),gt(V(o,je),0)&&yA(t.e,!0),gt(V(o,Pe),0)&&yA(t.d,!0),t.q&&(l=V(o,k8),z(l,dn)==0?$t(t.q,1):z(l,Fo)==0?$t(t.q,2):z(l,k8)==0?$t(t.q,3):$t(t.q,0))}function tM(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;if(v=new h1,A=new h1,i=new h1,T=new we,h=new we,P=K(t.L,0,e),r=K(t.L,1,e),t.zb(e,W1(t.R,mt(t.L,P)),Z1(t.R,Rt(t.L,P)),W1(t.R,mt(t.L,r)),Z1(t.R,Rt(t.L,r))),!i0(t.L,P)&&!i0(t.L,r)&&gt(V(J(h0(t.L,P),h0(t.L,r)),Pe),0)&&$1(t,-8),t.o[P]?(v.a=t.o[P].a,v.c=t.o[P].b):(v.a=W1(t.R,mt(t.L,P)),v.c=Z1(t.R,Rt(t.L,P))),t.o[r]?(v.b=t.o[r].a,v.d=t.o[r].b):(v.b=W1(t.R,mt(t.L,r)),v.d=Z1(t.R,Rt(t.L,r))),(fe(t.L,e)&d8)!=0){vA(t,v)&&t.rb(v),$1(t,-9);return}switch(f=c1(t.L,e)==8?0:c1(t.L,e)==16?1:dt(t.L,e),f){case 1:if(D=c1(t.L,e),(t.G&128)!=0&&(D==257||D==129)&&(k=K(t.L,0,e),y=De(t.L,k),y!=0)){for(s=OA(t.L,k),L=0,n=0;n<t.L.g;n++)De(t.L,n)==y&&OA(t.L,n)==s&&++L;L==1&&(D=1)}switch(D){case 1:vA(t,v)&&In(t,v,P,r);break;case 257:Z5(t,v,P,r);break;case 129:for(b=v.b-v.a,j=v.d-v.c,V9(t.L,o1(t.L,P,r))?(Q=-3,o=-3):(Q=t.p[P],o=y5(t,P),Q==wu(t.L,P)&&(Q=o)),l=2;l<17;l+=2)A.a=v.a+l*b/17-l*j/128,A.c=v.c+l*j/17+l*b/128,A.b=v.a+l*b/17+l*j/128,A.d=v.c+l*j/17-l*b/128,vA(t,A)&&($1(t,l<9?Q:o),t.qb(A),$1(t,t.Q));break;case 16:vA(t,v)&&A_(t,v,P,r)}break;case 0:case 2:if((t.s[P]||e0(t.L,P)==2)&&(t.s[r]||e0(t.L,r)==2)&&!LA(t.L,e)&&f==2){if(!vA(t,v))break;Lf(t,v.b-v.a,v.d-v.c,T),b=T.a/2,j=T.b/2,A.a=v.a+b,A.c=v.c+j,A.b=v.b+b,A.d=v.d+j,i.a=v.a-b,i.c=v.c-j,i.b=v.b-b,i.d=v.d-j,c1(t.L,e)==386&&lL(A,i),In(t,A,P,r),f==2?In(t,i,P,r):qQ(t,i,P,r)}else(t.s[r]||e0(t.L,r)==2)&&f==2?Xp(t,v,e,!1):(t.s[P]||e0(t.L,P)==2)&&f==2?Xp(t,v,e,!0):(g=Q6(t.L,e),g==0&&(g=1),A.a=v.a,A.c=v.c,A.b=v.b,A.d=v.d,Lf(t,v.b-v.a,v.d-v.c,T),g>0?(i.a=v.a+T.a,i.c=v.c+T.b,i.b=v.b+T.a,i.d=v.d+T.b,(Ui(t,P,r,1,h)||O(t.L,P)>1)&&(i.a+=h.a+T.b,i.c+=h.b-T.a),(Ui(t,r,P,-1,h)||O(t.L,r)>1)&&(i.b+=h.a-T.b,i.d+=h.b+T.a)):(i.a=v.a-T.a,i.c=v.c-T.b,i.b=v.b-T.a,i.d=v.d-T.b,(Ui(t,P,r,-1,h)||O(t.L,P)>1)&&(i.a+=h.a+T.b,i.c+=h.b-T.a),(Ui(t,r,P,1,h)||O(t.L,r)>1)&&(i.b+=h.a-T.b,i.d+=h.b+T.a)),c1(t.L,e)==386&&lL(A,i),vA(t,A)&&In(t,A,P,r),f==2?vA(t,i)&&In(t,i,P,r):vA(t,i)&&qQ(t,i,P,r));break;case 3:vA(t,v)&&(In(t,v,P,r),Lf(t,v.b-v.a,v.d-v.c,T),Ar(t,v,P,r,T.a,T.b,A),Ar(t,v,P,r,-T.a,-T.b,A));break;case 4:vA(t,v)&&(Lf(t,v.b-v.a,v.d-v.c,T),Ar(t,v,P,r,1.5*T.a,1.5*T.b,A),Ar(t,v,P,r,.5*T.a,.5*T.b,A),Ar(t,v,P,r,-.5*T.a,-.5*T.b,A),Ar(t,v,P,r,-1.5*T.a,-1.5*T.b,A));break;case 5:vA(t,v)&&(In(t,v,P,r),Lf(t,v.b-v.a,v.d-v.c,T),Ar(t,v,P,r,2*T.a,2*T.b,A),Ar(t,v,P,r,T.a,T.b,A),Ar(t,v,P,r,-T.a,-T.b,A),Ar(t,v,P,r,-2*T.a,-2*T.b,A))}t.C==-8&&$1(t,-9)}function y1t(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1;if(H=e.i,Y=e.j,C=e.f,S=e.g,!n[H]&&!n[Y])for(ht=C.c.length>S.c.length?C:S,wt=C.c.length>S.c.length?H:Y,n[wt]=!0,N=P==null?0:P[wt],a=0;a<ht.d.length;a++)D=ht.e[ht.d[a]],wD(t,D,Z0(ht.b[N],ht.d[a]));if(n[H]?(tt=Y,R=S,s=e.b?1:0):(tt=H,R=C,s=e.b?0:1),L=e.a,bt=K(t.o,s,L),St=K(t.o,1-s,L),x=P==null?0:P[tt],b=R.f[bt],v=R.f[St],et=Z0(R.b[x],R.d[b]),Qt=t.k[bt],W=ri(_8(et,Z0(R.b[x],R.d[v]))),m1=ri(_8(Qt,t.k[St])),i=_b(W,m1),j=c(q2,V2,28,R.d.length,0,1),i<.0010000000474974513)for(a=0;a<R.d.length;a++)D=R.e[R.d[a]],D!=bt&&D!=St&&(j[a]=i>HA?_8(et,Z0(R.b[x],R.d[a])):_8(Z0(R.b[x],R.d[a]),et));else for(i<3.1405926535422957?yt=new Ke(m1.b*W.c-m1.c*W.b,-(m1.a*W.c-m1.c*W.a),m1.a*W.b-m1.b*W.a):w.Math.abs(m1.a)>=w.Math.abs(m1.b)&&w.Math.abs(m1.a)>=w.Math.abs(m1.c)?yt=new Ke(-(m1.b+m1.c)/m1.a,1,1):w.Math.abs(m1.b)>=w.Math.abs(m1.a)&&w.Math.abs(m1.b)>=w.Math.abs(m1.c)?yt=new Ke(1,-(m1.a+m1.c)/m1.b,1):yt=new Ke(1,1,-(m1.a+m1.b)/m1.c),rt=c2(ri(yt),i),a=0;a<R.d.length;a++)D=R.e[R.d[a]],D!=bt&&D!=St&&(j[a]=f2(_8(Z0(R.b[x],R.d[a]),et),rt));for(n[tt]=!0,st=0;st<O(t.o,bt);st++)h=_(t.o,bt,st),h!=St&&(k=R.f[h],JI(t,h,new Ke(j[k].a+Qt.a,j[k].b+Qt.b,j[k].c+Qt.c)));for(Jt=FL(t,e.p),T=-1,Q=0,o=0,Q1=0;Q1<t.i[A].length;Q1++){for(T=t.i[A][Q1],rt=c2(m1,l1*T/180-Jt),a=0;a<R.d.length;a++)D=R.e[R.d[a]],D!=bt&&D!=St&&(wD(t,D,j[a]),X8(f2(t.k[D],rt),Qt));if(y=i6(t,e),l0=y,pt=0,y<Q4)A1=y/O4,t.e[A][Q1]=t.d[A][Q1]*(1-A1*A1);else{for(l=t.i[A][Q1],V1=Ge,ct=0;ct<2;ct++)if(T=r[Q1][ct],T!=l){for(rt=c2(m1,l1*T/180-Jt),$=0;$<R.d.length;$++)D=R.e[R.d[$]],D!=bt&&D!=St&&(wD(t,D,j[$]),X8(f2(t.k[D],rt),Qt));Xt=i6(t,e),Xt<y*zf&&Xt<V1&&(t.i[A][Q1]=r[Q1][ct],A1=Xt/.16000000476837162,t.e[A][Q1]=t.d[A][Q1]*(1-A1*A1),l0=Xt,pt=ct+1,V1=Xt)}V1==Ge&&y<O4&&(A1=y/O4,t.e[A][Q1]=t.d[A][Q1]*(1-A1*A1))}t.e[A][t.a[A]]<t.e[A][Q1]&&(t.a[A]=Q1,Q=pt,o=l0)}for(U0=0,Lt=0;Lt<t.i[A].length;Lt++)t.e[A][Lt]>0&&(U0+=t.e[A][Lt]);if(t.e[A][t.a[A]]<=0)for(t.e[A][t.a[A]]=1,f=Q==1?-8:Q==2?8:Hn(t.f)<.5?-8:8,S1=1;S1<=4;S1++){for(T=t.i[A][t.a[A]]+f*S1<<16>>16,rt=c2(m1,l1*T/180-Jt),$=0;$<R.d.length;$++)D=R.e[R.d[$]],D!=bt&&D!=St&&(wD(t,D,j[$]),X8(f2(t.k[D],rt),Qt));if(g=i6(t,e),o-g<.05)break;t.i[A][t.a[A]]=T}else for(D1=0;D1<t.i[A].length;D1++)t.e[A][D1]/=U0;if(T!=t.i[A][t.a[A]])for(rt=c2(m1,l1*t.i[A][t.a[A]]/180-Jt),$=0;$<R.d.length;$++)D=R.e[R.d[$]],D!=bt&&D!=St&&(wD(t,D,j[$]),X8(f2(t.k[D],rt),Qt));bm(t,L,t.i[A][t.a[A]])}function eM(){eM=v1,Z4=B(d(Ut,1),Tt,6,15,[0,1.00794,4.0026,6.941,9.0122,10.811,12.011,14.007,15.999,18.998,20.18,22.99,24.305,26.982,28.086,30.974,32.066,35.453,39.948,39.098,40.078,44.956,47.867,50.942,51.996,54.938,55.845,58.933,58.693,63.546,65.39,69.723,72.61,74.922,78.96,79.904,83.8,85.468,87.62,88.906,91.224,92.906,95.94,98.906,101.07,102.91,106.42,107.87,112.41,114.82,118.71,121.76,127.6,126.9,131.29,132.91,137.33,138.91,140.12,140.91,144.24,146.92,150.36,151.96,157.25,158.93,162.5,164.93,167.26,168.93,173.04,174.97,178.49,180.95,183.84,186.21,190.23,192.22,195.08,196.97,200.59,204.38,207.2,208.98,209.98,209.99,222.02,223.02,226.03,227.03,232.04,231.04,238.03,237.05,239.05,241.06,244.06,249.08,252.08,252.08,257.1,258.1,259.1,262.11,267.12,268.13,271.13,270.13,277.15,276.15,Cy,Cy,283.17,285.18,Hy,Hy,293.2,Vy,Vy,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.0141,3.016,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71.0787,156.18828,114.10364,115.0877,103.1447,128.13052,129.11458,57.05182,137.14158,113.15934,113.15934,128.17428,131.19846,147.17646,97.11658,87.0777,101.10458,186.2134,163.17546,99.13246]),X4=B(d(Ut,1),Tt,6,15,[0,1.007825,4.0026,7.016003,9.012182,11.009305,12,14.003074,15.994915,18.998403,19.992435,22.989767,23.985042,26.98153,27.976927,30.973762,31.97207,34.968852,39.962384,38.963707,39.962591,44.95591,47.947947,50.943962,51.940509,54.938047,55.934939,58.933198,57.935346,62.939598,63.929145,68.92558,73.921177,74.921594,79.91652,78.918336,83.911507,84.911794,87.905619,88.905849,89.904703,92.906377,97.905406,89.92381,101.904348,102.9055,105.903478,106.905092,113.903357,114.90388,119.9022,120.903821,129.906229,126.904473,131.904144,132.905429,137.905232,138.906346,139.905433,140.907647,141.907719,135.92398,151.919729,152.921225,157.924099,158.925342,163.929171,164.930319,165.93029,168.934212,173.938859,174.94077,179.946545,180.947992,183.950928,186.955744,191.961467,192.962917,194.964766,196.966543,201.970617,204.974401,207.976627,208.980374,193.98818,195.99573,199.9957,201.00411,206.0038,210.00923,232.038054,216.01896,238.050784,229.03623,232.041169,237.05005,238.05302,242.06194,240.06228,243.06947,243.07446,248.08275,251.08887,253.09515,257.10295,257.10777,271.13,270.13,277.15,276.15,Cy,Cy,283.17,285.18,Hy,Hy,291.2,Vy,Vy,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.014,3.01605,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),z2=B(d(F,1),m,6,15,[6,1,7,8])}function l1t(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1,F1,T0,Y0,ZA,M0,B1,Ue,$e,kA;for(Y=0,Q=0,st=0,Jt=c(Pt,it,6,e.r,16,1),Lt=c(Pt,it,6,e.r,16,1),Q1=c(Pt,it,6,e.r,16,1),r=0;r<e.r;r++)A[r]==n&&(Q1[r]=!0,Jt[r]=!0,++Q,++Y);for(i=0;i<e.r;i++)if(Q1[i])for(St=0;St<e.k[i];St++)C=e.j[i][St],Jt[C]||(Jt[C]=!0,++Q,++st);for(f=0;f<e.r;f++)if(Jt[f]&&!Q1[f]&&!Lt[f])for(St=0;St<e.e[f];St++)C=e.j[f][St],Jt[C]||(Lt[C]=!0,Jt[C]=!0,++Q);for(y=0,s=0;s<e.s;s++)Jt[e.F[0][s]]&&Jt[e.F[1][s]]&&++y;for(wt=new SA(Q,y),L9(e,wt,Jt,!1,null),ve(wt,!0),et=c(F,m,6,Y,15,1),ct=c(F,m,6,Q,15,1),ht=c(F,m,6,Y+st,15,1),T0=c(F,m,6,e.r,15,1),H=0,rt=0,a=0,D=0;D<e.r;D++)Jt[D]&&(xP(e,D,!0)&&w1(wt,rt,d9,!0),Q1[D]||(wt.v[rt]|=q0),(Q1[D]||!Lt[D])&&(ht[a]=rt,T0[D]=a,++a),Q1[D]&&(et[H]=rt,++H),ct[rt]=D,wt.D[rt]==1&&(wt.B[rt]=2,wt.U&=wt.D[rt]==1?0:7),++rt);if(R=null,V1=null,T=null,U0=null,D1=!1,Ue=!!t.a&&AG(t.a)&&Q<=32,Ue){for(T=new qA(wt,512),P=0;P<wt.g;P++)if(T.db[P]==3){Ue=!1;break}for(L=0;L<wt.i;L++)if(T.o[L]==3){Ue=!1;break}Ue&&l6(T)}if(t.a&&!Ue&&++t.a.d,wt.U|=8,Ue&&(D1=WR(T),U0=Me(T),h=Rv(t.a,U0),h)){for(Xt=(si(T),T.H),R=new n1,x=h.a,N=0,tt=x.length;N<tt;++N){for(S=x[N],pt=0;pt<wt.r;pt++)l=S[Xt[pt]],de(wt,pt,l.a),Ve(wt,pt,l.b),Yn(wt,pt,D1?-l.c:l.c);Ft(R,new Hu(wt))}V1=h.c}if(!R){for(M0=new XQ(wt),DU(M0,t.d),q5(M0,t.c,16),R=new n1,o=pQ(M0),R.a.push(o),j=pQ(M0);j;)R.a.push(j),j=pQ(M0);for(F1=Ge,v=new Zt(R);v.a<v.c.a.length;)g=_t(v),F1=w.Math.min(F1,g.e);for(B1=2*F1,A1=R.a.length-1;A1>=0;A1--)(ee(A1,R.a.length),R.a[A1]).e>B1&&cA(R,A1);for(V1=c(Ut,Tt,6,R.a.length,15,1),l0=0,S1=0,Qt=0;Qt<R.a.length;Qt++)g=(ee(Qt,R.a.length),R.a[Qt]),V1[Qt]=w.Math.pow(10,(F1-g.e)/13.600000000000001),l0+=V1[Qt];for(bt=0;bt<R.a.length;bt++)V1[bt]/=l0;if(t.b){for($e=0,m1=Ge,b=new Zt(R);b.a<b.c.a.length;)g=_t(b),W=ZY(us(g,g.o)),g.n=W,isNaN(W)||(m1=w.Math.min(m1,W),++$e),GG(g,wt);for($=m1+2.72,k=new Zt(R);k.a<k.c.a.length;)g=_t(k),!isNaN(g.n)&&g.n>$&&(g.n=NaN,--$e);if($e!=0){for(Y0=c(Ut,Tt,6,$e,15,1),ZA=0,S1=0,yt=R.a.length-1;yt>=0;yt--)g=(ee(yt,R.a.length),R.a[yt]),isNaN(g.n)?cA(R,yt):(Y0[S1]=w.Math.pow(10,(m1-g.n)/1.36),ZA+=Y0[S1],++S1);for(V1=c(Ut,Tt,6,$e,15,1),St=0;St<$e;St++)V1[St]=Y0[St]/ZA}}if(Ue){for(Xt=(si(T),T.H),S=j1(q2,[DA,V2],[127,28],0,[R.a.length,Xt.length],2),St=0;St<S.length;St++)for(pt=0;pt<Xt.length;pt++)kA=Z0((ee(St,R.a.length),R.a[St]),pt),S[St][Xt[pt]]=new Ke(kA.a,kA.b,D1?-kA.c:kA.c);pv(t.a,U0,new Sg(S,V1))}}return new wF(et,ct,ht,T0,Qf(R,c(CS,LE,97,0,0,1)),V1)}function AM(t,e){qs();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W;switch(C=xt(t,e),et=t.K[e].a,W=t.K[e].b,C){case 1:{if(x=t.k[e],x==0?(o=KL(t,!0),y=0):(o=et-mt(t,t.j[e][0]),y=W-Rt(t,t.j[e][0])),x==1)v=te(t,et+ic*o+Qc*y,W-Qc*o+ic*y,0);else if(x==2)o=et-.5*(mt(t,t.j[e][0])+mt(t,t.j[e][1])),y=W-.5*(Rt(t,t.j[e][0])+Rt(t,t.j[e][1])),v=te(t,et+o,W+y,0);else if(x==3){for(tt=t.j[e][0],g=1;g<3;g++)f=t.n[e][g],(t.I[f]==129||t.I[f]==257)&&(tt=t.j[e][g]);if(A=w.Math.abs(Ze(pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][0]),Rt(t,t.j[e][0])),pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][1]),Rt(t,t.j[e][1])))),n=w.Math.abs(Ze(pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][0]),Rt(t,t.j[e][0])),pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][2]),Rt(t,t.j[e][2])))),P=w.Math.abs(Ze(pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][1]),Rt(t,t.j[e][1])),pA(t.K[e].a,t.K[e].b,mt(t,t.j[e][2]),Rt(t,t.j[e][2])))),N=!0,A>n&&A>P?n+P<l1&&(N=!1,o=et-.5*(mt(t,t.j[e][0])+mt(t,t.j[e][1])),y=W-.5*(Rt(t,t.j[e][0])+Rt(t,t.j[e][1]))):n>A&&n>P?A+P<l1&&(N=!1,o=et-.5*(mt(t,t.j[e][0])+mt(t,t.j[e][2])),y=W-.5*(Rt(t,t.j[e][0])+Rt(t,t.j[e][2]))):A+n<l1&&(N=!1,o=et-.5*(mt(t,t.j[e][1])+mt(t,t.j[e][2])),y=W-.5*(Rt(t,t.j[e][1])+Rt(t,t.j[e][2]))),N){for(H=t.j[e][0],Q=Ge,T=0;T<3;T++)r=t.j[e][T],r!=tt&&(D=w.Math.pow(t.K[e].a-t.K[r].a,2)+w.Math.pow(t.K[e].b-t.K[r].b,2),D<Q&&(H=r,Q=D,q1()));v=te(t,(t.K[tt].a+t.K[H].a)/2,(t.K[tt].b+t.K[H].b)/2,0)}else v=te(t,et+o,W+y,0)}else v=te(t,et+o,W+y,0);$0(t,v,1),J0(t,e,v,1)}break;case 2:if(S=t.k[e],S==1)o=et-mt(t,t.j[e][0]),y=W-Rt(t,t.j[e][0]),v=te(t,et+(Co*o-Ho*y)*.7,W+(Ho*o+Co*y)*.7,0),$0(t,v,1),J0(t,e,v,1),v=te(t,et+(Pc*o-Dc*y)*.7,W+(Dc*o+Pc*y)*.7,0),$0(t,v,1),J0(t,e,v,1);else if(S==2)L=et-mt(t,t.j[e][0]),l=W-Rt(t,t.j[e][0]),s=et-mt(t,t.j[e][1]),h=W-Rt(t,t.j[e][1]),j=w.Math.sqrt(L*L+l*l)*.7,R=w.Math.sqrt(s*s+h*h)*.7,o=L+s,y=l+h,b=w.Math.sqrt(o*o+y*y),i=(j+R)/2,o=o/b*i,y=y/b*i,Y=xQ(t,e),v=te(t,et+nc*o-fc*y,W+fc*o+nc*y,0),$0(t,v,1),Y>-1?J0(t,e,v,1):J0(t,e,v,257),v=te(t,et+rc*o-uc*y,W+uc*o+rc*y,0),$0(t,v,1),J0(t,e,v,1);else for(k=0;k<C;k++)v=te(t,et,W,0),$0(t,v,1),J0(t,e,v,1);break;case 3:t.j[e][0]>0?(o=(et-mt(t,t.j[e][0]))*.7,y=(W-Rt(t,t.j[e][0]))*.7,v=te(t,et+o,W+y,0),$0(t,v,1),J0(t,e,v,1),v=te(t,et-y,W+o,0),$0(t,v,1),J0(t,e,v,1),v=te(t,et+y,W-o,0),$0(t,v,1),J0(t,e,v,1)):(o=KL(t,!0),y=KL(t,!0),v=te(t,et+o,W+y,0),$0(t,v,1),J0(t,e,v,1),v=te(t,et-y*Co,W+o*Ho,0),$0(t,v,1),J0(t,e,v,1),v=te(t,et-y*Co,W-o*Ho,0),$0(t,v,1),J0(t,e,v,1));break;default:{for(k=0;k<C;k++)v=te(t,et,W,0),$0(t,v,1),J0(t,e,v,1);break}}}function h1t(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct;if((t.fb!=ND(t.k)||t.N!=Y9(t.k))&&(t.fb=ND(t.k),t.N=Y9(t.k),t.eb<3&&(t.eb=3)),P=v3(e),f=xB(e),nA(e,P),q3(e,0,0,t.fb,t.N),(t.U&4)!=0&&t.I.a.length==0&&(y=.5*t.fb,l=.5*t.N,r=.03999999910593033*t.fb,A=new _D,x3(A,y-r,l,y+r,l),A.j=!0,Ft(t.I,A)),o=!1,t.eb!=0){switch((t.U&1)!=0&&t.eb!=5&&Dm(t),t.G=(t.U&4)!=0?new zj(new OT(t.L,t.Y),t.I):(t.U&2)!=0?new Qv(t.L,t.Y,t.I):(t.U&1)!=0?new kB(t.L,t.I):new HF(t.V,t.I),oY(t.G,f,P),lI(t.G,t.T),TI(t.G,(t.U&1)==0?0:(L=Al,L.startsWith(nl)||L.startsWith(Pl)||L.startsWith(rl)?E5(P,To):(ni(),P&On|Bt(w.Math.round(To*((P&QP)>>16)))<<16|Bt(w.Math.round(To*((P&DP)>>8)))<<8|Bt(w.Math.round(To*(P&255)))))),xq(t.G,t.$),hI(t.G,t.H|8|(t.w==19?80:0)),t.eb){case 6:case 4:case 5:sK(t,e);break;case 3:j=_5(t.G,e,new lA(0,0,t.fb,t.N),0),j&&(t.U&1)!=0&&_h(j,t.V);break;case 2:R=$R(t.G,e,new lA(0,0,t.fb,t.N),0),o=!!R&&!(R.c==1&&R.a==0&&R.b==0)}t.eb=0}switch(t.G&&k$(t.G,e),o||PZ(t,e),t.G&&(tX(t.G,e),Az(t.G,e)),t.t!=-1&&t.i.a.length!=0&&(x=Bt(mt(t.V,t.t)),W=Bt(Rt(t.V,t.t)),T=t.i.a,C=Wz(t,T),nA(e,C==1?f:C==2?-16776961:hy),C==1?T=(J1(),a0)[zA(T,t.c)]:C==2&&(T=hA(t.j,0,T.length)),i=3*(rt=e.Lc(),rt.getFontSize())/2|0,oL(e,i,!1,!1),C3(e,x,W,T),C==4&&(nA(e,GP),z3(e,x+aL(e,T).b/2,W+i,\"<unknown>\")),C==2&&(nA(e,hy),C3(e,x+aL(e,T).b,W,GD(t.j,T.length)))),nA(e,f),t.X){case 1:switch(N=Bt(t.hb),$=Bt(t.kb),t.t==-1||t.t==t.e?(tt=Bt(t.ib),a=Bt(t.lb)):(tt=Bt(mt(t.V,t.t)),a=Bt(Rt(t.V,t.t))),t.w){case 5:Z9(e,N,$,tt,a);break;case 6:H=($-a)/9|0,st=(tt-N)/9|0,h=new WD(3),Ie(h,N,$),Ie(h,tt+H,a+st),Ie(h,tt-H,a-st),AL(e,new uD(h));break;case 23:for(H=tt-N,st=a-$,Q=2;Q<17;Q+=2)Y=N+(Q*H/17|0)-(Q*st/128|0),ht=$+(Q*st/17|0)+(Q*H/128|0),et=N+(Q*H/17|0)+(Q*st/128|0),wt=$+(Q*st/17|0)-(Q*H/128|0),Z9(e,Y,ht,et,wt)}break;case 2:if(t.q>0&&Z9(e,Bt(t.hb),Bt(t.kb),Bt(t.o[0]),Bt(t.p[0])),t.q>1)for(Q=1;Q<t.q;Q++)Z9(e,Bt(t.o[Q-1]),Bt(t.p[Q-1]),Bt(t.o[Q]),Bt(t.p[Q]));break;case 5:nA(e,(k=(v=KD(e),v!=0?v:el),v5(k,(s=Al,s.startsWith(nl)||s.startsWith(Pl)||s.startsWith(rl)?eE:AE)))),gG(e,new uD(t.R)),nA(e,f);break;case 6:x=t.hb<t.ib?Bt(t.hb):Bt(t.ib),W=t.kb<t.lb?Bt(t.kb):Bt(t.lb),S=Bt(w.Math.abs(t.ib-t.hb)),D=Bt(w.Math.abs(t.lb-t.kb)),nA(e,(b=(g=KD(e),g!=0?g:el),v5(b,(L=Al,L.startsWith(nl)||L.startsWith(Pl)||L.startsWith(rl)?eE:AE)))),ct=e.Lc(),ct.drawRectangle(x,W,S,D),nA(e,f);break;case 8:N=Bt(t.hb),$=Bt(t.kb),t.t==-1||t.t==t.e?(tt=Bt(t.ib),a=Bt(t.lb)):(tt=Bt(mt(t.V,t.t)),a=Bt(Rt(t.V,t.t))),nA(e,(n=v3(e),$s(-8388608,n))),Z9(e,N,$,tt,a),nA(e,f)}}function nM(t,e,A){var n,P,r,i,f,D;for(r=0,$A(t.b)?(r=J(r,1),gf(t.A,e,A,!0)):gf(t.A,e,A,!1),F0(t.g)==2?oN(t.A,e)||(r=J(r,t4)):mn(t.A,e)||(F0(t.g)==1?r=J(r,2):F0(t.g)==3&&(r=J(r,4))),f=0,P=0;P<O(t.A,e);P++)gt(V(h0(t.A,_(t.A,e,P)),Pe),0)&&LA(t.A,Nt(t.A,e,P))&&++f;switch(F0(t.s)){case 1:f==0&&(r=J(r,112));break;case 2:f<=2&&(r=J(r,96));break;case 3:r=J(r,8);break;case 4:f<3&&(r=J(r,104));break;case 5:f<4&&(r=J(r,88));break;case 6:r=J(r,56)}switch(F0(t.t)!=0&&(r=J(r,Wt(F0(t.t)+2,22))),D=F0(t.r),D==di.length?r=J(r,t.C):D!=0&&(r=J(r,di[D])),F0(t.i)){case 1:r=J(r,Po);break;case 2:r=J(r,Sf);break;case 3:r=J(r,Ef)}switch(i=$x(t.A,e),F0(t.n)){case 1:i==1?r=J(r,O1):i<1&&(r=J(r,ro));break;case 2:i==2?r=J(r,O1):i<2&&(r=J(r,j2));break;case 3:i==3?r=J(r,O1):i<3&&(r=J(r,R2));break;case 4:i==2?r=J(r,O1):i<2&&(r=J(r,io));break;case 5:i==3?r=J(r,O1):i<3&&(r=J(r,KA));break;case 6:i==0&&(r=J(r,S0));break;case 7:i==1?r=J(r,S0):i<1&&(r=J(r,Ti));break;case 8:i==2?r=J(r,S0):i<2&&(r=J(r,NP));break;case 9:i==3?r=J(r,S0):i<3&&(r=J(r,If));break;case 10:i==0?r=J(r,3276800):r=J(r,io);break;case 11:i==0?r=J(r,2228224):r=J(r,KA);break;case 12:i<=1?r=J(r,2490368):i<=3&&(r=J(r,KA))}switch(n=TT(t.A,e),F0(t.j)){case 1:n==0&&(r=J(r,Ty));break;case 2:n<=1&&(r=J(r,cy));break;case 3:n<=2&&(r=J(r,wy));break;case 4:n<=3&&(r=J(r,gy));break;case 5:n<2&&(r=J(r,x6));break;case 6:n<3&&(r=J(r,N6));break;case 7:n<4&&(r=J(r,fo));break;case 8:n==0&&(r=J(r,p2));break;case 9:n<2&&(r=J(r,dy));break;case 10:n<3&&(r=J(r,By));break;case 11:n<4&&(r=J(r,Do));break;case 12:n<2&&(r=J(r,G6));break;case 13:n<3&&(r=J(r,O6));break;case 14:n<3&&(r=J(r,q6))}switch(F0(t.k)){case 1:r=J(r,1792);break;case 2:r=J(r,1664);break;case 3:r=J(r,1408);break;case 4:r=J(r,128);break;case 5:r=J(r,384);break;case 6:r=J(r,896);break;case 7:r=J(r,1536);break;case 8:r=J(r,Qe);break;case 9:r=J(r,1152)}switch(F0(t.p)){case 1:r=J(r,98304);break;case 2:r=J(r,81920);break;case 3:r=J(r,49152);break;case 4:r=J(r,Gn)}switch(F0(t.o)!=0&&(r=J(r,Wt(F0(t.o),47))),$A(t.c)&&(_i(t.A,e)>0||R1(t.A,e)==0&&(X(t.A,e)==5||b3(t.A,e)||W3(t.A,e)))&&(r=J(r,O1)),$A(t.f)&&(_i(t.A,e)>0||R1(t.A,e)==0&&(X(t.A,e)==5||b3(t.A,e)||W3(t.A,e)))&&(r=J(r,S0)),F0(t.u)){case 1:r=J(r,eo);break;case 2:r=J(r,Ao)}if($A(t.e)&&(r=J(r,je)),$A(t.d)&&(r=J(r,Pe)),t.q)switch(F0(t.q)){case 1:r=J(r,dn);break;case 2:r=J(r,Fo);break;case 3:r=J(r,k8)}w1(t.A,e,-1,!1),w1(t.A,e,r,!0)}function T1t(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a;for(o=e.a[A],L=e.a[n],s=e.a[P],y=e.a[r],W=JZ(t.a,e,A,n,P,r),$=W>10?W/10|0:W,a=W>10?W-$*10:0,S=-1,x=0,C=0,N=0,j=$,Y=5;(x<Y&&(S==-1||Y==4)||x==4&&$==5&&a>0)&&(Y==5&&x==4&&(Y=4,x=0,j=a),x==1?(C=1,N=3):x==2?(C=3,N=1):(C=x,N=x),g=t.a.g.a[o-1][w.Math.min(C+1,4)],k=L,v=s,b=t.a.g.a[y-1][w.Math.min(N+1,4)],k>v?(v=(H=U1(k),U1(k=v),H).a,b=(tt=U1(g),U1(g=b),tt).a):k==v&&g>b&&(b=(tt=U1(g),U1(g=b),tt).a),S=f9(B(d(F,1),m,6,15,[2,3,1,4,0]),B(d(F,1),m,6,15,[k,v,g,b,j]),t),!(S!=-1&&Y==4));)++x;if(S>=0)return new gF(t,S);for(T=o1(e,n,P),f=B(d(Ut,1),Tt,6,15,[0,0]),D=B(d(Ut,1),Tt,6,15,[0,0]),Q=B(d(Ut,1),Tt,6,15,[0,0]),l=B(d(F,1),m,6,15,[e.D[n],e.D[P]]),i=(Rn(t.a.b,L)-1)*(Rn(t.a.b,s)-1),R=0;R<2;R++)switch(l[R]){case 6:f[R]=2,D[R]=2.12;break;case 7:f[R]=2,D[R]=1.5;break;case 8:f[R]=2,D[R]=.2,Q[R]=2;break;case 14:f[R]=1.25,D[R]=1.22;break;case 15:f[R]=1.25,D[R]=2.4;break;case 16:f[R]=1.25,D[R]=.49,Q[R]=8}return ZD(t.a.b,L)||ZD(t.a.b,s)?new Xn(0,0):LL(t.a.b,L)&&LL(t.a.b,s)&&T<e.i&&Ee(e.q,T)?(h=u8(t.a.b,L)==3&&u8(t.a.b,s)==4||u8(t.a.b,L)==4&&u8(t.a.b,s)==3?3:6,et=X9(t.a.b,L)==0&&X9(t.a.b,s)==0?.5:.3,new Xn(h*et*w.Math.sqrt(f[0]*f[1]),0)):dt(e,T)==2?(et=NA(t.a.b,L)==2&&NA(t.a.b,s)==2?1:.4,new Xn(6*et*w.Math.sqrt(f[0]*f[1]),0)):Rn(t.a.b,L)==4&&Rn(t.a.b,s)==4?new Xn(0,w.Math.sqrt(D[0]*D[1])/i):Rn(t.a.b,L)==4&&Rn(t.a.b,s)!=4?Rn(t.a.b,s)==3&&(u8(t.a.b,s)==4||u8(t.a.b,s)==34||NA(t.a.b,s)>0)||Rn(t.a.b,s)==2&&(u8(t.a.b,s)==3||NA(t.a.b,s)>0)?new IU:new Xn(0,w.Math.sqrt(D[0]*D[1])/i):Rn(t.a.b,s)==4&&Rn(t.a.b,L)!=4?Rn(t.a.b,L)==3&&(u8(t.a.b,L)==4||u8(t.a.b,L)==34||NA(t.a.b,L)>0)||Rn(t.a.b,L)==2&&(u8(t.a.b,L)==3||NA(t.a.b,L)>0)?new IU:new Xn(0,w.Math.sqrt(D[0]*D[1])/i):dt(e,T)==1&&NA(t.a.b,L)>0&&NA(t.a.b,s)>0||NA(t.a.b,L)>0&&X9(t.a.b,s)>0||X9(t.a.b,L)>0&&NA(t.a.b,s)>0?X9(t.a.b,L)>0&&X9(t.a.b,s)>0?new IU:X9(t.a.b,L)>0&&NA(t.a.b,s)>0?(et=0,NA(t.a.b,L)==1?et=.5:nP(l[0])==2&&nP(l[1])==2?et=.3:(nP(l[0])!=2||nP(l[1])!=2)&&(et=.15),new Xn(6*et*w.Math.sqrt(f[0]*f[1]),0)):X9(t.a.b,s)>0&&NA(t.a.b,L)>0?(et=0,NA(t.a.b,s)==1?et=.5:nP(l[0])==2&&nP(l[1])==2?et=.3:(nP(l[0])!=2||nP(l[1])!=2)&&(et=.15),new Xn(6*et*w.Math.sqrt(f[0]*f[1]),0)):(NA(t.a.b,L)==1||NA(t.a.b,s)==1)&&(l[0]!=6||l[1]!=6)?new Xn(2.4000000000000004*w.Math.sqrt(f[0]*f[1]),0):new Xn(.8999999999999999*w.Math.sqrt(f[0]*f[1]),0):(l[0]==8||l[0]==16)&&(l[1]==8||l[1]==16)?new Xn(-w.Math.sqrt(Q[0]*Q[1]),0):new Xn(0,w.Math.sqrt(D[0]*D[1])/i)}function c1t(t,e){var A,n,P,r,i,f,D,Q,o,L;if(!t.W){if(Q=e.b,e.j==1)if(Q==-3)t.Z=!0,or(t);else if(Q==-2)t.d=!0,or(t);else if(Q==-1)or(t);else if(e.a)Q==122?(Ov(t),t.eb=w.Math.max(t.eb,2),P1(t.k),N1(t,new x1(t,1,!0))):Q==99?$5(t,!0):Q==118&&((t.U&4)!=0&&t.r&&nF(),Wv(t));else if(Q==-4)t.w!=19&&(K1(t),RW(t)||UQ(t.V)&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0))));else if(Q==-6||t.t==-1&&Q==63){H3(t._,aV,tE);return}else if(Q==-8)t.i.a.length!=0&&(Dy(t,t.i.a),Ln(t.i,0));else if(t.u!=-1)Q==113&&t.V.L?Jv(t,t.u):Q==118?_Q(t.V,t.u,3,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))):Q>=52&&Q<=55?_Q(t.V,t.u,Q-48,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))):Q==97||Q==98?_Q(t.V,t.u,6,!0,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))):(P=Q==48?(K1(t),h8(t.V,t.u,16)):Q==49?(K1(t),h8(t.V,t.u,1)):Q==50?(K1(t),h8(t.V,t.u,2)):Q==51?(K1(t),h8(t.V,t.u,4)):Q==117?(K1(t),h8(t.V,t.u,257)):Q==100?(K1(t),h8(t.V,t.u,129)):Q==99?(K1(t),h8(t.V,t.u,386)):Q==109&&(K1(t),h8(t.V,t.u,16)),P&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0))));else if(t.t!=-1)if(D=t.i.a.length==0,D?t.K=Q:(t.K==108&&(Ln(t.i,0),Ye(t.i,76)),t.K=-1),D&&Q==108)q(t.i,\"Cl\"),t.eb=w.Math.max(t.eb,1),P1(t.k);else if(D&&(Q==43||Q==45))K1(t),RT(t.V,t.t,Q==43)&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));else if(D&&Q==46)K1(t),L=jA(t.V,t.t)==32?0:32,Je(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));else if(D&&Q==58)K1(t),L=jA(t.V,t.t)==48?16:jA(t.V,t.t)==16?0:48,Je(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));else if(D&&Q==113&&t.V.L)GF(t,t.t);else if(D&&t.V.L&&(Q==120||Q==88))o=B(d(F,1),m,6,15,[9,17,35,53]),MT(t.V,t.t,o),t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0));else if(D&&Q==63)K1(t),mf(t.V,t.t,0,0,-1,0)&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));else if(D&&Q>48&&Q<=57){if(_i(t.V,t.t)>0){for(K1(t),r=Q-47,A=t.t,i=t.V.r-t.V.g,f=1;f<r&&(L6(t,A),n=te(t.V,t.ib,t.lb,0),n!=-1);f++)uL(t.V,A,n),A=n-i,ut(t.V,1);t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))}}else!D&&Q==-7?(Ln(t.i,0),t.eb=w.Math.max(t.eb,1),P1(t.k)):!D&&Q==-5?(Ln(t.i,t.i.a.length-1),t.eb=w.Math.max(t.eb,1),P1(t.k)):Q>=65&&Q<=90||Q>=97&&Q<=122||Q>=48&&Q<=57||Q==45?(Ye(t.i,Q&d1),t.eb=w.Math.max(t.eb,1),P1(t.k)):(Q==10||Q==13)&&Dy(t,t.i.a);else Q==104||Q==118?(t.U&7)==0&&K5(t,Q==104):t.db&&s6(t.db,e);e.j==2&&(Q==-3?(t.Z=!1,or(t)):Q==-2?(t.d=!1,or(t)):Q==-1?or(t):t.db&&s6(t.db,e))}}function w1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st;for(n=0;n<t.f.g;n++)if(Ct(t.f,n)>4){for(s=new VP(t.f,1+Ct(t.f,n),!1),s.a[Ct(t.f,n)]=0,s.b[Ct(t.f,n)]=0,s.k[Ct(t.f,n)]=32,s.e[Ct(t.f,n)]=n,t.b[n]=!0,l=0;l<Ct(t.f,n);l++)Q=_(t.f,n,l),s.a[l]=w.Math.sin(fA*l-I2),s.b[l]=w.Math.cos(fA*l-I2),s.k[l]=32,s.e[l]=Q,t.b[Q]=!0,t.c[Nt(t.f,n,l)]=!0;CP(t.d,s)}for(et=kn(t.f),Y=0;Y<et.j.a.length;Y++){if(W=G(et.k,Y).length,tt=G(et.j,Y),$=!1,(t.e&12)!=0){for($=!0,l=0;l<W;l++)if(!W0(t.f,tt[l])){$=!1;break}}if(!$){for(g=!1,h=0;h<W;h++)if(Or(t.f,tt[h])==W){g=!0;break}if(g)for(H=G(et.k,Y),Xm(t,tt,H),l=0;l<W;l++)t.b[tt[l]]=!0,t.c[H[l]]=!0}}for(f=0;f<t.f.i;f++)if(LA(t.f,f)&&!t.c[f])for(st=x$(t,f),tt=st.a,H=st.b,Xm(t,tt,H),l=0;l<st.a.length;l++)t.b[tt[l]]=!0,t.c[H[l]]=!0;for(D=0;D<t.f.s;D++)if(!t.c[D]&&dt(t.f,D)==3&&(P=K(t.f,0,D),r=K(t.f,1,D),R=Ct(t.f,P)+Ct(t.f,r),R>2)){for(s=new VP(t.f,R,!1),o=0,h=0;h<Ct(t.f,P);h++)Q=_(t.f,P,h),Q!=r&&(s.e[o++]=Q,t.b[Q]=!0,t.c[Nt(t.f,P,h)]=!0);for(s.e[o++]=P,s.e[o++]=r,T=0;T<Ct(t.f,r);T++)Q=_(t.f,r,T),Q!=P&&(s.e[o++]=Q,t.b[Q]=!0,t.c[Nt(t.f,r,T)]=!0);for(l=0;l<R;l++)s.a[l]=l,s.b[l]=0,s.k[l]=1;t.b[P]=!0,t.b[r]=!0,t.c[D]=!0,CP(t.d,s)}for(i=0;i<t.f.s;i++)if(!t.c[i]&&dt(t.f,i)==2){for(e=c(F,m,6,t.f.r,15,1),l=0;l<2;l++)if(e[0]=K(t.f,l,i),e[1]=K(t.f,1-l,i),e0(t.f,e[0])==1&&e0(t.f,e[1])==2&&Ct(t.f,e[1])==2){t.b[e[0]]=!0,t.b[e[1]]=!0,t.c[i]=!0,j=1;do{if(C=_(t.f,e[j],0)==e[j-1]?1:0,e[j+1]=_(t.f,e[j],C),e0(t.f,e[j+1])==2&&Ct(t.f,e[j+1])>2)break;t.b[e[j+1]]=!0,t.c[Nt(t.f,e[j],C)]=!0,++j}while(e0(t.f,e[j])==2&&Ct(t.f,e[j])==2);for(R=Ct(t.f,e[0])+Ct(t.f,e[j])+j-1,s=new VP(t.f,R,!1),v=0;v<=j;v++)s.a[v]=v,s.b[v]=0,s.k[v]=64,s.e[v]=e[v];for(L=j+1,y=!1,b=0;b<Ct(t.f,e[0]);b++)Q=_(t.f,e[0],b),Q!=e[1]&&(s.a[L]=-.5,s.b[L]=y?w.Math.sin(fA):-w.Math.sin(fA),s.k[L]=64,s.e[L]=Q,++L,y=!0);for(y=!1,k=0;k<Ct(t.f,e[j]);k++)Q=_(t.f,e[j],k),Q!=e[j-1]&&(s.a[L]=j+.5,s.b[L]=y?-w.Math.sin(fA):w.Math.sin(fA),s.k[L]=64,s.e[L]=Q,++L,y=!0);CP(t.d,s)}}for(A=0;A<t.f.r;A++)if(Ct(t.f,A)==4){for(S=c(F,m,6,4,15,1),x=c(F,m,6,4,15,1),N=0,h=0;h<4;h++)S[N]=_(t.f,A,h),x[N]=Nt(t.f,A,h),Ct(t.f,S[N])==1&&!t.c[x[N]]&&++N;if(N==2){for(s=new VP(t.f,3,!1),l=0;l<2;l++)t.b[S[l]]=!0,t.c[x[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-.5,s.b[0]=.866,s.a[1]=.5,s.b[1]=.866,s.a[2]=0,s.b[2]=0,s.k[2]=32,s.e[2]=A,CP(t.d,s)}if(N==3){for(T=0;T<2;T++)dt(t.f,x[T])==1&&(a=S[T],S[T]=S[2],S[2]=a,a=x[T],x[T]=x[2],x[2]=a);for(s=new VP(t.f,4,!1),l=0;l<3;l++)t.b[S[l]]=!0,t.c[x[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-1,s.b[0]=0,s.a[1]=1,s.b[1]=0,s.a[2]=0,s.b[2]=1,s.a[3]=0,s.b[3]=0,s.k[3]=32,s.e[3]=A,CP(t.d,s)}}}function g1t(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt;if(Ri(t.c),t.d=null,ut(e,63),dt(e,A)!=1||A<e.i&&Ee(e.q,A)||X(e,e.F[0][A])==1||X(e,e.F[1][A])==1||(et=(e.G[A]&128)!=0,et&&(e.q&&A<e.i?TP(e.q,A):0)<6))return!1;for(P=c(Pt,it,6,e.g,16,1),t.a=0,C=0;C<2;C++){for(t.b[C]=e.F[C][A],t.e[C]=e.F[1-C][A];e0(e,t.b[C])==2&&P0(e,t.b[C])==2&&X(e,t.b[C])<10;)for(W=0;W<O(e,t.b[C]);W++)if(i=_(e,t.b[C],W),i!=t.e[C]&&e.D[i]!=1){if(e.k[i]==1||t.a==16)return!1;P[t.b[C]]=!0,t.e[C]=t.b[C],t.b[C]=i,++t.a;break}if($=P0(e,t.b[C]),$>4||$==1)return!1;P[t.b[C]]=!0}for(S=0;S<2;S++)for(W=0;W<O(e,t.b[S]);W++)i=_(e,t.b[S],W),e.D[i]!=1&&(P[i]=!0);for(t.g=c(F,m,6,e.g,15,1),L9(e,t.c,P,!0,t.g),x=0;x<t.g.length;x++)t.g[x]!=-1&&(t.i[t.g[x]]=x);if(ve(t.c,!0),et&&(r=o1(t.c,t.g[t.b[0]],t.g[t.b[1]]),r!=-1)){for(Xe(t.c,r,256,!0),Xt=(ut(e,7),e.q),ct=0;ct<Xt.j.a.length;ct++)if(Pf(Xt,ct,A)){for(N=0;N<2;N++)for(W=0;W<O(e,t.b[N]);W++)if(i=_(e,t.b[N],W),i!=t.e[N]&&wA(Xt,ct,i)&&e.D[i]!=1){Xe(t.c,o1(t.c,t.g[t.b[N]],t.g[i]),256,!0);break}}}for(tt=0;tt<2;tt++){for(xP(e,t.b[tt],!0)&&w1(t.c,t.g[t.b[tt]],d9,!0),D=!1,W=0;W<O(e,t.b[tt]);W++)i=_(e,t.b[tt],W),i!=t.e[tt]&&e.D[i]!=1&&(g=o1(t.c,t.g[t.b[tt]],t.g[i]),c1(t.c,g)==8?D=!0:e.D[i]==6&&!mn(e,t.b[tt])&&(T=i<e.g&&f0(e.q,i)?2:4,w1(t.c,t.g[i],T,!0)),f=Nt(e,t.b[tt],W),St=e.q&&f<e.i?TP(e.q,f):0,(St==3||St==4)&&Xe(t.c,g,St<<17,!0),(f<e.i&&Ee(e.q,f)||EA(e,t.b[tt],W)==2)&&($=P0(e,i),j=$==3,!j&&$==2&&(e.v[i]&gn)==0&&(j=ER(e,t.b[1-tt],f)!=-1),j?w1(t.c,t.g[i],R2,!0):f<e.i&&Ee(e.q,f)&&w1(t.c,t.g[i],j2,!0)),EA(e,t.b[tt],W)==1&&(P0(e,i)==4?w1(t.c,t.g[i],If,!0):e.D[i]==6&&w1(t.c,t.g[i],KA,!0)));D||(mn(e,t.b[tt])?w1(t.c,t.g[t.b[tt]],2,!0):w1(t.c,t.g[t.b[tt]],4,!0))}for(ut(t.c,191),R=0;R<2;R++)if(k=t.g[t.b[R]],v0(t.c,k)==3){if(v0(e,t.b[R])==3)return!1;a=lF(t.c,k),g0(t.c,a,257),K(t.c,0,a)!=k&&(mD(t.c,1,a,K(t.c,0,a)),mD(t.c,0,a,k)),ut(t.c,191)}if(s=t.g[t.b[0]],y=t.g[t.b[1]],wt=t.g[t.e[0]],rt=t.g[t.e[1]],Q=De(t.c,s),o=De(t.c,y),O8(t.c,s)&&O8(t.c,y)&&(Q!=0||o!=0)&&(Q!=o||OA(t.c,s)!=OA(t.c,y)))return!1;if(L=!1,O8(t.c,s)&&Q!=0&&(Ne(t.c,s,0,-1),L=!0),O8(t.c,y)&&o!=0&&(Ne(t.c,y,0,-1),L=!0),L&&ut(t.c,191),st=H0(t.c,s),ht=H0(t.c,y),st<ht&&(bt=t.b[0],t.b[0]=t.b[1],t.b[1]=bt,bt=t.e[0],t.e[0]=t.e[1],t.e[1]=bt,bt=s,s=y,y=bt,bt=wt,wt=rt,rt=bt),Y=!1,(O8(t.c,s)||O8(t.c,y))&&(O8(t.c,s)?Y=Rh(t.c,s)==1:O8(t.c,y)&&(Y=Rh(t.c,y)==1),Y)){for(n=0;n<t.c.r;n++)de(t.c,n,-mt(t.c,n));ut(t.c,191)}return l=sR(t,s,wt),h=sR(t,y,rt),t.f[0]=l==-1?-1:t.i[l],t.f[1]=h==-1?-1:t.i[h],H=ik(t.c),H==null?!1:(v=PR(t,s,wt),b=PR(t,y,rt),v==0&&b==0&&(t.c.J&GP)==q0?Qt=2:Qt=FE[v][b],A1=Qt==0?Y?\"<\":\">\":Qt==1?Y?\"-\":\"+\":Qt==3?\"=\":\"\",t.d=H+A1,!0)}function d1t(t,e){var A,n,P;s8();var r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1;for(v=new rp(e),T=new PM(e,v),D1=c(MS,DA,477,e.r,0,2),wt=1;wt<e.r;wt++)D1[wt]=c(MS,{4:1,5:1,8:1,478:1,477:1},84,wt,0,1);for(h=0;h<e.s;h++)Q=t9(e.F[0][h],e.F[1][h]),GQ(D1,Q,Q,v.a[h],10);for(s=0;s<e.g;s++)for(rt=1;rt<e.e[s];rt++)for(S=e.j[s][rt],tt=e.n[s][rt],g=v.a[tt],Qt=0;Qt<rt;Qt++)x=e.j[s][Qt],H=e.n[s][Qt],r=rt<Qt?T.a[s][Qt][rt]:T.a[s][rt][Qt],k=v.a[H],et=w.Math.sqrt(g*g+k*k-2*g*k*w.Math.cos(r)),yt=c(F,m,6,1,15,1),yt[0]=s,GQ(D1,t9(S,x),yt,et,5);for(l=0;l<e.s;l++)if(!(l<e.i&&Ee(e.q,l)||(e.G[l]&64)!=0&&(e.q&&l<e.i?TP(e.q,l):0)<=5)){for(Q=c(F,m,6,2,15,1),rt=0;rt<2;rt++)Q[rt]=e.F[rt][l];if(e.e[Q[0]]>1&&e.e[Q[1]]>1){if(dt(e,l)==3){for(et=v.a[l],S1=c(F,m,6,2,15,1),ct=0;ct<2;ct++)for(Qt=0;Qt<e.e[Q[ct]];Qt++)if(N=e.n[Q[ct]][Qt],N!=l){et+=v.a[N],S1[ct]=e.j[Q[ct]][Qt];break}yt=c(F,m,6,2,15,1),yt[0]=Q[0],yt[1]=Q[1],GQ(D1,t9(S1[0],S1[1]),yt,et,3)}else if(dt(e,l)==2&&e.p[Q[0]]==1&&e.p[Q[1]]==1&&(e.G[l]&3)!=3){for(C=c(F,u0,7,2,0,2),N=c(F,u0,7,2,0,2),R=c(Ut,c0,15,2,0,2),ct=0;ct<2;ct++){for(C[ct]=c(F,m,6,e.e[Q[ct]]-1,15,1),N[ct]=c(F,m,6,e.e[Q[ct]]-1,15,1),R[ct]=c(Ut,Tt,6,e.e[Q[ct]]-1,15,1),W=-1,Qt=0;Qt<e.e[Q[ct]];Qt++)if(e.j[Q[ct]][Qt]==Q[1-ct]){W=Qt;break}for(Y=0,bt=0;bt<e.e[Q[ct]];bt++)bt!=W&&(C[ct][Y]=e.j[Q[ct]][bt],N[ct][Y]=e.n[Q[ct]][bt],R[ct][Y]=Nu(T,Q[ct],W,bt),++Y)}for(Xt=0;Xt<C[0].length;Xt++)for(Qt=0;Qt<C[1].length;Qt++)St=(e.G[l]&3)==1,C[0].length==2&&C[0][Xt]>C[0][1-Xt]&&(St=!St),C[1].length==2&&C[1][Qt]>C[1][1-Qt]&&(St=!St),A=v.a[l]-v.a[N[0][Xt]]*w.Math.cos(R[0][Xt])-v.a[N[1][Qt]]*w.Math.cos(R[1][Qt]),n=v.a[N[0][Xt]]*w.Math.sin(R[0][Xt]),St?n+=v.a[N[1][Qt]]*w.Math.sin(R[1][Qt]):n-=v.a[N[1][Qt]]*w.Math.sin(R[1][Qt]),P=c(F,m,6,2,15,1),P[0]=e.F[0][l],P[1]=e.F[1][l],GQ(D1,t9(C[0][Xt],C[1][Qt]),P,w.Math.sqrt(A*A+n*n),3)}else if(dt(e,l)!=0){for(Jt=c(F,m,6,2,15,1),ct=0;ct<2;ct++)for(Qt=0;Qt<e.e[Q[ct]];Qt++)if(e.j[Q[ct]][Qt]==Q[1-ct]){Jt[ct]=Qt;break}for(Xt=0;Xt<e.e[Q[0]];Xt++)if(Xt!=Jt[0])for(Qt=0;Qt<e.e[Q[1]];Qt++)Qt!=Jt[1]&&(e.p[Q[0]]==0&&e.p[Q[1]]==0?ya(e.j[Q[0]][Xt],e.j[Q[1]][Qt],e.n[Q[0]][Xt],e.n[Q[1]][Qt],Nu(T,Q[0],Jt[0],Xt),Nu(T,Q[1],Jt[1],Qt),l,v,D1,e):b$(e.j[Q[0]][Xt],e.j[Q[1]][Qt],e.n[Q[0]][Xt],e.n[Q[1]][Qt],Nu(T,Q[0],Jt[0],Xt),Nu(T,Q[1],Jt[1],Qt),l,v,D1,e))}}}for(y=0;y<e.g;y++)if(e.p[y]==2&&e.k[y]==2&&e.o[y][0]==2&&e.o[y][1]==2){for(o=e.j[y][0],L=e.j[y][1],rt=0;rt<e.e[o];rt++)if(b=e.j[o][rt],b!=y)for(Qt=0;Qt<e.e[L];Qt++)j=e.j[L][Qt],j!=y&&(i=zm(T,o,y,b),f=zm(T,L,y,j),g=pr(v,e.n[o][rt]),k=pr(v,e.n[L][Qt]),$=pr(v,e.n[y][0])+pr(v,e.n[y][1])-g*w.Math.cos(i)-k*w.Math.cos(f),a=g*w.Math.sin(i),st=k*w.Math.sin(f),yt=c(F,m,6,2,15,1),yt[0]=o,yt[1]=L,GQ(D1,t9(b,j),yt,w.Math.sqrt($*$+a*a+st*st),3))}for(D=0;D<e.r;D++)J$(D1,D,e,v);for(RY(D1,e),ht=1;ht<e.r;ht++)for(A1=0;A1<ht;A1++)D1[ht][A1].a!=null&&t.a.push(D1[ht][A1])}function k6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$;Y=null,Q=null;try{if(t.f=null,t.j&&(Ri(t.j),ve(t.j,!1)),v=T=X1(e),v==null||(T=X1(e))==null||(T=X1(e))==null||(t.k=T.includes(\"From CSD data. Using bond type 'Any'\"),t.e=T.includes(\"From CSD data.\"),(T=X1(e))==null))return!1;t.g=!1,t.d=t.a;try{b=L1(k1((Mt(0,3,T.length),T.substr(0,3))),f1,Et),j=L1(k1((Mt(3,6,T.length),T.substr(3,3))),f1,Et),R=qr(k1((Mt(6,9,T.length),T.substr(6,3)))),t.d=t.d|qr(k1((Mt(12,15,T.length),T.substr(12,3))))==1,t.g=T.length>=39&&T.startsWith(\"V3000\",34)}catch(a){if(a=_1(a),Yt(a,19))return!1;throw At(a)}if(t.g)return S=Za(t,e),iu(t.j,v),S;if(!t.j&&(t.j=new SA(b,j)),iu(t.j,v),t.d||(t.j.M=!0),b==0){for(;T!=null&&!(e1(T,hr)||e1(T,Uo)||e1((zt(1,T.length+1),T.substr(1)),\"$\"));)T=X1(e);return!0}for(y=0;y<b;y++){if((T=X1(e))==null)return!1;A=(et=sn(k1((Mt(0,10,T.length),T.substr(0,10)))),W=sn(k1((Mt(10,20,T.length),T.substr(10,10)))),$=sn(k1((Mt(20,30,T.length),T.substr(20,10)))),te(t.j,et,-W,-$)),RX(t,A,T),k=qr(k1((Mt(34,36,T.length),T.substr(34,2)))),k!=0&&O9(t.j,A,(J1(),wr)[X(t.j,A)]+k),i=qr(k1((Mt(36,39,T.length),T.substr(36,3)))),i!=0&&(i==4?Je(t.j,A,32):b0(t.j,A,4-i)),g=T.length<63?0:qr(k1((Mt(60,63,T.length),T.substr(60,3)))),tA(t.j,A,g,!1),vW(t,A,T),H=T.length<51?0:qr(k1((Mt(48,51,T.length),T.substr(48,3)))),H!=0&&(Y==null&&(Y=c(F,m,6,b,15,1)),Y[A]=H)}for(l=0;l<j;l++){if((T=X1(e))==null)return!1;n=L1(k1((Mt(0,3,T.length),T.substr(0,3))),f1,Et)-1,P=L1(k1((Mt(3,6,T.length),T.substr(3,3))),f1,Et)-1,r=L1(k1((Mt(6,9,T.length),T.substr(6,3))),f1,Et),N=T.length<12?0:qr(k1((Mt(9,12,T.length),T.substr(9,3)))),tt=T.length<18?0:qr(k1((Mt(15,18,T.length),T.substr(15,3)))),r==8&&(t.k||Ae(t.j,n)||Ae(t.j,P))&&(r=9),bR(t,n,P,r,N,tt)}for(s=0;s<R;s++)if((T=X1(e))==null)return!1;if((T=X1(e))==null)return(t.i&1)!=0&&(t.f=Tu(t.j)),Db(t,Y),t.d||ut(t.j,15),!0;for(;T!=null&&!(e1(T,hr)||e1(T,Uo));)yW(t,T),lW(t,T),l_(t,T),D$(t,T),Q_(t,T),K_(t,T),HW(t,T),(T.startsWith(\"M  SAL\")&&T.length>=17||T.startsWith(\"M  SDT\")&&T.length>=12||T.startsWith(\"M  SED\")&&T.length>=12)&&(!Q&&(Q=new cP),x=(Mt(7,10,T.length),T.substr(7,3)),f=(h=x,t8(e9(Q,h))),f||(f=new tu,We(Q,x,f)),T.startsWith(\"M  SAL\")&&T.startsWith(\"  1\",10)?f.a=L1(k1((Mt(13,17,T.length),T.substr(13,4))),f1,Et):T.startsWith(\"M  SDT\")?f.b=(zt(11,T.length+1),T.substr(11)).startsWith(Sy):T.startsWith(\"M  SED\")&&(f.c=k1((zt(11,T.length+1),T.substr(11))))),T=X1(e)}catch(a){if(a=_1(a),Yt(a,19))return o=a,ur(o,(q1(),k9),\"\"),!1;throw At(a)}if(Q)for(D=(C=new oD(Q).a.ad().Tb(),new UD(C));D.a.cd();)f=(L=D.a.dd(),L.jd()),f.b&&f.a!=0&&f.c!=null&&IP(t.j,f.a-1,f.c);return t.e&&(t_(t),y$(t)),(t.i&1)!=0&&(t.f=Tu(t.j)),Db(t,Y),ut(t.j,15),!0}function PM(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C;for(this.b=e,this.e=t,this.a=c(Oe,DA,480,this.e.g,0,3),P=0;P<this.e.g;P++)for(this.a[P]=c(Oe,{480:1,4:1,9:1,5:1,8:1},46,Ct(this.e,P),0,2),D=1;D<Ct(this.e,P);D++)this.a[P][D]=c(Oe,uA,6,D,15,1);for(this.c=c(F,m,6,this.e.g,15,1),this.d=c(Oe,uA,6,this.e.g,15,1),this.f=c(F,m,6,this.e.i,15,1),R=kn(this.e),s=c(Pt,it,6,R.j.a.length,16,1),Py(R,s,c(Pt,it,6,R.j.a.length,16,1),c(F,m,6,R.j.a.length,15,1),!0),f=3;f<=7;f++)for(g=0;g<R.j.a.length;g++)C=G(R.k,g).length,C==f&&(s[g]?Ett(this,g):C<=4&&_Z(this,g));for(L=c(Pt,it,6,this.e.g,16,1),T=0;T<R.j.a.length;T++)if(s[T])for(v=G(R.j,T),b=0,j=v.length;b<j;++b)k=v[b],L[k]=!0;for(r=B(d(F,1),m,6,15,[0,0,1,3,6,10,15,21]),n=0;n<this.e.g;n++){if(i=Ct(this.e,n),i>4){for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=D4;this.c[n]=r[i];continue}if(this.c[n]!=r[i])if(pU(this.e,n)&&(L[n]||Or(this.e,n)<=4&&e0(this.e,n)>0)){if(i>2){if(this.c[n]==1)X(this.e,n)<=14?A=(CM-this.d[n])/2:A=HM+(HM-this.d[n])*.18000000715255737;else if(A=CM-this.d[n],i>3){if(this.c[n]==2){for(y=c(Pt,it,6,Ct(this.e,n),16,1),Q=1;Q<i;Q++)for(h=0;h<Q;h++)this.a[n][Q][h]!=0&&(y[Q]=!y[Q],y[h]=!y[h]);for(o=0;o<i;o++)if(y[o]){for(h=o+1;h<i;h++)if(y[h]){this.a[n][h][o]=A;break}break}}A=D4}for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]==0&&(this.a[n][D][l]=A)}}else if(pU(this.e,n)&&Or(this.e,n)<=4)switch(XX(this,n)){case 771:y0(this,n,0,3,2.0653998851776123),y0(this,n,0,0,1.9814722631346626);break;case 1028:y0(this,n,0,4,1.9797999858856201),y0(this,n,0,0,1.94691481878138);break;case 393987:y0(this,n,0,3,VM),y0(this,n,0,6,VM),y0(this,n,3,3,1.7229016938441077);break;case 459779:y0(this,n,0,3,u4),y0(this,n,0,4,u4),y0(this,n,0,7,u4),y0(this,n,3,4,1.9322539839360076);break;case 525316:y0(this,n,0,4,EM),y0(this,n,0,8,EM),y0(this,n,4,4,1.99944913298566);case 394758:y0(this,n,0,6,2.526099920272827);break;case 460550:y0(this,n,0,6,SM),y0(this,n,0,7,SM);break;case 526087:y0(this,n,0,7,IM),y0(this,n,0,8,IM);break;case 526344:y0(this,n,0,8,2.186300039291382);break;case 50529027:y0(this,n,3,3,2.4189000129699707);break;case 67371779:y0(this,n,3,4,2.2298998832702637);break;case 67372036:y0(this,n,4,4,2.094399929046631);break;case 101057283:y0(this,n,3,6,1.839926051241747),y0(this,n,3,3,2.9061476191098734);break;case 117834755:y0(this,n,3,4,2.812249087174905),y0(this,n,3,7,1.7910569124592968),y0(this,n,4,6,2.1224948975613245);break;case 134677507:y0(this,n,3,4,2.642428360523752),y0(this,n,3,8,2.027723514585844),y0(this,n,4,7,2.251474717631936);break;case 117900035:y0(this,n,3,7,2.109753935530918),y0(this,n,3,3,3.1052897491356646);break;case 117900292:y0(this,n,4,7,2.090729910747413),y0(this,n,4,4,2.551671293386306);break;case 134743044:y0(this,n,4,8,2.139250042271712),y0(this,n,4,4,2.3520055858942612)}else for(A=X(this.e,n)>10?xM:e0(this.e,n)==2?S2:xP(this.e,n,!0)?NM:e0(this.e,n)==0?xM:NM,D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=A}}function B1t(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;for(t.A=e,t.a=A,L=Bt(w.Math.round((Re==-1&&(Re=globalThis.devicePixelRatio||1),Re*8))),s=B(d(F,1),m,6,15,[L,L/2|0,L*3/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L*3/2|0,L/4|0,L/2|0,L/2|0,L/4|0]),y=B(d(F,1),m,6,15,[L*3/2|0,L/2|0]),l=B(d(F,1),m,6,15,[L,-2,L,-2,L]),j=c(F,m,6,1+2*s.length+(n?2*y.length:0),15,1),T=0,i=s,D=0,o=i.length;D<o;++D)P=i[D],j[T++]=P,j[T++]=-2;if(n)for(r=y,f=0,Q=r.length;f<Q;++f)P=r[f],j[T++]=P,j[T++]=-2;for(j[T++]=L,iL(t.v,l,j),t.b=Un(t.v,\"Any atomic number\"),YP(t.b,t),ke(t.v,t.b,1,1,3,1),t.w=he(t.v,k4),t.D=$u(t.v,16,1),D0(t.v,t.w,1,3),D0(t.v,t.D,3,3),t.g=TA(t.v),Gt(t.g,j8),Gt(t.g,\"is aromatic\"),Gt(t.g,\"is hetero-aromatic\"),Gt(t.g,\"is not aromatic\"),D0(t.v,he(t.v,\"Aromaticity:\"),1,5),D0(t.v,t.g,3,5),t.s=TA(t.v),Gt(t.s,j8),Gt(t.s,\"0 (not in a ring)\"),Gt(t.s,\"0 or 2 (0 or 1 ring)\"),Gt(t.s,\">=2 (any ring count)\"),Gt(t.s,\"2 (in 1 ring)\"),Gt(t.s,\"3 (bridge head; 2 rings)\"),Gt(t.s,\">3 (in more than 2 rings)\"),D0(t.v,he(t.v,\"Ring bonds:\"),1,7),D0(t.v,t.s,3,7),t.t=TA(t.v),Gt(t.t,j8),Gt(t.t,\"3 members\"),Gt(t.t,\"4 members\"),Gt(t.t,\"5 members\"),Gt(t.t,\"6 members\"),Gt(t.t,\"7 members\"),D0(t.v,he(t.v,\"Smallest ring size:\"),1,9),D0(t.v,t.t,3,9),t.r=TA(t.v),k=HE,v=0,b=k.length;v<b;++v)g=k[v],Gt(t.r,g);for(D0(t.v,he(t.v,\"Any ring size:\"),1,11),D0(t.v,t.r,3,11),t.i=TA(t.v),Gt(t.i,j8),Gt(t.i,\"not charged\"),Gt(t.i,\"has negative charge\"),Gt(t.i,\"has positive charge\"),D0(t.v,he(t.v,\"Charge:\"),1,13),D0(t.v,t.i,3,13),t.n=TA(t.v),Gt(t.n,j8),Gt(t.n,$y),Gt(t.n,ay),Gt(t.n,\"exactly 3\"),Gt(t.n,m4),Gt(t.n,XV),Gt(t.n,tl),Gt(t.n,b4),Gt(t.n,j4),Gt(t.n,ZV),Gt(t.n,R4),Gt(t.n,\"1,2, or 3\"),Gt(t.n,\"2 or 3\"),D0(t.v,he(t.v,\"Non-H neighbours:\"),1,15),D0(t.v,t.n,3,15),t.j=TA(t.v),Gt(t.j,j8),Gt(t.j,\"exactly 0\"),Gt(t.j,$y),Gt(t.j,ay),Gt(t.j,\"exactly 3\"),Gt(t.j,WV),Gt(t.j,m4),Gt(t.j,XV),Gt(t.j,tl),Gt(t.j,b4),Gt(t.j,j4),Gt(t.j,ZV),Gt(t.j,R4),Gt(t.j,\"1,2, or 3\"),Gt(t.j,\"2 or 3\"),D0(t.v,he(t.v,\"Electroneg. neighbours:\"),1,17),D0(t.v,t.j,3,17),t.k=TA(t.v),Gt(t.k,j8),Gt(t.k,\"none\"),Gt(t.k,$y),Gt(t.k,ay),Gt(t.k,tl),Gt(t.k,b4),Gt(t.k,j4),Gt(t.k,WV),Gt(t.k,m4),Gt(t.k,R4),D0(t.v,he(t.v,\"Hydrogen count:\"),1,19),D0(t.v,t.k,3,19),t.p=TA(t.v),Gt(t.p,j8),Gt(t.p,\"none\"),Gt(t.p,$y),Gt(t.p,ay),Gt(t.p,tl),D0(t.v,he(t.v,\"Pi-electron count:\"),1,21),D0(t.v,t.p,3,21),t.o=TA(t.v),Gt(t.o,j8),h=1;h<15;h++)Gt(t.o,\"\"+(h-7));D0(t.v,he(t.v,\"Oxidation state:\"),1,23),D0(t.v,t.o,3,23),t.c=Un(t.v,\"prohibit further substitution\"),YP(t.c,t),ke(t.v,t.c,1,25,3,25),t.f=Un(t.v,\"require further substitution\"),YP(t.f,t),ke(t.v,t.f,1,27,3,27),t.u=TA(t.v),Gt(t.u,j8),Gt(t.u,\"is a stereo center\"),Gt(t.u,\"is not a stereo center\"),D0(t.v,he(t.v,\"Stereo center:\"),1,29),D0(t.v,t.u,3,29),t.e=Un(t.v,\"match stereo center\"),ke(t.v,t.e,1,31,3,31),t.d=Un(t.v,\"is part of exclude group\"),ke(t.v,t.d,1,33,3,33),n&&(ke(t.v,he(t.v,\"Stereo center hint for product:\"),1,35,3,35),t.q=TA(t.v),Gt(t.q,\"Copy from generic product\"),Gt(t.q,\"Keep reactant configuration\"),Gt(t.q,\"Invert reactant configuration\"),Gt(t.q,\"Racemise configuration\"),ke(t.v,t.q,1,37,3,37)),ut(t.A,31),s1t(t)}function rM(){var t,e,A,n;for(this.b=c(wE,A0,18,120,0,1),this.c=new Jn,this.d=new Jn,_4=B(d(wE,1),A0,18,0,[new It(1,\"Hydrogen\",\"H\",2.2),new It(2,\"Helium\",\"He\",0),new It(3,\"Lithium\",\"Li\",.98),new It(4,\"Beryllium\",\"Be\",1.57),new It(5,\"Boron\",\"B\",2.04),new It(6,\"Carbon\",\"C\",2.55),new It(7,\"Nitrogen\",\"N\",3.04),new It(8,\"Oxygen\",\"O\",3.44),new It(9,\"Fluorine\",\"F\",3.98),new It(10,\"Neon\",\"Ne\",0),new It(11,\"Sodium\",\"Na\",.93),new It(12,\"Magnesium\",\"Mg\",1.31),new It(13,\"Aluminum\",\"Al\",1.61),new It(14,\"Silicon\",\"Si\",1.9),new It(15,\"Phosphorus\",\"P\",2.19),new It(16,\"Sulfur\",\"S\",2.58),new It(17,\"Chlorine\",\"Cl\",3.16),new It(18,\"Argon\",\"Ar\",0),new It(19,\"Potassium\",\"K\",1),new It(20,\"Calcium\",\"Ca\",1.36),new It(21,\"Scandium\",\"Sc\",1.54),new It(22,\"Titanium\",\"Ti\",1.63),new It(23,\"Vanadium\",\"V\",1.66),new It(24,\"Chromium\",\"Cr\",1.55),new It(25,\"Manganese\",\"Mn\",1.83),new It(26,\"Iron\",\"Fe\",1.88),new It(27,\"Cobalt\",\"Co\",1.91),new It(28,\"Nickel\",\"Ni\",1.9),new It(29,\"Copper\",\"Cu\",1.65),new It(30,\"Zinc\",\"Zn\",1.81),new It(31,\"Gallium\",\"Ga\",2.01),new It(32,\"Germanium\",\"Ge\",0),new It(33,\"Arsenic\",\"As\",2.18),new It(34,\"Selenium\",\"Se\",2.55),new It(35,\"Bromine\",\"Br\",0),new It(36,\"Krypton\",\"Kr\",2.96),new It(37,\"Rubidium\",\"Rb\",0),new It(38,\"Strontium\",\"Sr\",.82),new It(39,\"Yttrium\",\"Y\",.95),new It(40,\"Zirconium\",\"Zr\",1.22),new It(41,\"Niobium\",\"Nb\",1.33),new It(42,\"Molybdenum\",\"Mo\",1.6),new It(43,\"Technetium\",\"Tc\",2.16),new It(44,\"Ruthenium\",\"Ru\",1.9),new It(45,\"Rhodium\",\"Rh\",2.2),new It(46,\"Palladium\",\"Pd\",2.28),new It(47,\"Silver\",\"Ag\",2.2),new It(48,\"Cadmium\",\"Cd\",1.93),new It(49,\"Indium\",\"In\",1.69),new It(50,\"Tin\",\"Sn\",1.78),new It(51,\"Antimony\",\"Sb\",1.96),new It(52,\"Tellurium\",\"Te\",0),new It(53,\"Iodine\",\"I\",2.05),new It(54,\"Xenon\",\"Xe\",2.1),new It(55,\"Cesium\",\"Cs\",2.66),new It(56,\"Barium\",\"Ba\",2.6),new It(57,\"Lanthanum\",\"La\",.79),new It(58,\"Cerium\",\"Ce\",.89),new It(59,\"Praesodymium\",\"Pr\",1.1),new It(60,\"Neodymium\",\"Nd\",1.12),new It(61,\"Promethium\",\"Pm\",1.13),new It(62,\"Samarium\",\"Sm\",1.14),new It(63,\"Europium\",\"Eu\",0),new It(64,\"Gadolinium\",\"Gd\",1.17),new It(65,\"Terbium\",\"Tb\",0),new It(66,\"Dyprosium\",\"Dy\",1.2),new It(67,\"Holmium\",\"Ho\",0),new It(68,\"Erbium\",\"Er\",1.22),new It(69,\"Thulium\",\"Tm\",1.23),new It(70,\"Ytterbium\",\"Yb\",1.24),new It(71,\"Lutetium\",\"Lu\",1.25),new It(72,\"Hafnium\",\"Hf\",0),new It(73,\"Tantalium\",\"Ta\",1.27),new It(74,\"Wolfram\",\"W\",1.3),new It(75,\"Rhenium\",\"Re\",1.5),new It(76,\"Osmium\",\"Os\",2.36),new It(77,\"Iridium\",\"Ir\",1.9),new It(78,\"Platinum\",\"Pt\",2.2),new It(79,\"Gold\",\"Au\",2.2),new It(80,\"Mercury\",\"Hg\",2.28),new It(81,\"Thallium\",\"Tl\",2.54),new It(82,\"Lead\",\"Pb\",2),new It(83,\"Bismuth\",\"Bi\",1.62),new It(84,\"Polonium\",\"Po\",2.33),new It(85,\"Astatine\",\"At\",2.02),new It(86,\"Radon\",\"Rn\",2),new It(87,\"Francium\",\"Fr\",2.2),new It(88,\"Radium\",\"Ra\",0),new It(89,\"Actinium\",\"Ac\",.7),new It(90,\"Thorium\",\"Th\",.89),new It(91,\"Protactinium\",\"Pa\",1.1),new It(92,\"Uranium\",\"U\",1.3),new It(93,\"Neptunium\",\"Np\",1.5),new It(94,\"Plutonium\",\"Pu\",1.38),new It(95,\"Americium\",\"Am\",1.36),new It(96,\"Curium\",\"Cm\",1.28),new It(97,\"Berkelium\",\"Bk\",1.3),new It(98,\"Californium\",\"Cf\",1.3),new It(99,\"Einsteinium\",\"E\",1.3),new It(100,\"Fermium\",\"Fm\",1.3),new It(101,\"Mendelevium\",\"Mv\",1.3)]),e=_4,A=0,n=e.length;A<n;++A)t=e[A],this.b[t.c]=t,qD(this.c,t.b,t),qD(this.d,t.d.toLowerCase(),t);this.a=c(Pt,it,6,_4.length,16,1),this.a[3]=!0,this.a[11]=!0,this.a[19]=!0,this.a[37]=!0,this.a[55]=!0,this.a[87]=!0}function v1t(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1,F1,T0,Y0,ZA,M0,B1,Ue,$e,kA,kr,M8,sP,yP,rn,mr,Kn,fn;for(S=ph(t.c,n),B1=new _A,h=0,T=0,Kn=null,ht=0;ht<t.o.length;ht++){for(x=C9(t.c,ht),ut(t.o[ht],1),m1=G(e[ht],A[ht]),l0=c(F,m,6,t.o[ht].g,15,1),v=c(Pt,it,6,t.o[ht].g,16,1),b=c(Pt,it,6,t.o[ht].i,16,1),Qt=0;Qt<x.g;Qt++)if(m1[Qt]!=-1)if(w.Math.abs(x.A[Qt])==0){for(j=m1[Qt],v[j]=!0,pt=0;pt<O(t.o[ht],j);pt++)b[Nt(t.o[ht],j,pt)]=!0;for(Lt=Ct(t.o[ht],j);Lt<Le(t.o[ht],j);Lt++)b[Nt(t.o[ht],j,Lt)]=!0}else l0[m1[Qt]]=w.Math.abs(x.A[Qt]);for(bt=0;bt<x.i;bt++)if(L=x.F[0][bt],s=x.F[1][bt],w.Math.abs(x.A[L])!=0&&w.Math.abs(x.A[s])!=0&&(f=m1[L],D=m1[s],f!=-1&&D!=-1)){for(Lt=0;Lt<t.o[ht].i;Lt++)if(K(t.o[ht],0,Lt)==f&&K(t.o[ht],1,Lt)==D||K(t.o[ht],0,Lt)==D&&K(t.o[ht],1,Lt)==f){b[Lt]=!0;break}}for(Y0=c(F,m,6,t.o[ht].g,15,1),yt=0;yt<t.o[ht].g;yt++)if(!v[yt]&&(Y0[yt]=Nn(t.o[ht],B1,yt,h,T),t.b&&tA(B1,Y0[yt],t.p[ht][A[ht]][yt],!1),l0[yt]!=0)){for(tA(B1,Y0[yt],l0[yt],!1),Lt=0;Lt<S.g;Lt++)if(w.Math.abs(S.A[Lt])==l0[yt]){if(b0(B1,Y0[yt],S.t[Lt]),Je(B1,Y0[yt],S.v[Lt]&48),t.f[n][Lt])if(M0=v0(t.o[ht],yt),$e=V(S.C[Lt],k8),z($e,0)==0)me(B1,Y0[yt],3,!1);else if(z($e,k8)==0)!Kn&&(Kn=new n1),Ft(Kn,U1(Y0[yt]));else if(M0==1||M0==2){for(rt=z($e,Fo)==0,U0=0;U0<O(t.o[ht],yt);U0++)if(y=_(t.o[ht],yt,U0),v[y])for(V1=0;V1<O(t.o[ht],yt);V1++)ZA=_(t.o[ht],yt,V1),!v[ZA]&&ZA>y&&(rt=!rt);rt&&(M0=M0==1?2:1),me(B1,Y0[yt],M0,!1)}else me(B1,Y0[yt],0,!1);break}}for(Jt=0;Jt<t.o[ht].i;Jt++)b[Jt]||yQ(t.o[ht],B1,Jt,h,T,Y0,!0);h=ne(B1,1),T=ne(B1,2)}for(T0=c(F,m,6,S.g,15,1),S1=0;S1<S.g;S1++)if(l0=w.Math.abs(S.A[S1]),l0==0)T0[S1]=Nn(S,B1,S1,h,T);else for(Lt=0;Lt<B1.r;Lt++)if(w.Math.abs(B1.A[Lt])==l0){T0[S1]=Lt;break}if(t.r)for(Qt=0;Qt<S.g;Qt++)Wn(B1,T0[Qt],!0),de(B1,T0[Qt],S.K[Qt].a),Ve(B1,T0[Qt],S.K[Qt].b);for(N=0;N<S.i;N++)if((S.H[N]&d8)==0&&(Ue=o9(S,B1,N,h,T,T0[S.F[0][N]],T0[S.F[1][N]],!1),kA=S.H[N]&31,kA!=0))for(C=!1,Xe(B1,Ue,31,!1),tt=M1(S,S.F[0][N]),H=M1(S,S.F[1][N]),st=0;!C&&st<t.c.g.a.length;st++)for(x=C9(t.c,st),W=0;!C&&W<x.i;W++)Y=x.F[0][W],et=x.F[1][W],$=w.Math.abs(x.A[Y]),a=w.Math.abs(x.A[et]),$!=0&&a!=0&&($==tt&&a==H||$==H&&a==tt)&&(C=!0,fn=x.H[W]&31,fn!=0&&(m1=G(e[st],A[st]),M8=m1[Y],sP=m1[et],yP=o1(t.o[st],M8,sP),mr=c1(t.o[st],yP),rn=dt(t.o[st],yP),fn&=7,kA&=7,fn==3&&kA==6?(B1.I[Ue]=rn<=1?2:4,B1.U=0):fn==6&&kA==3?(B1.I[Ue]=rn==3?2:1,B1.U=0):(B1.I[Ue]=mr,B1.U=0)));for(ut(B1,1),g=!1,D1=0;D1<S.g;D1++)w.Math.abs(S.A[D1])==0?(M0=A6(S,D1,T0),me(B1,T0[D1],M0,!1)):t.f[n][D1]&&u_(t,S,D1,B1,T0[D1])&&(M0=A6(S,D1,T0),me(B1,T0[D1],M0,!1),(M0==1||M0==2)&&(k=(S.v[D1]&b1)>>18,l=(S.v[D1]&b1)>>18!=1&&(S.v[D1]&b1)>>18!=2?-1:(S.v[D1]&VA)>>20,k==1?l+=h:k==2&&(l+=T),Ne(B1,T0[D1],k,l),g=!0));for(g&&(h=ne(B1,1),T=ne(B1,2)),kr=c(Pt,it,6,S.r,16,1),Q1=0;Q1<S.g;Q1++)t.f[n][Q1]&&!kr[Q1]&&(S.v[Q1]&4)!=0&&n0(V(S.C[Q1],k8),0)&&S.k[Q1]==B1.k[T0[Q1]]&&H_(S,Q1,B1,T0);for(wt=c(Pt,it,6,B1.r,16,1),Xt=T0,St=0,A1=Xt.length;St<A1;++St)ct=Xt[St],wt[ct]=!0;for(R=!0;R;)for(R=!1,o=0;o<B1.s;o++)f=B1.F[0][o],D=B1.F[1][o],wt[f]&&!wt[D]?(wt[D]=!0,R=!0):wt[D]&&!wt[f]&&(wt[f]=!0,R=!0);for(i=0;i<B1.r;i++)vP(B1,i,!wt[i]);if(UQ(B1),!t.b)for(Q=0;Q<B1.r;Q++)B1.A[Q]=0;if(jf(new p9(B1),null,!1),B1.U|=8,F1=2|(t.r?8:0),U9(new a8(F1),B1),Kn)for(ut(B1,15),r=new Zt(Kn);r.a<r.c.a.length;)P=_t(r).a,(B1.v[P]&wn)!=0&&(me(B1,P,1,!1),Ne(B1,P,1,h++));return B1}function F1t(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;switch(t.hb=e.g,t.kb=e.i,t.w){case 18:if(y=t.hb,l=t.kb,t.e=tn(t.V,t.hb,t.kb),t.e!=-1&&(t.hb=mt(t.V,t.e),t.kb=Rt(t.V,t.e)),Nb(t.V,y,l),t.I)for(f=new Zt(t.I);f.a<f.c.a.length;)i=_t(f),i.Qb(y,l);K1(t),t.X=7;break;case 2:if(t.X=0,t.e=tn(t.V,t.hb,t.kb),t.e!=-1&&(t.f=-1,t.hb=mt(t.V,t.e),t.kb=Rt(t.V,t.e),i0(t.V,t.e)?t.X=t.Z?9:4:t.X=3),t.X==0&&(P=kf(t.V,t.hb,t.kb),P!=-1&&(t.e=K(t.V,0,P),t.f=K(t.V,1,P),bP(t.V,P)?t.X=t.Z?9:4:t.X=3)),t.X==0&&t.v&&(t.v.g?t.X=t.Z?9:4:t.X=t.Z&&!Yt(t.v,64)?11:10),t.X!=0){for(t.gb=c(Ut,Tt,6,t.V.r,15,1),t.jb=c(Ut,Tt,6,t.V.r,15,1),D=0;D<t.V.r;D++)t.gb[D]=mt(t.V,D),t.jb[D]=Rt(t.V,D);if(t.I)for(f=new Zt(t.I);f.a<f.c.a.length;)i=_t(f),QY(i,t.hb,t.kb);K1(t);break}if(e.a?t.X=6:(t.R=new QF,Ie(t.R,t.hb,t.kb),Ie(t.R,t.hb,t.kb),t.X=5),t.P=c(Pt,it,6,t.V.r,16,1),t.I&&(t.Q=c(Pt,it,6,t.I.a.length,16,1)),t.O=e.f,t.O){for(Q=0;Q<t.V.r;Q++)t.P[Q]=i0(t.V,Q);if(t.I)for(D=0;D<t.I.a.length;D++)t.Q[D]=G(t.I,D).g}else{for(L=!1,Q=0;Q<t.V.r;Q++)i0(t.V,Q)&&(vP(t.V,Q,!1),L=!0);if(t.I)for(D=0;D<t.I.a.length;D++)G(t.I,D).g&&(G(t.I,D).g=!1,L=!0);L&&(t.eb=1,P1(t.k))}break;case 4:K1(t),FX(t,t.hb,t.kb);break;case 3:s=tn(t.V,t.hb,t.kb),s!=-1&&(K1(t),rL(t.V,s,!E9(t.V,s)),t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)));break;case 101:case 103:case 102:t.u!=-1&&tO(t,t.u)&&(K1(t),Qtt(t,t.u,t.w==101?0:t.w==103?1:2),t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)));break;case 5:case 6:case 23:if(t.e=tn(t.V,t.hb,t.kb),t.e==-1){if(n=kf(t.V,t.hb,t.kb),n!=-1){K1(t),r=511,t.w==6?r=257:t.w==23&&(r=129),h8(t.V,n,r)&&(t.eb=w.Math.max(t.eb,1),P1(t.k),N1(t,new x1(t,1,!0)));break}}else{if(Le(t.V,t.e)==8)return;t.hb=mt(t.V,t.e),t.kb=Rt(t.V,t.e)}t.X=1,L6(t,t.e),P1(t.k);break;case 22:if(t.e=tn(t.V,t.hb,t.kb),t.e!=-1){if(Le(t.V,t.e)==8)return;t.hb=mt(t.V,t.e),t.kb=Rt(t.V,t.e)}t.X=2,t.q=0;break;case 7:K1(t),wf(t.V,t.hb,t.kb,3,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 24:K1(t),wf(t.V,t.hb,t.kb,4,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 8:K1(t),wf(t.V,t.hb,t.kb,5,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 25:K1(t),wf(t.V,t.hb,t.kb,6,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 9:K1(t),wf(t.V,t.hb,t.kb,7,!1,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 26:K1(t),wf(t.V,t.hb,t.kb,6,!0,Qn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 10:K1(t),Pv(t.V,t.hb,t.kb,!0)&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 27:K1(t),Pv(t.V,t.hb,t.kb,!1)&&(t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0)));break;case 16:y8(t,1);break;case 11:y8(t,6);break;case 12:y8(t,7);break;case 13:y8(t,8);break;case 28:y8(t,14);break;case 29:y8(t,15);break;case 30:y8(t,16);break;case 14:y8(t,9);break;case 31:y8(t,17);break;case 15:y8(t,35);break;case 32:y8(t,53);break;case 33:e.d||e.a?(A=tn(t.V,t.hb,t.kb),A!=-1&&Hk(t,A,new AU)):(K1(t),o5(t.V,t.hb,t.kb,t.F,t.B,t.D,t.C,t.A)&&(t.t=-1,t.eb=w.Math.max(t.eb,3),P1(t.k),N1(t,new x1(t,1,!0))));break;case 19:t.e=tn(t.V,t.hb,t.kb),t.e!=-1&&t.e<t.V.g&&(!t.V.L||!ye(t.V,t.e))&&(t.hb=mt(t.V,t.e),t.kb=Rt(t.V,t.e),t.X=8);break;case 21:o=null,t.v?Yt(t.v,95)&&(o=t.v):(o=new dU,ld(o,t.hb,t.kb),Ft(t.I,o)),rG(t,o,new n7(t))}}function sy(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct;for(this.c=t.length,this.d=t[0].length,H=w.Math.min(this.c,this.d),this.e=c(Ut,Tt,6,w.Math.min(this.c+1,this.d),15,1),this.a=j1(Ut,[c0,Tt],[15,6],15,[this.c,H],2),this.b=j1(Ut,[c0,Tt],[15,6],15,[this.d,this.d],2),P=c(Ut,Tt,6,this.d,15,1),ct=c(Ut,Tt,6,this.c,15,1),N=w.Math.min(this.c-1,this.d),tt=w.Math.max(0,w.Math.min(this.d-2,this.c)),j=0;j<w.Math.max(N,tt);j++){if(j<N){for(this.e[j]=0,L=j;L<this.c;L++)this.e[j]=Q2(this.e[j],t[L][j]);if(this.e[j]!=0){for(t[j][j]<0&&(this.e[j]=-this.e[j]),o=j;o<this.c;o++)t[o][j]/=this.e[j];t[j][j]+=1}this.e[j]=-this.e[j]}for(T=j+1;T<this.d;T++){if(j<N&this.e[j]!=0){for(rt=0,L=j;L<this.c;L++)rt+=t[L][j]*t[L][T];for(rt=-rt/t[j][j],o=j;o<this.c;o++)t[o][T]+=rt*t[o][j]}P[T]=t[j][T]}if(!0&j<N)for(o=j;o<this.c;o++)this.a[o][j]=t[o][j];if(j<tt){for(P[j]=0,L=j+1;L<this.d;L++)P[j]=Q2(P[j],P[L]);if(P[j]!=0){for(P[j+1]<0&&(P[j]=-P[j]),s=j+1;s<this.d;s++)P[s]/=P[j];P[j+1]+=1}if(P[j]=-P[j],j+1<this.c&P[j]!=0){for(s=j+1;s<this.c;s++)ct[s]=0;for(g=j+1;g<this.d;g++)for(y=j+1;y<this.c;y++)ct[y]+=P[g]*t[y][g];for(k=j+1;k<this.d;k++)for(rt=-P[k]/P[j+1],y=j+1;y<this.c;y++)t[y][k]+=rt*ct[y]}for(o=j+1;o<this.d;o++)this.b[o][j]=P[o]}}for(Y=w.Math.min(this.d,this.c+1),N<this.d&&(this.e[N]=t[N][N]),this.c<Y&&(this.e[Y-1]=0),tt+1<Y&&(P[tt]=t[tt][Y-1]),P[Y-1]=0,v=N;v<H;v++){for(o=0;o<this.c;o++)this.a[o][v]=0;this.a[v][v]=1}for(R=N-1;R>=0;R--)if(this.e[R]!=0){for(h=R+1;h<H;h++){for(rt=0,L=R;L<this.c;L++)rt+=this.a[L][R]*this.a[L][h];for(rt=-rt/this.a[R][R],s=R;s<this.c;s++)this.a[s][h]+=rt*this.a[s][R]}for(y=R;y<this.c;y++)this.a[y][R]=-this.a[y][R];for(this.a[R][R]=1+this.a[R][R],o=0;o<R-1;o++)this.a[o][R]=0}else{for(o=0;o<this.c;o++)this.a[o][R]=0;this.a[R][R]=1}for(C=this.d-1;C>=0;C--){if(C<tt&P[C]!=0)for(h=C+1;h<H;h++){for(rt=0,L=C+1;L<this.d;L++)rt+=this.b[L][C]*this.b[L][h];for(rt=-rt/this.b[C+1][C],s=C+1;s<this.d;s++)this.b[s][h]+=rt*this.b[s][C]}for(o=0;o<this.d;o++)this.b[o][C]=0;this.b[C][C]=1}for(et=Y-1,l=0,f=w.Math.pow(2,-52);Y>0;){for(b=Y-2;b>=-1&&b!=-1;b--)if(w.Math.abs(P[b])<=f*(w.Math.abs(this.e[b])+w.Math.abs(this.e[b+1]))){P[b]=0;break}if(b==Y-2)S=4;else{for(x=Y-1;x>=b&&x!=b;x--)if(rt=(x!=Y?w.Math.abs(P[x]):0)+(x!=b+1?w.Math.abs(P[x-1]):0),w.Math.abs(this.e[x])<=f*rt){this.e[x]=0;break}x==b?S=3:x==Y-1?S=1:(S=2,b=x)}switch(++b,S){case 1:for(D=P[Y-2],P[Y-2]=0,h=Y-2;h>=b;h--)for(rt=Q2(this.e[h],D),n=this.e[h]/rt,st=D/rt,this.e[h]=rt,h!=b&&(D=-st*P[h-1],P[h-1]=n*P[h-1]),o=0;o<this.d;o++)rt=n*this.b[o][h]+st*this.b[o][Y-1],this.b[o][Y-1]=-st*this.b[o][h]+n*this.b[o][Y-1],this.b[o][h]=rt;break;case 2:for(D=P[b-1],P[b-1]=0,h=b;h<Y;h++)for(rt=Q2(this.e[h],D),n=this.e[h]/rt,st=D/rt,this.e[h]=rt,D=-st*P[h],P[h]=n*P[h],o=0;o<this.c;o++)rt=n*this.a[o][h]+st*this.a[o][b-1],this.a[o][b-1]=-st*this.a[o][h]+n*this.a[o][b-1],this.a[o][h]=rt;break;case 3:{for(W=w.Math.max(w.Math.max(w.Math.max(w.Math.max(w.Math.abs(this.e[Y-1]),w.Math.abs(this.e[Y-2])),w.Math.abs(P[Y-2])),w.Math.abs(this.e[b])),w.Math.abs(P[b])),ht=this.e[Y-1]/W,wt=this.e[Y-2]/W,i=P[Y-2]/W,a=this.e[b]/W,r=P[b]/W,e=((wt+ht)*(wt-ht)+i*i)/2,A=ht*i*(ht*i),$=0,e!=0|A!=0&&($=w.Math.sqrt(e*e+A),e<0&&($=-$),$=A/(e+$)),D=(a+ht)*(a-ht)+$,Q=a*r,h=b;h<Y-1;h++){for(rt=Q2(D,Q),n=D/rt,st=Q/rt,h!=b&&(P[h-1]=rt),D=n*this.e[h]+st*P[h],P[h]=n*P[h]-st*this.e[h],Q=st*this.e[h+1],this.e[h+1]=n*this.e[h+1],L=0;L<this.d;L++)rt=n*this.b[L][h]+st*this.b[L][h+1],this.b[L][h+1]=-st*this.b[L][h]+n*this.b[L][h+1],this.b[L][h]=rt;if(rt=Q2(D,Q),n=D/rt,st=Q/rt,this.e[h]=rt,D=n*P[h]+st*this.e[h+1],this.e[h+1]=-st*P[h]+n*this.e[h+1],Q=st*P[h+1],P[h+1]=n*P[h+1],h<this.c-1)for(o=0;o<this.c;o++)rt=n*this.a[o][h]+st*this.a[o][h+1],this.a[o][h+1]=-st*this.a[o][h]+n*this.a[o][h+1],this.a[o][h]=rt}P[Y-2]=D,l=l+1}break;case 4:{if(this.e[b]<=0)for(this.e[b]=this.e[b]<0?-this.e[b]:0,o=0;o<=et;o++)this.b[o][b]=-this.b[o][b];for(;b<et&&!(this.e[b]>=this.e[b+1]);){if(rt=this.e[b],this.e[b]=this.e[b+1],this.e[b+1]=rt,b<this.d-1)for(o=0;o<this.d;o++)rt=this.b[o][b+1],this.b[o][b+1]=this.b[o][b],this.b[o][b]=rt;if(b<this.c-1)for(o=0;o<this.c;o++)rt=this.a[o][b+1],this.a[o][b+1]=this.a[o][b],this.a[o][b]=rt;++b}l=0,--Y}}}}function m6(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R;if(e[A-1]==36){if(t.r=!0,t.q=new n1,A+=VR(t,e,A-1,t.q)-1,e[A++]!=93){if(!r)throw At(new H1(\"SmilesParser: A positive recursive SMARTS followed by another one or by atom query features is not supported. Position:\"+(A-1)));(t.k&128)==0&&(A=_Y(e,A))}return A}if(e[A-1]==42)t.d=6,t.c=J(t.c,1);else if(e[A-1]==63)t.d=0;else if(Q=e[A-1]==33,Q&&(t.r=!0,t.c=J(t.c,1),++A),e[A-1]==82&&P&&(an(e[A]&d1)||t.j&&e[A]==123))t.d=6,t.c=J(t.c,1),--A,Q&&--A;else{if(o=new U7,!mp(t,e,A-1,n,o))throw At(new H1(\"SmilesParser: Unexpected character in atom definition:'\"+String.fromCharCode(e[A-1]&d1)+vM+(A-1)));if(t.d=o.a,A+=o.b-1,(t.k&3)!=2&&(t.g=9),P&&(e[A]==44||Q)){for(y=o.d,s=o.c,v=A-o.b;v<n;){if(!mp(t,e,v,n,o)){if(!Q)throw At(new H1(\"SmilesParser: Unexpected character in atom list:'\"+String.fromCharCode(e[v]&d1)+FM+v));break}if(o.a==1){if(!Q)throw At(new H1(\"SmilesParser: Hydrogen is not supported in positive atom lists:'\"+QO((SD(v<=n,v+\" > \"+n),R=e.length,Vk(v,v,R),pP(e,c(E,I,6,n-v,15,1),v,n)))+FM+v))}else iG(t,o.a),y=y|o.d,s=s|o.c;if(v+=o.b,Q&&e[v]!=59&&e[v]!=38||!Q&&e[v]!=44||Q&&e[v+1]!=33)break;++v,e[v]==33&&++v}t.b&&t.b.d.a.length>1&&(t.g=-1,s?y||(t.c=J(t.c,4)):t.c=J(t.c,2)),A=v}}for(h=new aw(e),g=c(F,m,6,1,15,1),k=!0;k;){if(e[A]==64){++A,e[A]==64&&(t.i=!0,++A),t.p=!0;continue}if(e[A]==58){for(++A;an(e[A]&d1);)t.o=10*t.o+e[A]-48,++A;continue}if(e[A]==91)throw At(new H1(\"SmilesParser: nested square brackets found. Position:\"+A));if(e[A]==93){++A,k=!1;continue}if(t.e=gb(e,A,g),g[0]!=0){A+=g[0],t.e==0&&(t.c=J(t.c,Po));continue}if(D=e[A]==33,D&&++A,e[A]==72){++A,A+=bf(h,A,1),i=0,h.c<=0&&h.b>=0&&(i=J(i,128)),h.c<=1&&h.b>=1&&(i=J(i,256)),h.c<=2&&h.b>=2&&(i=J(i,512)),h.c<=3&&h.b>=3&&(i=J(i,Qe)),D?(t.c=J(t.c,i),t.g=-1):h.b==h.c?t.g=h.c:(t.c=J(t.c,V(uP,Zn(i))),t.g=-1);continue}if(e[A]==68||e[A]==100){++A,A+=bf(h,A,1),i=0,h.c<=0&&h.b>=0&&(i=J(i,q0)),h.c<=1&&h.b>=1&&(i=J(i,v8)),h.c<=2&&h.b>=2&&(i=J(i,B8)),h.c<=3&&h.b>=3&&(i=J(i,F8)),h.c<=4&&h.b>=4&&(i=J(i,KA)),z(i,0)!=0&&(D?t.c=J(t.c,i):gt(V(t.c,hi),0)?t.c=V(t.c,Zn(i)):(i=d0(i,hi),t.c=J(t.c,i)));continue}if(e[A]==122&&t.j){++A,A+=bf(h,A,4),i=0,h.c<=0&&h.b>=0&&(i=J(i,p2)),h.c<=1&&h.b>=1&&(i=J(i,kM)),h.c<=2&&h.b>=2&&(i=J(i,mM)),h.c<=3&&h.b>=3&&(i=J(i,bM)),h.c<=4&&h.b>=4&&(i=J(i,fo)),z(i,0)!=0&&(D?t.c=J(t.c,i):gt(V(t.c,xf),0)?t.c=V(t.c,Zn(i)):(i=d0(i,xf),t.c=J(t.c,i)));continue}if(e[A]==88){if(++A,A+=bf(h,A,1),j=(J1(),v9)[t.d],j==null)continue;b=j[0],L=gb(e,A,g),g[0]!=0&&(Pi(t.d)?b+=L:t.d==6?b-=w.Math.abs(L):b-=L),i=0,b-h.c<=0&&b-h.b>=0&&(i=J(i,Gn)),b-h.c<=1&&b-h.b>=1&&(i=J(i,g8)),b-h.c<=2&&b-h.b>=2&&(i=J(i,o0)),z(i,0)!=0&&(D?t.c=J(t.c,i):gt(V(t.c,li),0)?t.c=V(t.c,Zn(i)):(i=d0(i,li),t.c=J(t.c,i)));continue}if(e[A]==65||e[A]==97){t.c=J(t.c,D^e[A]==65?4:2),++A;continue}if(e[A]==82){++A,A+=bf(h,A,3),i=0,h.c<=0&&h.b>=0&&(i=J(i,8)),h.c<=1&&h.b>=1&&(i=J(i,16)),h.c<=2&&h.b>=2&&(i=J(i,32)),h.c<=3&&h.b>=3&&(i=J(i,64)),h.b>3&&Zu(t.n,(D?\"!R\":\"R\")+h.b),z(i,0)!=0&&(D?t.c=J(t.c,i):gt(V(t.c,120),0)?t.c=V(t.c,Zn(i)):(i=d0(i,120),t.c=J(t.c,i)));continue}if(e[A]==114){if(++A,A+=bf(h,A,1),h.a){D?t.c=J(t.c,384):t.c=J(t.c,8);continue}T=h.c,h.b>h.c&&Zu(t.n,(D?\"!r\":\"r\")+(\"{\"+h.c+\"-\"+h.b+\"}\")),!D&&T>=3&&T<=7?t.c=J(t.c,T<<22):h.b>h.c||Zu(t.n,(D?\"!r\":\"r\")+T);continue}if(e[A]==118){++A,A+=bf(h,A,1),b=h.c,h.b>h.c&&Zu(t.n,(D?\"!v\":\"v\")+(\"{\"+h.c+\"-\"+h.b+\"}\")),!D&&b<=14?t.a=b:h.b>h.c||Zu(t.n,(D?\"!v\":\"v\")+b);continue}if(e[A]==94){if(++A,f=e[A++]-48,f<1||f>3)throw At(new H1(\"SmilesParser: Unsupported hybridization. Position:\"+A));l=f==1?o0:f==2?g8:Gn,D||(l=V(li,Zn(l))),t.c=J(t.c,l);continue}if(e[A]==36){if(!D)throw At(new H1(\"SmilesParser: non-negated recursive SMARTS relating to preceding atom are not supported yet. Position:\"+A));!t.f&&(t.f=new n1),t.r=!0,A+=VR(t,e,A,t.f);continue}if(P&&(e[A]==59||e[A]==38)){t.r=!0,++A;continue}if(P&&e[A]==44&&LW(e,A,g)){t.r=!0,A+=g[0]+1;continue}if(P&&e[A]==44&&(t.k&128)!=0){t.r=!0,A+=1;break}throw e[A]==44?At(new H1(\"SmilesParser: alternative atom definitions not supported. (Tip: enumerate SMARTS): '\"+String.fromCharCode(e[A]&d1)+P4+A)):At(new H1(\"SmilesParser: unexpected character inside brackets: '\"+String.fromCharCode(e[A]&d1)+P4+A))}return A}function yy(){yy=v1,W4=B(d(ft,2),DA,13,0,[B(d(ft,1),Dt,2,6,[\"Acyl\",\"gCaHA`AIf`@\"]),B(d(ft,1),Dt,2,6,[\"Alloc\",\"gNph@l@ILzuR@@\"]),B(d(ft,1),Dt,2,6,[\"Allyl\",\"Al\"]),B(d(ft,1),Dt,2,6,[\"Benzyl;Bn\",\"daD@`F@DjUZxHH@@\"]),B(d(ft,1),Dt,2,6,[\"Boc\",\"daxD`@S@AIgijj@@\"]),B(d(ft,1),Dt,2,6,[\"BOM;BzOM\",\"deTH`@H@Re[TYj`@@@\"]),B(d(ft,1),Dt,2,6,[\"Bs\",\"dmtDpAdLS`aPAIe]jf`@e`@@\"]),B(d(ft,1),Dt,2,6,[\"Bt\",\"dew@`@aJ@DiY]paej`@@@\"]),B(d(ft,1),Dt,2,6,[\"Btm\",\"did@P@BJ@Die_ahH@@@\"]),B(d(ft,1),Dt,2,6,[\"Butyl;nButyl\",\"gJPHB@IRuP@\"]),B(d(ft,1),Dt,2,6,[\"Benzoyl;Bz\",\"didH`@p@RYm^Eh@@@@\"]),B(d(ft,1),Dt,2,6,[\"Bzh\",\"dg|@`N@LdbRbtJUB]aAP@@@@\"]),B(d(ft,1),Dt,2,6,[\"Cbz\",\"dmtD`@S@AIgYVUZh@@@@\"]),B(d(ft,1),Dt,2,6,[\"cButyl\",\"gKPHL@IThuT@@\"]),B(d(ft,1),Dt,2,6,[\"cHeptyl\",\"daD@`L@DjWVzjj`@\"]),B(d(ft,1),Dt,2,6,[\"cHexyl\",\"gOpHL@IToWUU@@\"]),B(d(ft,1),Dt,2,6,[\"cOctyl\",\"did@`L@DjWWajjj@@\"]),B(d(ft,1),Dt,2,6,[\"cPentyl\",\"gFpHL@ITimUP@\"]),B(d(ft,1),Dt,2,6,[\"cPropyl\",\"gBPHL@Qxjh@\"]),B(d(ft,1),Dt,2,6,[\"COOH\",\"gC`h@l@ILt@@ !Bb@K~@Hc}\"]),B(d(ft,1),Dt,2,6,[\"DEAE\",\"daz@`@x@RiUjj`@\"]),B(d(ft,1),Dt,2,6,[\"DEIPS\",\"diD@P@\\\\B@DjfVjj`@\"]),B(d(ft,1),Dt,2,6,[\"DMIPS\",\"gNpD@xD@RjZjh@\"]),B(d(ft,1),Dt,2,6,[\"DMPM\",\"dcLD`@kPCIEMDdcttDDT@@\"]),B(d(ft,1),Dt,2,6,[\"DMPS\",\"deT@P@\\\\B@LddTjPsU@@@@\"]),B(d(ft,1),Dt,2,6,[\"DMTr\",\"fak@b@@Mt@ISZ{SMjo{NQKfm@AU@@@E@@@@\"]),B(d(ft,1),Dt,2,6,[\"DNP\",\"dkmB`hdDt~@HeNfS{HihheCAUhBHX@@\"]),B(d(ft,1),Dt,2,6,[\"DNS;Dan\",\"fhi`a@KPP@HH@YIHYheEhYKQgKP@@QP@@@\"]),B(d(ft,1),Dt,2,6,[\"DPIPS\",\"fdyAA@H@\\\\B@FRRIQSQIHzp_Qjh@h@@@@@\"]),B(d(ft,1),Dt,2,6,[\"DPTBS\",\"fleAA@H@\\\\B@FRRIQSRIIWNbEMU@EP@@@@@\"]),B(d(ft,1),Dt,2,6,[\"DTBMS\",\"dmT@P@\\\\B@Djffjjjh@@\"]),B(d(ft,1),Dt,2,6,[\"Ethyl\",\"eMBD@ch@\"]),B(d(ft,1),Dt,2,6,[\"Fmoc\",\"fde@b@@Hp@IL{LrjxeVCzKUT@@@P@@@\"]),B(d(ft,1),Dt,2,6,[\"iAmyl\",\"gGPHJ@YIDZj@@\"]),B(d(ft,1),Dt,2,6,[\"iButyl\",\"gJPHB@ITuP@\"]),B(d(ft,1),Dt,2,6,[\"Im\",\"gFtHAj@IRnKSP@\"]),B(d(ft,1),Dt,2,6,[\"iPropyl\",\"gC`HL@Qz`@\"]),B(d(ft,1),Dt,2,6,[\"MDIPS\",\"diD@P@\\\\B@DjfZjj`@\"]),B(d(ft,1),Dt,2,6,[\"MDPS\",\"foA@A@@NA@CIIEEBdeeVLzj@@@@@@\"]),B(d(ft,1),Dt,2,6,[\"Methyl\",\"eFBH@c@@\"]),B(d(ft,1),Dt,2,6,[\"MEM\",\"gNphAR@IRoUT@@\"]),B(d(ft,1),Dt,2,6,[\"Mes\",\"deT@`J@DjY{[`bB`@@\"]),B(d(ft,1),Dt,2,6,[\"MMTr\",\"ffcAB@@Z@Dim]ifuWYrI\\\\uh@Jh@@@@@@\"]),B(d(ft,1),Dt,2,6,[\"MOM\",\"gCaHA`AJZ`@\"]),B(d(ft,1),Dt,2,6,[\"MPM;PMB\",\"deTH`@d@Rfuunh@J@@\"]),B(d(ft,1),Dt,2,6,[\"Ms\",\"gJPdH`DD@cuh@\"]),B(d(ft,1),Dt,2,6,[\"MTM\",\"gC`D@DX@Rfh@\"]),B(d(ft,1),Dt,2,6,[\"mTolyl\",\"daD@`N@DjWjXHB@@\"]),B(d(ft,1),Dt,2,6,[\"N3\",\"gClHaE`@RnReX@\"]),B(d(ft,1),Dt,2,6,[\"nAmyl;Amyl\",\"gGPHJ@IRmU@@\"]),B(d(ft,1),Dt,2,6,[\"neoAm\",\"gGPHJ@IUMU@@\"]),B(d(ft,1),Dt,2,6,[\"NO2,Nitro\",\"gChhhE`BRnRYh@\"]),B(d(ft,1),Dt,2,6,[\"Np\",\"deVDaHAI@HeNR[e_aZ@B@@\"]),B(d(ft,1),Dt,2,6,[\"nPropyl;Propyl\",\"gC`HL@IST@@\"]),B(d(ft,1),Dt,2,6,[\"oTolyl\",\"daD@`J@DjYvxH`@@\"]),B(d(ft,1),Dt,2,6,[\"Phenyl\",\"gOpHL@IToVD@@@\"]),B(d(ft,1),Dt,2,6,[\"Pht\",\"dcLL`@RU@Dfyed]ZBA`@@\"]),B(d(ft,1),Dt,2,6,[\"Piv;Pv\",\"gNqHA`AIffj`@\"]),B(d(ft,1),Dt,2,6,[\"PMBM\",\"dcLD`@T`AJUm]FZh@J@@\"]),B(d(ft,1),Dt,2,6,[\"PNB\",\"dcNLaHAEt@bTyInUvxV`@f@@\"]),B(d(ft,1),Dt,2,6,[\"Poc\",\"didD`@S@AIgexVjj`@\"]),B(d(ft,1),Dt,2,6,[\"PPi\",\"diDFsHSB[`|J|A@Lxn{lddqdZih@@\"]),B(d(ft,1),Dt,2,6,[\"pTolyl\",\"daD@`N@DjWzXHB@@\"]),B(d(ft,1),Dt,2,6,[\"sAmyl\",\"gGPHL@YIDZj@@\"]),B(d(ft,1),Dt,2,6,[\"sButyl\",\"gJPHL@ITuP@\"]),B(d(ft,1),Dt,2,6,[\"SEM\",\"diDHPFApD@rRQUJjj`@\"]),B(d(ft,1),Dt,2,6,[\"SES\",\"dedDpHP@``AgCIICeHmUT@@\"]),B(d(ft,1),Dt,2,6,[\"SO3H\",\"gJQdHl@``D^m@@\"]),B(d(ft,1),Dt,2,6,[\"tAmyl\",\"gGPHB@IUMU@@\"]),B(d(ft,1),Dt,2,6,[\"TBDMS;TBS\",\"dax@P@\\\\B@Djfjjh@@\"]),B(d(ft,1),Dt,2,6,[\"TBDPS\",\"fdy@A@@NA@CIIEEEIde]XOhuPAT@@@@@\"]),B(d(ft,1),Dt,2,6,[\"TBMPS\",\"dg\\\\HPHApH@rRQJJPjg]UAT@@@\"]),B(d(ft,1),Dt,2,6,[\"tButyl,tBu\",\"gJPHB@Q}T@@\"]),B(d(ft,1),Dt,2,6,[\"TDS\",\"ded@P@\\\\B@LddTeeUUP@@\"]),B(d(ft,1),Dt,2,6,[\"Tf\",\"daxDhHP@``BiAiCiCIICHmU@@\"]),B(d(ft,1),Dt,2,6,[\"TFA\",\"gNqBJIARFdF@YEHYUL@@\"]),B(d(ft,1),Dt,2,6,[\"Thexyl\",\"gNpHB@IUMUT@@\"]),B(d(ft,1),Dt,2,6,[\"THF\",\"gFqH@PAJYujj@@\"]),B(d(ft,1),Dt,2,6,[\"THP\",\"gOqH@PAJYZzjh@\"]),B(d(ft,1),Dt,2,6,[\"TIPS\",\"dmT@P@\\\\B@DjfYjjjh@@\"]),B(d(ft,1),Dt,2,6,[\"TMS\",\"gJPD@xD@czh@\"]),B(d(ft,1),Dt,2,6,[\"Tosyl;Ts\",\"dmtDPHP@``CIICLeaeZ@B@@\"]),B(d(ft,1),Dt,2,6,[\"Troc\",\"diDDHJxHaHcH`PCHiBeJjf@@\"]),B(d(ft,1),Dt,2,6,[\"Trt\",\"fbm@B@A@FRQIRKQPiIZdoIcdHJ`@@@@@@\"]),B(d(ft,1),Dt,2,6,[\"Xyl\",\"did@`J@DjYynBHH@@\"])])}function b6(t,e){var A,n,P,r;A=e[1],n=e[2],P=t.k[A]-1,r=t.k[n]-1,P>3||r>3?(this.b=c(Kt,t1,6,4,15,1),this.b[0]=45,this.b[1]=135,this.b[2]=225,this.b[2]=315,this.c=j1(Kt,[ie,t1],[16,6],15,[4,2],2),this.c[0][0]=30,this.c[0][1]=60,this.c[1][0]=120,this.c[1][1]=150,this.c[2][0]=210,this.c[2][1]=240,this.c[2][0]=300,this.c[2][1]=330,this.a=c(Kt,t1,6,4,15,1),this.a[0]=25,this.a[1]=25,this.a[2]=25,this.a[3]=25):(t.p[A]==0||t.D[A]>9)&&(t.p[n]==0||t.D[n]>9)?P==3&&r==3||P==3&&r==2||P==3&&r==1||P==2&&r==3||P==1&&r==3||P==2&&r==2&&(e[0]!=-1||e[3]!=-1)?(this.b=c(Kt,t1,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=j1(Kt,[ie,t1],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(Kt,t1,6,3,15,1),this.a[0]=33,this.a[1]=33,this.a[2]=33):P==1&&r==2&&e[3]==-1||P==2&&r==1&&e[0]==-1?(this.b=c(Kt,t1,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=j1(Kt,[ie,t1],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(Kt,t1,6,3,15,1),this.a[0]=40,this.a[1]=20,this.a[2]=40):(P==1&&r==1||P==1&&r==2&&e[3]!=-1||P==2&&r==1&&e[0]!=-1||P==2&&r==2&&e[0]==-1&&e[3]==-1)&&(this.b=c(Kt,t1,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=j1(Kt,[ie,t1],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(Kt,t1,6,3,15,1),this.a[0]=25,this.a[1]=50,this.a[2]=25):(t.p[A]==0||t.D[A]>9)&&t.p[n]==1||(t.p[n]==0||t.D[n]>9)&&t.p[A]==1?P==3||r==3?(this.b=c(Kt,t1,6,6,15,1),this.b[0]=0,this.b[1]=60,this.b[2]=120,this.b[3]=180,this.b[4]=240,this.b[5]=300,this.c=j1(Kt,[ie,t1],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=45,this.c[1][1]=75,this.c[2][0]=105,this.c[2][1]=135,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=225,this.c[4][1]=255,this.c[5][0]=285,this.c[5][1]=315,this.a=c(Kt,t1,6,6,15,1),this.a[0]=16,this.a[1]=16,this.a[2]=16,this.a[3]=16,this.a[4]=16,this.a[5]=16):P==1&&r==1?(this.b=c(Kt,t1,6,2,15,1),this.b[0]=120,this.b[1]=240,this.c=j1(Kt,[ie,t1],[16,6],15,[2,2],2),this.c[0][0]=105,this.c[0][1]=135,this.c[1][0]=225,this.c[1][1]=255,this.a=c(Kt,t1,6,2,15,1),this.a[0]=50,this.a[1]=50):t.p[A]==1&&P==2&&r==1||t.p[n]==1&&r==2&&P==1?(this.b=c(Kt,t1,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=j1(Kt,[ie,t1],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=c(Kt,t1,6,2,15,1),this.a[0]=50,this.a[1]=50):t.p[A]==1&&P==1&&r==2&&e[3]==-1||t.p[n]==1&&r==1&&P==2&&e[0]==-1?(this.b=c(Kt,t1,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=j1(Kt,[ie,t1],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=c(Kt,t1,6,3,15,1),this.a[0]=60,this.a[1]=20,this.a[2]=20):t.p[A]==1&&P==1&&r==2&&e[3]!=-1||t.p[n]==1&&r==1&&P==2&&e[0]!=-1?(this.b=c(Kt,t1,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=j1(Kt,[ie,t1],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=c(Kt,t1,6,3,15,1),this.a[0]=20,this.a[1]=40,this.a[2]=40):P==2&&r==2&&(e[0]==-1||e[3]==-1?(this.b=c(Kt,t1,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=j1(Kt,[ie,t1],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=c(Kt,t1,6,2,15,1),this.a[0]=50,this.a[1]=50):(this.b=c(Kt,t1,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=j1(Kt,[ie,t1],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=c(Kt,t1,6,2,15,1),this.a[0]=50,this.a[1]=50)):t.p[A]==1&&t.p[n]==1?P==1&&r==1?(this.b=c(Kt,t1,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=j1(Kt,[ie,t1],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=c(Kt,t1,6,2,15,1),this.a[0]=10,this.a[1]=90):(this.b=c(Kt,t1,6,6,15,1),this.b[0]=0,this.b[1]=50,this.b[2]=130,this.b[3]=180,this.b[4]=230,this.b[5]=310,this.c=j1(Kt,[ie,t1],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=35,this.c[1][1]=65,this.c[2][0]=115,this.c[2][1]=145,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=215,this.c[4][1]=245,this.c[5][0]=295,this.c[5][1]=325,this.a=c(Kt,t1,6,6,15,1),this.a[0]=40,this.a[1]=5,this.a[2]=5,this.a[3]=40,this.a[4]=5,this.a[5]=5):(this.b=c(Kt,t1,6,1,15,1),this.b[0]=180,this.c=j1(Kt,[ie,t1],[16,6],15,[1,2],2),this.c[0][0]=165,this.c[0][1]=195,this.a=c(Kt,t1,6,1,15,1),this.a[0]=100)}function iM(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct;for(N=(q1(),nn),q(t.b,\"M  V30 BEGIN CTAB\"+N),q(t.b,hM+e.r+\" \"+e.s+\" 0 0 0\"+N),q(t.b,\"M  V30 BEGIN ATOM\"+N),D=0;D<e.r;D++){if(q(t.b,Lo+(D+1)),(e.w==null?null:e.w[D])!=null){for(s=e.w==null?null:e.w[D],tt=gt(V(e.C[D],1),0),q(t.b,tt?\" NOT[\":\" [\"),R=0;R<s.length;R++)switch(R>0&&q(t.b,\",\"),C=(J1(),a0)[s[R]],C.length){case 2:case 3:case 1:q(t.b,C);break;default:q(t.b,\"?\")}q(t.b,\"]\")}else gt(V(e.C[D],1),0)?q(t.b,\" A\"):e.D[D]>=129&&e.D[D]<=144||e.D[D]==154?q(t.b,\" R#\"):q(t.b,\" \"+(J1(),a0)[e.D[D]]);if(A?(q(t.b,\" \"+Bt(fP*t.c*e.K[D].a)/fP),q(t.b,\" \"+Bt(fP*t.c*-e.K[D].b)/fP),q(t.b,\" \"+Bt(fP*t.c*-e.K[D].c)/fP)):q(t.b,\" 0 0 0\"),q(t.b,\" \"+w.Math.abs(e.A[D])),e.t[D]!=0&&q(t.b,\" CHG=\"+e.t[D]),(e.v[D]&48)!=0)switch(q(t.b,\" RAD=\"),e.v[D]&48){case 16:q(t.b,\"1\");break;case 32:q(t.b,\"2\");break;case 48:q(t.b,\"3\")}((e.v[D]&3)==1||(e.v[D]&3)==2)&&(q(t.b,\" CFG=\"),(e.v[D]&3)==1?q(t.b,\"1\"):q(t.b,\"2\")),e.B[D]!=0&&q(t.b,\" MASS=\"+e.B[D]),ct=((e.v[D]&b8)>>>27)-1,ct!=-1&&q(t.b,\" VAL=\"+(ct==0?\"-1\":U1(ct))),y=e.D[D],(y>=129&&y<=144||y==154)&&q(t.b,\" RGROUPS=(1 \"+(y==154?0:y>=142?y-141:y-125)+\")\"),j=V(uP,e.C[D]),z(j,384)==0?q(t.b,\" HCOUNT=2\"):z(j,128)==0?q(t.b,\" HCOUNT=1\"):z(j,1792)==0?q(t.b,\" HCOUNT=-1\"):z(j,1664)==0&&q(t.b,\" HCOUNT=1\"),ht=V(e.C[D],6144),z(ht,0)!=0&&(gt(V(ht,S0),0)?q(t.b,\" SUBST=\"+(e.e[D]+1)):q(t.b,\" SUBST=-1\")),$=V(e.C[D],120),z($,0)!=0&&(z($,112)==0?q(t.b,\" RBCNT=-1\"):z($,8)==0||z($,104)==0?q(t.b,\" RBCNT=2\"):z($,88)==0?q(t.b,\" RBCNT=3\"):z($,56)==0&&q(t.b,\" RBCNT=4\")),q(t.b,N)}for(q(t.b,\"M  V30 END ATOM\"+N),q(t.b,\"M  V30 BEGIN BOND\"+N),h=0;h<e.s;h++){switch(q(t.b,Lo+(h+1)),e.I[h]){case 1:et=1,st=0;break;case 2:et=2,st=0;break;case 4:et=3,st=0;break;case 129:et=1,st=3;break;case 257:et=1,st=1;break;case 386:et=2,st=2;break;case 8:et=4,st=0;break;case 16:et=9,st=0;break;default:et=1,st=0}g=e.H[h]&31,g!=0&&(g==8?et=4:g==3?et=5:g==9?et=6:g==10?et=7:et=8),q(t.b,\" \"+et+\" \"+(e.F[0][h]+1)+\" \"+(e.F[1][h]+1)),st!=0&&q(t.b,\" CFG=\"+st),a=e.H[h]&384,wt=a==0?0:a==256?1:2,wt!=0&&q(t.b,\" TOPO=\"+wt),q(t.b,N)}for(q(t.b,\"M  V30 END BOND\"+N),v=!1,Q=0;Q<e.r;Q++)if((e.u==null||e.u[Q]==null?null:on((S=e.u[Q],w0(),S)))!=null){v=!0;break}if(v){for(q(t.b,\"M  V30 BEGIN SGROUP\"+N),k=0,o=0;o<e.r;o++)(e.u==null||e.u[o]==null?null:on((x=e.u[o],w0(),x)))!=null&&(++k,q(t.b,Lo+k+\" DAT \"+k+\" ATOMS=(1 \"+(o+1)+') FIELDNAME=\"'+Sy+'\" -'+N),q(t.b,'M  V30 FIELDDISP=\"'),FF(t,A?t.c*e.K[o].a:0),FF(t,A?t.c*e.K[o].b:0),q(t.b,'    DA    ALL  1       5\" FIELDDATA=\"'+(e.u==null||e.u[o]==null?null:on((S=e.u[o],w0(),S)))+'\"'+N));q(t.b,\"M  V30 END SGROUP\"+N)}for(W=!1,n=0,H=c(F,m,6,32,15,1),r=c(F,m,6,32,15,1),L=0;L<e.g;L++)((e.v[L]&3)==1||(e.v[L]&3)==2)&&(W=!0,rt=(e.v[L]&b1)>>18,rt==1?++r[(e.v[L]&b1)>>18!=1&&(e.v[L]&b1)>>18!=2?-1:(e.v[L]&VA)>>20]:rt==2?++H[(e.v[L]&b1)>>18!=1&&(e.v[L]&b1)>>18!=2?-1:(e.v[L]&VA)>>20]:++n);for(P=0,Y=c(F,m,6,32,15,1),i=c(F,m,6,32,15,1),T=0;T<e.i;T++)dt(e,T)!=2&&((e.G[T]&3)==1||(e.G[T]&3)==2)&&(W=!0,rt=(e.G[T]&768)>>8,rt==1?++i[(e.G[T]&768)>>8!=1&&(e.G[T]&768)>>8!=2?-1:(e.G[T]&cn)>>10]:rt==2?++Y[(e.G[T]&768)>>8!=1&&(e.G[T]&768)>>8!=2?-1:(e.G[T]&cn)>>10]:++P);if(W){if(q(t.b,\"M  V30 BEGIN COLLECTION\"+N),n!=0){for(q(t.b,\"M  V30 MDLV30/STEABS ATOMS=(\"+n),f=0;f<e.g;f++)((e.v[f]&3)==1||(e.v[f]&3)==2)&&(e.v[f]&b1)>>18==0&&q(t.b,\" \"+(f+1));q(t.b,\")\"+N)}if(P!=0){for(q(t.b,\"M  V30 MDLV30/STEABS BONDS=(\"+P),l=0;l<e.i;l++)dt(e,l)!=2&&((e.G[l]&3)==1||(e.G[l]&3)==2)&&(e.G[l]&768)>>8==0&&q(t.b,\" \"+(l+1));q(t.b,\")\"+N)}for(b=0;b<32;b++){if(H[b]!=0){for(q(t.b,TM+(b+1)+\" ATOMS=(\"+H[b]),f=0;f<e.g;f++)((e.v[f]&3)==1||(e.v[f]&3)==2)&&(e.v[f]&b1)>>18==2&&((e.v[f]&b1)>>18!=1&&(e.v[f]&b1)>>18!=2?-1:(e.v[f]&VA)>>20)==b&&q(t.b,\" \"+(f+1));q(t.b,\")\"+N)}if(r[b]!=0){for(q(t.b,cM+(b+1)+\" ATOMS=(\"+r[b]),f=0;f<e.g;f++)((e.v[f]&3)==1||(e.v[f]&3)==2)&&(e.v[f]&b1)>>18==1&&((e.v[f]&b1)>>18!=1&&(e.v[f]&b1)>>18!=2?-1:(e.v[f]&VA)>>20)==b&&q(t.b,\" \"+(f+1));q(t.b,\")\"+N)}if(Y[b]!=0){for(q(t.b,TM+(b+1)+\" BONDS=(\"+Y[b]),l=0;l<e.i;l++)dt(e,l)!=2&&((e.G[l]&3)==1||(e.G[l]&3)==2)&&(e.G[l]&768)>>8==2&&((e.G[l]&768)>>8!=1&&(e.G[l]&768)>>8!=2?-1:(e.G[l]&cn)>>10)==b&&q(t.b,\" \"+(l+1));q(t.b,\")\"+N)}if(i[b]!=0){for(q(t.b,cM+(b+1)+\" BONDS=(\"+i[b]),l=0;l<e.i;l++)dt(e,l)!=2&&((e.G[l]&3)==1||(e.G[l]&3)==2)&&(e.G[l]&768)>>8==1&&((e.G[l]&768)>>8!=1&&(e.G[l]&768)>>8!=2?-1:(e.G[l]&cn)>>10)==b&&q(t.b,\" \"+(l+1));q(t.b,\")\"+N)}}q(t.b,\"M  V30 END COLLECTION\"+N)}q(t.b,a6+N)}function k1t(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1;if(Q3(t,!1),qt(t,9,4),pt=w.Math.max(W8(t.R.g),W8(t.R.i)),qt(t,pt,4),pt==0){qt(t,t.R.L?1:0,1),qt(t,0,1),t.J=OL(t);return}for(U0=l0=V1=Y=0,D=0;D<t.R.g;D++)if(n0(V(h0(t.R,D),1),0)){switch(X(t.R,D)){case 6:break;case 7:++U0;break;case 8:++l0;break;default:++V1}R1(t.R,D)!=0&&++Y}for(qt(t,t.R.g,pt),qt(t,t.R.i,pt),qt(t,U0,pt),qt(t,l0,pt),qt(t,V1,pt),qt(t,Y,pt),Q=0;Q<t.R.g;Q++)X(t.R,t.B[Q])==7&&n0(V(h0(t.R,t.B[Q]),1),0)&&qt(t,Q,pt);for(s=0;s<t.R.g;s++)X(t.R,t.B[s])==8&&n0(V(h0(t.R,t.B[s]),1),0)&&qt(t,s,pt);for(y=0;y<t.R.g;y++)X(t.R,t.B[y])!=6&&X(t.R,t.B[y])!=7&&X(t.R,t.B[y])!=8&&n0(V(h0(t.R,t.B[y]),1),0)&&(qt(t,y,pt),qt(t,X(t.R,t.B[y]),8));for(l=0;l<t.R.g;l++)R1(t.R,t.B[l])!=0&&n0(V(h0(t.R,t.B[l]),1),0)&&(qt(t,l,pt),qt(t,8+R1(t.R,t.B[l]),4));for(Q1=0,j=0,h=1;h<t.R.g;h++)t.F[h]==-1?st=0:(st=1+t.F[h]-j,j=t.F[h]),Q1<st&&(Q1=st);for(a=W8(Q1),qt(t,a,4),j=0,T=1;T<t.R.g;T++)t.F[T]==-1?st=0:(st=1+t.F[T]-j,j=t.F[T]),qt(t,st,a);for(St=0;St<2*t.I;St++)qt(t,t.D[St],pt);for(C=0;C<t.R.i;C++)H=(fe(t.R,t.C[C])&d8)!=0||c1(t.R,t.C[C])==16?1:Z8(t.R,t.C[C])?0:w.Math.min(3,dt(t.R,t.C[C])),qt(t,H,2);if(A=0,(t.Q&O1)==0)for(g=0;g<t.R.g;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&++A;if(qt(t,A,pt),(t.Q&O1)==0)for(g=0;g<t.R.g;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&(qt(t,g,pt),t.bb[t.B[g]]==0?qt(t,t._[t.B[g]],3):(m1=t._[t.B[g]]==1?t.bb[t.B[g]]==1?4:6:t.bb[t.B[g]]==1?5:7,qt(t,m1,3),qt(t,t.ab[t.B[g]],3)));if(e=0,(t.Q&O1)==0)for(S=0;S<t.R.i;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!A8(t.R,t.C[S])||c1(t.R,t.C[S])==1)&&++e;if(qt(t,e,pt),(t.Q&O1)==0)for(S=0;S<t.R.i;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!A8(t.R,t.C[S])||c1(t.R,t.C[S])==1)&&(qt(t,S,pt),c1(t.R,t.C[S])==1?t.n[t.C[S]]==0?qt(t,t.j[t.C[S]],3):(m1=t.j[t.C[S]]==1?t.n[t.C[S]]==1?4:6:t.n[t.C[S]]==1?5:7,qt(t,m1,3),qt(t,t.k[t.C[S]],3)):qt(t,t.j[t.C[S]],2));for(qt(t,t.R.L?1:0,1),$=0,k=0;k<t.R.g;k++)ge(t.R,t.B[k])!=0&&++$;if($!=0)for(rP(t,1),qt(t,$,pt),g=0;g<t.R.g;g++)ge(t.R,t.B[g])!=0&&(qt(t,g,pt),qt(t,ge(t.R,t.B[g]),8));if(t.w=0,t.R.L){for(dA(t,0,pt,O1,1,-1),dA(t,3,pt,S0,1,-1),dA(t,4,pt,120,4,3),dA(t,5,pt,ky,2,1),dA(t,6,pt,1,1,-1),dA(t,7,pt,uP,4,7),$=0,g=0;g<t.R.g;g++)IA(t.R,t.B[g])!=null&&++$;if($>0){for(rP(t,8),qt(t,$,pt),v=0;v<t.R.g;v++)if(b=IA(t.R,t.B[v]),b!=null)for(qt(t,v,pt),qt(t,b.length,4),P=b,r=0,i=P.length;r<i;++r)n=P[r],qt(t,n,8)}Di(t,9,pt,384,2,7),Di(t,10,pt,31,5,0),dA(t,11,pt,je,1,-1),Di(t,12,pt,d8,8,9),dA(t,13,pt,li,3,14),dA(t,14,pt,hi,5,17),dA(t,16,pt,lr,3,22)}for($=0,o=0;o<t.R.g;o++)t.a!=null&&t.a[t.B[o]]!=-1&&++$;if($!=0)for(rP(t,17),qt(t,$,pt),g=0;g<t.R.g;g++)t.a!=null&&t.a[t.B[g]]!=-1&&(qt(t,g,pt),qt(t,t.a[t.B[g]],4));if(rt=0,wt=0,ht=0,(t.Q&8)!=0||(t.Q&Qe)!=0){for($=0,D1=0,g=0;g<t.R.g;g++)if(bt=eP(t.R,t.B[g]),bt!=null){if(S1=xT(bt),bt.length>15||S1>127){rt<bt.length&&(rt=w.Math.min(63,bt.length)),wt<S1&&(wt=S1),++ht;continue}++$,D1=w.Math.max(D1,bt.length)}if($!=0){for(yt=W8(D1),rP(t,18),qt(t,$,pt),qt(t,yt,4),v=0;v<t.R.g;v++)if(bt=eP(t.R,t.B[v]),bt!=null&&bt.length<=15&&xT(bt)<=127)for(qt(t,v,pt),qt(t,bt.length,yt),Xt=0;Xt<bt.length;Xt++)qt(t,(zt(Xt,bt.length),bt.charCodeAt(Xt)),7)}}for(t.R.L&&(dA(t,19,pt,yr,3,25),Di(t,20,pt,NP,3,17)),$=0,L=0;L<t.R.g;L++)jA(t.R,t.B[L])!=0&&++$;if($!=0)for(rP(t,21),qt(t,$,pt),f=0;f<t.R.g;f++)jA(t.R,t.B[f])!=0&&(qt(t,f,pt),qt(t,jA(t.R,t.B[f])>>4,2));if(t.R.L&&(dA(t,22,pt,d9,1,-1),Di(t,23,pt,F8,1,-1),Di(t,24,pt,Qo,2,21)),(t.Q&16)!=0){for(f=0;f<t.R.g;f++)if(i0(t.R,t.B[f])){for(rP(t,25),n=0;n<t.R.g;n++)qt(t,i0(t.R,t.B[n])?1:0,1);break}}if(A1=Z$(t),A1!=null){for($=0,S=0;S<t.R.i;S++)A1[t.C[S]]&&++$;for(rP(t,26),qt(t,$,pt),x=0;x<t.R.i;x++)A1[t.C[x]]&&qt(t,x,pt)}for(t.R.L&&dA(t,27,pt,Pe,1,-1),$=0,N=0;N<t.R.i;N++)c1(t.R,t.C[N])==16&&++$;if($!=0)for(rP(t,28),qt(t,$,pt),S=0;S<t.R.i;S++)c1(t.R,t.C[S])==16&&qt(t,S,pt);for(t.R.L&&(dA(t,29,pt,k8,2,30),dA(t,30,pt,l9,7,32),dA(t,32,pt,X6,2,44),dA(t,33,pt,xf,5,39),dA(t,34,pt,no,1,-1),Di(t,35,pt,Nf,1,-1),Di(t,36,pt,96,2,5)),$=0,tt=0;tt<t.R.i;tt++)(c1(t.R,t.C[tt])==32||c1(t.R,t.C[tt])==64)&&++$;if($!=0)for(rP(t,37),qt(t,$,pt),R=0;R<t.R.i;R++)(c1(t.R,t.C[R])==32||c1(t.R,t.C[R])==64)&&(qt(t,R,pt),qt(t,c1(t.R,t.C[R])==32?0:1,1));if(t.b&&(t.Q&16)!=0){for($=0,et=0,g=0;g<t.R.g;g++){for(W=0,Qt=O(t.R,t.B[g]);Qt<Ct(t.R,t.B[g]);Qt++)i0(t.R,_(t.R,t.B[g],Qt))&&(ct=Qt-O(t.R,t.B[g]),W|=1<<ct,et=w.Math.max(et,ct+1));W!=0&&++$}if($!=0)for(rP(t,38),qt(t,$,pt),qt(t,et,3),f=0;f<t.R.g;f++){for(W=0,Qt=O(t.R,t.B[f]);Qt<Ct(t.R,t.B[f]);Qt++)i0(t.R,_(t.R,t.B[f],Qt))&&(ct=Qt-O(t.R,t.B[f]),W|=1<<ct);W!=0&&(qt(t,f,pt),qt(t,W,et))}}if(t.R.L&&dA(t,39,pt,M2,4,47),ht!=0){for(yt=W8(rt),Lt=W8(wt),rP(t,40),qt(t,ht,pt),qt(t,yt,6),qt(t,Lt,16),f=0;f<t.R.g;f++)if(bt=eP(t.R,t.B[f]),bt!=null&&(bt.length>15||xT(bt)>127))for(qt(t,f,pt),Jt=w.Math.min(63,bt.length),qt(t,Jt,yt),Xt=0;Xt<Jt;Xt++)qt(t,(zt(Xt,bt.length),bt.charCodeAt(Xt)),Lt)}qt(t,0,1),t.J=OL(t)}function j6(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1;for(this.b=new Fh((rt=Ey,rt)),bt=(q1(),nn),ut(t,15),st=!0,P=0;P<t.g;P++)if((t.v[P]&3)!=0&&(t.v[P]&3)!=3&&(t.v[P]&b1)>>18!=1){st=!1;break}if(Xt=-1,st){for(H=c(F,m,6,32,15,1),St=0,r=0;r<t.g;r++)if((t.v[r]&3)!=0&&(t.v[r]&3)!=3&&(t.v[r]&b1)>>18==1){et=(t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20,++H[et],St<H[et]&&(St=H[et],Xt=et);break}}for(this.a=A||new C0,Qt=t.Q!=null?t.Q:\"\",q(this.a,Qt+bt),q(this.a,\"Actelion Java MolfileCreator 1.0\"+bt+bt),B0(this,t.r),B0(this,t.s),q(this.a,\"  0  0\"),B0(this,st?0:1),q(this.a,\"  0  0  0  0  0999 V2000\"+bt),W=t.r==1,Q=1;Q<t.r;Q++)if(t.K[Q].a!=t.K[0].a||t.K[Q].b!=t.K[0].b||t.K[Q].c!=t.K[0].c){W=!0;break}if(Y=1,W)if(e!=0)Y=e;else if(v=dP(t,t.r,t.s,(J1(),Bn)),v!=0)(v<1||v>3)&&(Y=1.5/v);else{for(A1=Ge,r=1;r<t.r;r++)for(D=0;D<r;D++)x=t.K[D].a-t.K[r].a,N=t.K[D].b-t.K[r].b,tt=t.K[D].c-t.K[r].c,S=x*x+N*N+tt*tt,A1>S&&(A1=S);Y=3/A1}for(o=0;o<t.r;o++)W?(tQ(this,Y*t.K[o].a),tQ(this,Y*-t.K[o].b),tQ(this,Y*-t.K[o].c)):q(this.a,\"    0.0000    0.0000    0.0000\"),(t.w==null?null:t.w[o])!=null?q(this.a,\" L  \"):gt(V(t.C[o],1),0)?q(this.a,\" A  \"):t.D[o]>=129&&t.D[o]<=144||t.D[o]==154?q(this.a,\" R# \"):(T=(J1(),a0)[t.D[o]],q(this.a,\" \"+T),T.length==1?q(this.a,\"  \"):T.length==2&&q(this.a,\" \")),q(this.a,\" 0  0  0\"),$=V(uP,t.C[o]),z($,0)==0?q(this.a,\"  0\"):z($,384)==0?q(this.a,\"  3\"):z($,128)==0?q(this.a,\"  2\"):z($,1792)==0?q(this.a,\"  1\"):z($,1664)==0&&q(this.a,\"  2\"),q(this.a,gt(V(t.C[o],je),0)?\"  1\":\"  0\"),V1=((t.v[o]&b8)>>>27)-1,V1==-1?q(this.a,\"  0\"):V1==0?q(this.a,\" 15\"):B0(this,V1),q(this.a,\"  0  0  0\"),B0(this,w.Math.abs(t.A[o])),q(this.a,\"  0  0\"+bt);for(b=0;b<t.s;b++){switch(t.I[b]){case 1:Jt=1,Lt=0;break;case 2:Jt=2,Lt=0;break;case 4:Jt=3,Lt=0;break;case 129:Jt=1,Lt=6;break;case 257:Jt=1,Lt=1;break;case 386:Jt=2,Lt=3;break;case 8:Jt=4,Lt=0;break;case 16:Jt=8,Lt=0;break;default:Jt=1,Lt=0}st&&(Lt==1||Lt==6)&&(r=t.F[0][b],(t.v[r]&b1)>>18==2?Lt=0:(t.v[r]&b1)>>18==1&&((t.v[r]&b1)>>18!=1&&(t.v[r]&b1)>>18!=2?-1:(t.v[r]&VA)>>20)!=Xt&&(Lt=4)),j=t.H[b]&31,j!=0&&(j==8?Jt=4:j==3?Jt=5:j==9?Jt=6:j==10?Jt=7:Jt=8),D1=t.H[b]&384,U0=D1==0?0:D1==256?1:2,B0(this,1+t.F[0][b]),B0(this,1+t.F[1][b]),B0(this,Jt),B0(this,Lt),q(this.a,\"  0\"),B0(this,U0),q(this.a,\"  0\"+bt)}for(yt=0,L=0;L<t.r;L++)t.t[L]!=0&&++yt;if(yt!=0)for(C=0,r=0;r<t.r;r++)t.t[r]!=0&&(C==0&&(q(this.a,\"M  CHG\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,r+1),R=t.t[r],R<0?(q(this.a,\"  -\"),R=-R):q(this.a,\"   \"),Ye(this.a,48+R&d1),--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt)));for(yt=0,s=0;s<t.r;s++)t.B[s]==0||++yt;if(yt!=0)for(C=0,r=0;r<t.r;r++)t.B[r]!=0&&(C==0&&(q(this.a,\"M  ISO\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,r+1),q(this.a,\" \"),B0(this,t.B[r]),--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt)));for(yt=0,y=0;y<t.r;y++)(t.v[y]&48)!=0&&++yt;if(yt!=0){for(C=0,r=0;r<t.r;r++)if((t.v[r]&48)!=0){switch(C==0&&(q(this.a,\"M  RAD\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,r+1),t.v[r]&48){case 16:q(this.a,\"   1\");break;case 32:q(this.a,\"   2\");break;case 48:q(this.a,\"   3\")}--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt))}}for(yt=0,l=0;l<t.r;l++)(t.D[l]>=129&&t.D[l]<=144||t.D[l]==154)&&++yt;if(yt!=0)for(C=0,r=0;r<t.r;r++)k=t.D[r],(k>=129&&k<=144||k==154)&&(C==0&&(q(this.a,\"M  RGP\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,r+1),q(this.a,\" \"),B0(this,k==154?0:k>=142?k-141:k-125),--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt)));if(t.L){for(yt=0,r=0;r<t.r;r++)gt(V(t.C[r],120),0)&&++yt;if(yt!=0)for(C=0,D=0;D<t.r;D++)S1=V(t.C[D],120),z(S1,0)!=0&&(C==0&&(q(this.a,\"M  RBC\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,D+1),z(S1,112)==0?q(this.a,\"  -1\"):z(S1,8)==0?q(this.a,\"   1\"):z(S1,104)==0?q(this.a,\"   2\"):z(S1,88)==0?q(this.a,\"   3\"):z(S1,56)==0&&q(this.a,\"   4\"),--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt)));for(h=0;h<t.r;h++)if(g=t.w==null?null:t.w[h],g!=null){for(q(this.a,\"M  ALS \"),B0(this,h+1),B0(this,g.length),q(this.a,gt(V(t.C[h],1),0)?\" T \":\" F \"),a=0;a<g.length;a++)switch(ht=(J1(),a0)[g[a]],ht.length){case 1:q(this.a,ht+\"   \");break;case 2:q(this.a,ht+\"  \");break;case 3:q(this.a,ht+\" \");break;default:q(this.a,\"   ?\")}q(this.a,bt)}for(yt=0,i=0;i<t.r;i++)gt(V(t.C[i],6144),0)&&++yt;if(yt!=0)for(C=0,D=0;D<t.r;D++)pt=V(t.C[D],6144),z(pt,0)!=0&&(C==0&&(q(this.a,\"M  SUB\"),B0(this,w.Math.min(8,yt))),q(this.a,\" \"),B0(this,D+1),gt(V(pt,S0),0)?q(this.a,\"   \"+(t.e[D]+1)):q(this.a,\"  -2\"),--yt,(++C==8||yt==0)&&(C=0,q(this.a,bt)))}for(yt=0,f=0;f<t.r;f++)(t.u==null||t.u[f]==null?null:on((ct=t.u[f],w0(),ct)))!=null&&++yt;if(yt!=0)for(Q1=0,n=0;n<t.r;n++)ht=t.u==null||t.u[n]==null?null:on((wt=t.u[n],w0(),wt)),ht!=null&&(++Q1,q(this.a,\"M  STY  1 \"),B0(this,Q1),q(this.a,\" DAT\"),q(this.a,bt),q(this.a,\"M  SLB  1 \"),B0(this,Q1),q(this.a,\" \"),B0(this,Q1),q(this.a,bt),q(this.a,\"M  SAL \"),B0(this,Q1),q(this.a,\"  1 \"),B0(this,n+1),q(this.a,bt),q(this.a,\"M  SDT \"),B0(this,Q1),q(this.a,\" \"),q(this.a,Sy),q(this.a,bt),q(this.a,\"M  SDD \"),B0(this,Q1),q(this.a,\" \"),tQ(this,t.K[n].a),tQ(this,t.K[n].b),q(this.a,\"    DA    ALL  1       5\"),q(this.a,bt),q(this.a,\"M  SED \"),B0(this,Q1),q(this.a,\" \"),q(this.a,ht),q(this.a,bt));q(this.a,hr+bt)}function R6(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1,F1,T0;for(t.k=e,Ri(t.k),t.s=new Jn,t.a=new vd,t.r&&Ln(t.r,0),t.b=0,t.p=!1,Q=t.q!=0,bt=null,l=c(F,m,6,32,15,1),l[0]=-1,yt=c(F,m,6,16,15,1),D1=c(F,m,6,16,15,1),S1=c(F,m,6,16,15,1),Jt=c(F,m,6,16,15,1),W=0;W<16;W++)yt[W]=-1;for(s=0,x=-1,Q1=!1,ht=!1,H=!1,v=0,g=1,T=0;A[n]<=32;)++n;for(;n<P;){if(Lt=A[n++]&d1,ev(Lt)||Lt==42||Lt==63||Lt==33&&Q&&Q1||Lt==35&&Q&&Q1||Lt==36&&Q&&Q1){if(y=new Ck(t,t.j|t.q),Q1)if((t.j&128)!=0){if(R=new eg(n-1),n=m6(y,A,n,P,!0,!0),A[n-1]!=93){for(;A[n-1]!=93;)n=m6(y,A,n+1,P,!0,!0),++R.a;t.f.add(R)}}else n=m6(y,A,n,P,Q,!1);else n=j$(y,A,n,P,Q);if(Q1=!1,y.q&&G(y.q,0)){x=l[v],l[v]=e.r,CD(e,y.q?G(y.q,0):null),x!=-1&&g!=512&&(h=J0(t.k,x,x,g),T!=0&&(t.p=!0,Xe(t.k,h,T,!0),Os(t.k,h))),g=1,T=0;continue}if(y.d==-1&&Lt!=63)throw At(new H1(\"SmilesParser: unknown element label found. Position:\"+(n-1)));y.r&&(t.p=!0),L=xa(y,t.k,Lt,n),W0(t.k,L)&&++t.b,x=l[v],x!=-1&&g!=512&&(h=J0(t.k,x,L,g),T!=0&&(t.p=!0,Xe(t.k,h,T,!0),Os(t.k,h))),g=1,T=0,l[v]=L,s!=0&&(O9(t.k,L,s),s=0),i&&(A1=bt?Be(bt,U1(x)):null,A1&&AQ(A1,L,(wt=n,y.d==1&&ge(t.k,L)==0,wt)),y.p&&(!bt&&(bt=new cP),Y=y.g==9?0:y.g,We(bt,U1(L),new Ab(t,L,n-2,x,Y,y.i))));continue}if(Lt==46){l[v]=-1,g=512;continue}if(Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64){if(Q1)throw At(new H1(\"SmilesParser: unexpected bond symbol inside square brackets: '\"+String.fromCharCode(Lt)+P4+(n-1)));for(C=0;Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64;){if(Lt==33)if(Lt=A[n++]&d1,Lt==64)T|=128;else if(Lt==45&&A[n]==62||Lt==60&&A[n]==45)C|=16,++n;else if(Lt==45)C|=1;else if(Lt==61)C|=2;else if(Lt==35)C|=4;else if(Lt==36)C|=32;else if(Lt==58)C|=8;else throw At(new H1(\"SmilesParser: bond symbol '\"+String.fromCharCode(Lt)+\"' not allowed after '!'. Position:\"+(n-1)));else if(Lt==64?T|=256:Lt==61?g=2:Lt==35?g=4:Lt==36?g=32:Lt==58?g=8:Lt==126?T|=15:Lt==47?i&&(g=257):Lt==92?i&&(g=129):(Lt==45&&A[n]==62||Lt==60&&A[n]==45)&&(g=16,++n),A[n]==44)for(T|=(g==16?62:Lt)==61?2:(g==16?62:Lt)==35?4:(g==16?62:Lt)==36?32:(g==16?62:Lt)==58?8:(g==16?62:Lt)==62?16:(g==16?62:Lt)==126?127:1;A[n]==44;)A[n+1]==60&&A[n+2]==45||A[n+1]==45&&A[n+2]==62?(T|=16,n+=3):(T|=(A[n+1]&d1)==61?2:(A[n+1]&d1)==35?4:(A[n+1]&d1)==36?32:(A[n+1]&d1)==58?8:(A[n+1]&d1)==62?16:(A[n+1]&d1)==126?127:1,n+=2);if(A[n]==59){++n,Lt=A[n++]&d1;continue}C!=0&&(T|=127&~C);break}continue}if(Lt<=32){n=P;continue}if(an(Lt)){if(ct=Lt-48,Q1){for(;n<P&&an(A[n]&d1);)ct=10*ct+A[n]-48,++n;s=ct}else{if(k=ht?n-3:n-2,tt=A[k]==45||A[k]==47||A[k]==92||A[k]==61||A[k]==35||A[k]==36||A[k]==58||A[k]==62||A[k]==126,ht&&n<P&&an(A[n]&d1)&&(ct=10*ct+A[n]-48,ht=!1,++n),ct>=yt.length){if(ct>=100)throw At(new H1(\"SmilesParser: ringClosureAtom number out of range: \"+ct));for(Xt=yt.length,rt=yt.length;rt<=ct;)rt=w.Math.min(100,rt+16);for(yt=(o8(rt),pP(yt,c(F,m,6,rt,15,1),0,rt)),D1=(o8(rt),pP(D1,c(F,m,6,rt,15,1),0,rt)),S1=(o8(rt),pP(S1,c(F,m,6,rt,15,1),0,rt)),Jt=(o8(rt),pP(Jt,c(F,m,6,rt,15,1),0,rt)),$=Xt;$<rt;$++)yt[$]=-1}if(yt[ct]==-1)yt[ct]=l[v],D1[ct]=n-1,S1[ct]=tt?g:-1,Jt[ct]=tt?T:0;else{if(yt[ct]==l[v])throw At(new H1(\"SmilesParser: ring closure to same atom\"));i&&bt&&(A1=Be(bt,U1(yt[ct])),A1&&AQ(A1,l[v],D1[ct]),A1=Be(bt,U1(l[v])),A1&&AQ(A1,yt[ct],n-1)),S1[ct]!=-1?g=S1[ct]:g==257?g=129:g==129&&(g=257),f=yt[ct],D=l[v],h=(T0=J0(t.k,f,D,g),qD(t.s,f+\"_\"+D,B(d(F,1),m,6,15,[D1[ct],n-1])),qD(t.s,D+\"_\"+f,B(d(F,1),m,6,15,[D1[ct],n-1])),av(t.a,f),av(t.a,D),T0),Jt[ct]!=0&&(T=Jt[ct]),T!=0&&(t.p=!0,Xe(t.k,h,Jt[ct],!0),Os(t.k,h)),yt[ct]=-1}g=1,T=0}continue}if(Lt==43)throw At(new H1(\"SmilesParser: '+' found outside brackets. Position:\"+(n-1)));if(Lt==40){if(l[v]==-1){H=!0;continue}++v,l.length==v&&(l=Mn(l,l.length+32)),l[v]=l[v-1];continue}if(Lt==41){if(v==0){if(!H)throw At(new H1(\"SmilesParser: Closing ')' without opening counterpart. Position:\"+(n-1)));l[0]=-1,H=!1;continue}--v;continue}if(Lt==91){Q1=!0;continue}if(Lt==93)throw At(new H1(\"SmilesParser: closing bracket at unexpected position:\"+(n-1)));if(Lt==37){ht=!0;continue}throw At(new H1(\"SmilesParser: unexpected character outside brackets: '\"+String.fromCharCode(Lt)+vM+(n-1)))}if(g!=1)throw At(new H1(\"SmilesParser: dangling open bond; position:\"+n));for(a=0;a<yt.length;a++)if(yt[a]!=-1)throw At(new H1(\"SmilesParser: dangling ring closure: \"+a+\"; position:\"+n));for(N=Tu(t.k),t.k.T=!0,ut(t.k,1),o=0;o<t.k.r;o++)if(eP(t.k,o)!=null)if(S=u3(t.k,o)[0],t.p||t.q==2){if(S!=9)if(t.i)for(et=0;et<S;et++)J0(t.k,o,i9(t.k,1),1);else S==0&&w1(t.k,o,1792,!0),S==1&&w1(t.k,o,1664,!0),S==2&&w1(t.k,o,1408,!0),S==3&&w1(t.k,o,896,!0)}else{if(S==9&&(S=0),!Ae(t.k,o)&&(!W0(t.k,o)||X(t.k,o)==6&&R1(t.k,o)==0)){for(F1=eQ(X(t.k,o)),b=!1,pt=G1(t.k,o),pt-=Cu(t.k,o,pt),pt+=S,W0(t.k,o)&&++pt,V1=F1,l0=0,m1=V1.length;l0<m1;++l0)if(U0=V1[l0],pt<=U0){b=!0,U0==pt+2?Je(t.k,o,48):U0==pt+1?Je(t.k,o,32):(U0!=pt||U0!=F1[0])&&aA(t.k,o,pt);break}b||aA(t.k,o,pt)}if(t.i||!fs(t.k,o))for(et=0;et<S;et++)J0(t.k,o,i9(t.k,1),1)}else!t.i&&(t.p||t.q==2)&&(S=Gh(t.k,o),S>=1&&w1(t.k,o,128,!0),S>=2&&w1(t.k,o,256,!0),S>=3&&w1(t.k,o,512,!0),S>=4&&w1(t.k,o,Qe,!0));if(!t.i&&(t.p||t.q==2)&&O5(t.k,!1),ut(t.k,1),rW(t),f1t(t,Q,t.p),t.k.u=null,t.k.T=!1,i&&(Ba(t),bt)){for(Qt=(St=new oD(bt).a.ad().Tb(),new UD(St));Qt.a.cd();)A1=(j=Qt.a.dd(),j.jd()),me(t.k,N[A1.a],mW(A1,N),!1);TD(t.k,0)}TD(t.k,0),r&&(st=new a8(t.d),gt(t.n,0)&&Z7(st,t.n),U9(st,t.k),i&&Kh(t.k)),(t.p||t.q==2)&&(ve(t.k,!0),up(t.k),Ej(t.k))}function fM(){fM=v1,Io=B(d(ft,2),DA,13,0,[B(d(ft,1),Dt,2,6,[\"e\",\"daXJ@@PjyITuiX@`!dahJ@@SJYIMMfPB#IaLJfxP IaAhl[`#!BDpAl@AL@[@Be}aL@[@@ !B|Osp?QZR?O_}}zGze`@##\"]),B(d(ft,1),Dt,2,6,[\"g\",\"gBa`@lde@XS@!gCA`@mDPOdku`#qbq qJt#!B[G|S_qgq !BjW}q]cga##\"]),B(d(ft,1),Dt,2,6,[\"o\",\"gGQHDDqIUjdB!gGQHHDqAeMjhB#qbqk qfQ]#!B@AL@[@@S@Fp@Dp !BFQ{~_q|ZGvUSYp##\"]),B(d(ft,1),Dt,2,6,[\"r\",\"gOQdEjHbAFQRBrtAaJ!gNQdEbHbABCTKPFDH#qbMwX qbM~X#!BNDm`ra?UjW~YBYX@ !Ba[zw?_x@?g~H?XO~##\"]),B(d(ft,1),Dt,2,6,[\"s\",\"gOp`ATigujj`H!gOp`ATiVKjj`H#qnyS` qY~eP#!BTLtk^sE?BOs|]pc} !BbOvw?_y??g~H?[_}##\"]),B(d(ft,1),Dt,2,6,[\"t\",\"gOP`@dcUZdB!gNp`@tiTMjj@`#q{ir` qkLrx#!Be`Bzr_wp?OC}|Osp !B?g~w@k_}m?vw@n[a##\"]),B(d(ft,1),Dt,2,6,[\"u\",\"daXB`Hrn@HrPEILt`D!daXB`DJn@HRUMjV@H#IxVaLJ` IylJhPP#!B[G}l@OKyDpAl@AL@[@@ !B@Fp@DpAl@AN]?`Al@AL##\"]),B(d(ft,1),Dt,2,6,[\"Sakurai\",\"gOQH@wAINvZ@pdcFe@x@!gOQH@wAIgJi@pdcFe@x@#qreKx qrLkx#!BDpAl@IknDw|S@Fp@ !Bb@JH?_x@b@JH?Ven##\"]),B(d(ft,1),Dt,2,6,[\"Mitsunobu\",\"gFP`ATfRhdPp`}KEYg]d@!gFP`ATfRhd`pekL{l`#qrLk qZLn#!B@hc}b@C~@h`YM` !B@hc}b@C~@h`YM`##\"]),B(d(ft,1),Dt,2,6,[\"Aldol-Addition\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gGQ@@dsuRAcJg@HUaX#qYEbp qYub#!BxOyBzLKg`dG~xG~{ !Bb@K~@Hc}FBIA@@##\"]),B(d(ft,1),Dt,2,6,[\"Aldol-Condensation\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gFQ@@`rrpdlHHpipBEXf@#qYEbp q^aU#!B{ZRRqA?AQfyA@L_C !B}QFw@h`B_tnH_P##\"]),B(d(ft,1),Dt,2,6,[\"Acetal-Aldol-Addition\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!daxL@@[df[ZjT@qQdxACdxABjTqf@#qB@`OuX qBtM{#!B_]]}rHKWw?y}uy[~GJbBu{wWqG| !BfJK~TIa]fJJghg{`pP@##\"]),B(d(ft,1),Dt,2,6,[\"Acetal-Aldol-Condensation\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!gNp`CTjUiV@qQS`DJg@HUVXV@#qB@`OuX qqj{`#!B?[_}b@Jw_?{}m~[~[N@Bm?vwkN| !BfsK~yzPrw}m?rzQM##\"]),B(d(ft,1),Dt,2,6,[\"Acetal-Aldol-Condensation-Cyclization\",\"dkLB@@ZURYUvUjljh@paHpr\\\\@`!didD@@yIfUXXHL@CFNS`D@#IXljNPY@@@ IXljIyA#!BbOw~_x`Bm?vH?[_}b@JH?_y?b@Jw?Xc} !BbOvH?Oy??`BH?Xa}?`C~_p##\"]),B(d(ft,1),Dt,2,6,[\"Enolester-Cleavage\",\"gOQ`@fdscT`_Qp!gOQ`@cdTASS@P#q}Kr` q}cNP#!B@k]}mpC~@k]}mqdY !Bb@K~@Hc}BfzH@hc}##\"]),B(d(ft,1),Dt,2,6,[\"propargylEnone\",\"gCa@@dmXFD@!gCa@@dkHD#qNT qLV#!BbOw~_?y? !B@AL@[@@S##\"]),B(d(ft,1),Dt,2,6,[\"Arndt-Eistert\",\"daiDaJYBBHj^{HhAYMpAaA@!daiD`FzLBHPVsZl@p`@#IyHHZ[@ IzDGBi`#!B?`Bw?H`Bn]{~\\\\g?~@Ox !B@rzH?_y?b@JH?_n~bOt##\"]),B(d(ft,1),Dt,2,6,[\"Curtius\",\"gO]IcVaDF[s{HhCIe@`!gN]HMWADHJfm`XP@#q~Jk` qytUX#!B@O{|b@Jw\\\\o{~_?x@ !Bj]y??g?~?[^G_hc}##\"]),B(d(ft,1),Dt,2,6,[\"diazomethanHomologation\",\"gFU@lQioIIs\\\\AyH!gFU@CPdimXD#qbM^ qbqk#!B?X`BbFZN?`C~_p !B@AL@[@@Su[x@Dp##\"]),B(d(ft,1),Dt,2,6,[zV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!deD@@Ldb`\\\\SUM@FqHPsDda`JF@XXIa`?tdHY@#qTEApX qQECf@#!BQzK~}ubbW`BEgcb]?a@gg[zO !BQzK~}ubbW`Ag{VVAQzJ~c?xP##\"]),B(d(ft,1),Dt,2,6,[zV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!gC`@DiZDE@#qPDA@p qQf#!BmpK~_x`Bm?tAs[]}?`BH_[_| !B_vp@[G|S##\"]),B(d(ft,1),Dt,2,6,[\"yne-Metathesis\",\"daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`!daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`#qT@q@ qt@Q@#!BZmoi@Fjo|SFe|IkGiU@ !BZmoi@Fjo|SFe|IkGiU@##\"]),B(d(ft,1),Dt,2,6,[\"ene-yne-Metathesis\",\"dcd@@LdPLPLWSSPAlrXwKlVRFCHXFa`zFAXXMa`?udqnWP!dcT@@LdbbplTsTt@[MeMr{Ela`jFAhXNa`VFCXXO}[J[et#qe@N@S@ qeHP@s@#!B?g?~@Oy?^gG}bOvw?H`E@PJw@hc}mp !B?`BH?[_}mpJH@oy??`AuC`Jw@hc}mp##\"]),B(d(ft,1),Dt,2,6,[\"Alkyne-Cyclisation\",\"gG`@DcO|CFAFC`@!gFp@DiTt@@CFAFC`@#qi\\\\V qiSt#!B_y[qA`Biu^zV@@ !B?g~w@k_}m?vw@`##\"]),B(d(ft,1),Dt,2,6,[\"Elimination-Claisen\",\"gNp`AldTQji@~a`!gGQ@@djmRA@#qtHUX qtSi#!Bm?vH?[\\\\B?g~H@hc} !B@AL@[@@S@Fp@Dp##\"]),B(d(ft,1),Dt,2,6,[\"imineFormationAzaCope\",\"daZH@LAIMUjd@pRL@!daZH@HAAn]jd@p`@#IGfaLJ` IFDzfK@#!BDpAl@IkqDpAl@AL@[@@ !BFaFw@h`BbOw~@H`BbOt##\"]),B(d(ft,1),Dt,2,6,[\"didehydroCopeWithAromatisation\",\"gNp@Di]ejDcjcr|wK`!gOp@DjWkB@@H#qrLkx q\\\\oQp#!B?g~H?K_}bGvH?H`B !Bm?w~@Hc}mpJw@ox@##\"]),B(d(ft,1),Dt,2,6,[\"symAldolNitrogenRing\",\"dovJ@GBfttf\\\\v\\\\qjViPCADGbDodnGp!doNJ@JCSmtefWTCaYjje@H#IlZXi]]yL~C IqMVCzaIim?#!BQtl_riY?Qtl_rfuvNCQ`uZd@NCQ`uVVu}?sA]P !B?`BH@ox@bGvH@k\\\\Bb@JH_Xa}b@K~_rYltUr|W@##\"]),B(d(ft,1),Dt,2,6,[\"Diels-Alder\",\"gFP@LdPLjA@!gFp@DiTujhB#qiZf qMSf#!B?_C}}?spIPFV@@ !B?g~w@k_}m?vw@`##\"]),B(d(ft,1),Dt,2,6,[\"Claisen-RA\",\"gGQ@@eKtRA@!gGQ@@djqRA@#qMsT qM\\\\V#!B_qL@Dw}l@Fp@Dp !B@AL@[@@S@Fp@Dp##\"]),B(d(ft,1),Dt,2,6,[\"Cope\",\"gGQ@DeZmRAbhcApIF@P@!gGQ@HeZmRAbhc@HIFC`@#qkNT qi\\\\V#!B_vp@[@@S@Fp@Dp !B_vp@[@@S@Fp@Dp##\"]),B(d(ft,1),Dt,2,6,[\"OxyCope\",\"gNq@@dr}SHFD@!gNq@@djkUHD#qynZ` qykbp#!B?g~w?Xc}mpJH@hc} !B@Fp@DpAl@AL@[@@S##\"]),B(d(ft,1),Dt,2,6,[\"Vinylcyclopropane\",\"gKP@DklVj@`!gKP@Di\\\\Vj@`#qaVh qTqh#!Bm?vH?PC~?K\\\\ !B?g|_Fa}eTv\\\\##\"]),B(d(ft,1),Dt,2,6,[\"Furan-CH2-OH-Rearrangement\",\"gOp`@tiguif`H!gOp`@tfWMZZ`H#qZna@ qZtM@#!BTLtk^sE?BOs|]pc} !BBOuPtdy?UGm@V]Ho##\"]),B(d(ft,1),Dt,2,6,[\"rearrangement1032\",\"gOp`ATieMji`H!gOp`ATeekZj`H#qaSnx qa]~P#!BTLtk^pc|LW?|]pc} !BBOpH?UCRSg}T^tAY##\"]),B(d(ft,1),Dt,2,6,[\"Pinacol-Rearrangement\",\"gNp`ATffjj@pPh!gOP`@tfXZhCAA`#qb^ix qb^oH#!B@k^H@k_}@k_~@Hc} !BbOvH@oy??`BH?PFf##\"]),B(d(ft,1),Dt,2,6,[\"1,3-WaterEliminationWith12Shift\",\"gJQ@@dmU@_SP!gKa@@`vtA}A@#qiTp qjap#!BbOvH@ox@bOt !BJdE?[@Al@AL##\"]),B(d(ft,1),Dt,2,6,[\"Epoxydation\",\"gB``ADcdCB@!gC``AhtUPGtt@#qqb qtQ#!BjW}Y\\\\YX@ !B?g~w?^Va##\"]),B(d(ft,1),Dt,2,6,[\"oxydativePropargylAmine13Shift\",\"gKi@HDEZpLHOQP!gJY@BDeVXB#qMr` qNTh#!BqiXTy{U?mW| !B@Fp@DpAl@AL##\"]),B(d(ft,1),Dt,2,6,[\"Baeyer-Villiger\",\"gFQ`@[dTAZ`LHP!gFQ`@jdrMPGtl@#qrak qrlK#!B_?{}mwvHs^FVP@ !BbOvH@oy?bOuQzP##\"]),B(d(ft,1),Dt,2,6,[KV,\"gGa@@dYs@XHFJIBDQbUeHPbLRl@!gFQ@@eNUPFJIBDQbUeHPbLRls@`#qbq] qfQk#!B@AOIDW}l@tD@Dp !B_qL@Dw}l_qNcDP##\"]),B(d(ft,1),Dt,2,6,[KV,\"gBa@@d\\\\`XP@!gJQ@@eOU@XpdHQFIVY`P#qbq qfQ@#!B@AOIDW}l !B_qL@Dw}l_qL##\"]),B(d(ft,1),Dt,2,6,[\"Hantzsch Thiazol\",\"daZHPDp@chaIMefh@ppDzTD~hYmC^bhbcPp]dQbUg~pp!gKXHL@aJWFe`H#qNPe@ qNj`#!BvuK[KUxv_yS[k_zhvuH !BTqa`FbpX?`@##\"]),B(d(ft,1),Dt,2,6,[\"Oxadiazole\",\"gOX`BEdTASW@XQ@!gOu@HPeKNMKTA@#qrDMX qpULX#!BmpK~@K_}Mlx@?`C~ !BZ?`C}v|m_rYR[z?\\\\##\"]),B(d(ft,1),Dt,2,6,[\"Imidazole\",\"dmeHPNg@qJqLbTtATijZ@LLJnuDmhWtSDXUFC`?rIoTAP!gOt@ATieuej`H#qDPpM_@ q~ZM`#!BqvKGg_yOqvKGg_xphrGkLcz@_sD !BTMHkACD@BOw|B@QT##\"]),B(d(ft,1),Dt,2,6,[\"1,2,3-Triazole\",\"gB`HAbIGXFDWiM@!gF|@ADeKXmT`P#QIp Q@v#!B_vpU?g}l !BTv]`YRqg?g|XK@##\"]),B(d(ft,1),Dt,2,6,[\"1,2,4-Triazole\",\"deFD@NALbbfASUW@FD]YJZLUCAVJ}?nES@!gO|@ABeKNLuRA@#qDB@FM q@LuP#!BY?r~@F_]jDJW`j`}Iaxx[UC] !BTv]@IPqgog|hCBT_##\"])])}function An(){An=v1,aE=new iD,ZE=B(d(ft,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",t0,t0,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),$E=B(d(Kt,1),t1,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),WE=B(d(E,2),m8,10,0,[null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0,2]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[1,2,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0,2,4,6]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2])]),_E=B(d(E,2),m8,10,0,[null,B(d(E,1),I,6,15,[1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,B(d(E,1),I,6,15,[-3]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),null,B(d(E,1),I,6,15,[-3]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3,4]),B(d(E,1),I,6,15,[2,3,4,5]),B(d(E,1),I,6,15,[2,3,6]),B(d(E,1),I,6,15,[2,3,4,7]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[1,2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[-3,3,5]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[6]),B(d(E,1),I,6,15,[4,6,7]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[-3,3,5]),B(d(E,1),I,6,15,[-2,4,6]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[5]),B(d(E,1),I,6,15,[6]),B(d(E,1),I,6,15,[4,6,7]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[1,3]),B(d(E,1),I,6,15,[1,2]),B(d(E,1),I,6,15,[1,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[-2,2,4]),B(d(E,1),I,6,15,[-1,1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[4,5]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3])]),XE=B(d(ft,1),Dt,2,6,[r4,i4,f4])}function J1(){J1=v1,a0=B(d(ft,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",t0,t0,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,t0,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),wr=B(d(Kt,1),t1,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),dE=B(d(E,1),I,6,15,[6]),gE=B(d(E,1),I,6,15,[2]),v9=B(d(E,2),m8,10,0,[null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0,2]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[1,2,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[2,4,6]),B(d(E,1),I,6,15,[1,3,5,7]),B(d(E,1),I,6,15,[0,2,4,6]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[2])]),Y4=B(d(E,2),m8,10,0,[null,B(d(E,1),I,6,15,[1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),null,null,B(d(E,1),I,6,15,[-3]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),null,B(d(E,1),I,6,15,[-3]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3,4]),B(d(E,1),I,6,15,[2,3,4,5]),B(d(E,1),I,6,15,[2,3,6]),B(d(E,1),I,6,15,[2,3,4,7]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[1,2]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[-3,3,5]),B(d(E,1),I,6,15,[-2]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[6]),B(d(E,1),I,6,15,[4,6,7]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[-3,3,5]),B(d(E,1),I,6,15,[-2,4,6]),B(d(E,1),I,6,15,[-1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[5]),B(d(E,1),I,6,15,[6]),B(d(E,1),I,6,15,[4,6,7]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[1,3]),B(d(E,1),I,6,15,[1,2]),B(d(E,1),I,6,15,[1,3]),B(d(E,1),I,6,15,[2,4]),B(d(E,1),I,6,15,[3,5]),B(d(E,1),I,6,15,[-2,2,4]),B(d(E,1),I,6,15,[-1,1]),null,B(d(E,1),I,6,15,[1]),B(d(E,1),I,6,15,[2]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[4]),B(d(E,1),I,6,15,[4,5]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3,4,5,6]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3,4]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[2,3]),B(d(E,1),I,6,15,[3])])}function aQ(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt;if(t.K||t.yb(e,Vi(t.L,e),W1(t.R,mt(t.L,e)),Z1(t.R,Rt(t.L,e))),ht=null,R1(t.L,e)!=0&&(A1=w.Math.abs(R1(t.L,e))==1?\"\":\"\"+w.Math.abs(R1(t.L,e)),ht=R1(t.L,e)<0?A1+\"-\":A1+\"+\"),H=null,wt=h0(t.L,e),z(wt,0)!=0&&(gt(V(wt,eo),0)&&(H=H==null?\"*\":H+\",*\"),gt(V(wt,Ao),0)&&(H=H==null?\"!*\":H+\",!*\"),gt(V(wt,no),0)?H=H==null?\"ha\":H+\",ha\":gt(V(wt,2),0)?H=H==null?\"a\":H+\",a\":gt(V(wt,4),0)&&(H=H==null?\"!a\":H+\",!a\"),gt(V(wt,S0),0)&&(H=H==null?\"s\":H+\",s\"),gt(V(wt,uP),0)&&(R=V(wt,uP),z(R,1792)==0?H=H==null?\"h0\":H+\",h0\":z(R,1664)==0?H=H==null?\"h1\":H+\",h1\":z(R,1408)==0?H=H==null?\"h2\":H+\",h2\":z(R,128)==0?H=H==null?\"h>0\":H+\",h>0\":z(R,384)==0?H=H==null?\"h>1\":H+\",h>1\":z(R,896)==0?H=H==null?\"h>2\":H+\",h>2\":z(R,Qe)==0?H=H==null?\"h<3\":H+\",h<3\":z(R,1536)==0?H=H==null?\"h<2\":H+\",h<2\":z(R,1152)==0&&(H=H==null?\"h1-2\":H+\",h1-2\")),gt(V(wt,yr),0)&&(D=V(wt,yr),z(D,Po)==0?H=H==null?\"c0\":H+\",c0\":z(D,Ef)==0?H=H==null?\"c+\":H+\",c+\":z(D,Sf)==0&&(H=H==null?\"c-\":H+\",c-\")),gt(V(wt,li),0)&&(st=V(wt,li),z(st,98304)==0?H=H==null?\"pi0\":H+\",pi0\":z(st,81920)==0?H=H==null?\"pi1\":H+\",pi1\":z(st,49152)==0?H=H==null?\"pi2\":H+\",pi2\":z(st,Gn)==0&&(H=H==null?\"pi>0\":H+\",pi>0\")),gt(V(wt,hi),0)&&(a=V(wt,hi),z(a,ro)==0?H=H==null?\"n1\":H+\",n1\":z(a,j2)==0?H=H==null?\"n2\":H+\",n2\":z(a,R2)==0?H=H==null?\"n3\":H+\",n3\":z(a,io)==0?H=H==null?\"n<3\":H+\",n<3\":z(a,KA)==0?H=H==null?\"n<4\":H+\",n<4\":z(a,Ti)==0?H=H==null?\"n>1\":H+\",n>1\":z(a,NP)==0?H=H==null?\"n>2\":H+\",n>2\":z(a,If)==0?H=H==null?\"n>3\":H+\",n>3\":z(a,3276800)==0?H=H==null?\"n1-2\":H+\",n1-2\":z(a,2228224)==0?H=H==null?\"n1-3\":H+\",n1-3\":z(a,2490368)==0&&(H=H==null?\"n2-3\":H+\",n2-3\")),gt(V(wt,xf),0)&&(l=V(wt,xf),z(l,Ty)==0?H=H==null?\"e0\":H+\",e0\":z(l,cy)==0?H=H==null?\"e1\":H+\",e1\":z(l,wy)==0?H=H==null?\"e2\":H+\",e2\":z(l,gy)==0?H=H==null?\"e3\":H+\",e3\":z(l,x6)==0?H=H==null?\"e<2\":H+\",e<2\":z(l,N6)==0?H=H==null?\"e<3\":H+\",e<3\":z(l,fo)==0?H=H==null?\"e<4\":H+\",e<4\":z(l,p2)==0?H=H==null?\"e>0\":H+\",e>0\":z(l,dy)==0?H=H==null?\"e>1\":H+\",e>1\":z(l,By)==0?H=H==null?\"e>2\":H+\",e>2\":z(l,Do)==0?H=H==null?\"e>3\":H+\",e>3\":z(l,G6)==0?H=H==null?\"e1-2\":H+\",e1-2\":z(l,O6)==0?H=H==null?\"e1-3\":H+\",e1-3\":z(l,q6)==0&&(H=H==null?\"e2-3\":H+\",e2-3\")),gt(V(wt,120),0)&&(rt=V(wt,120),z(rt,112)==0?H=H==null?\"!r\":H+\",!r\":z(rt,8)==0?H=H==null?\"r\":H+\",r\":z(rt,96)==0?H=H==null?\"rb<3\":H+\",rb<3\":z(rt,104)==0?H=H==null?\"rb2\":H+\",rb2\":z(rt,88)==0?H=H==null?\"rb3\":H+\",rb3\":z(rt,56)==0&&(H=H==null?\"rb4\":H+\",rb4\")),gt(V(wt,lr),0)&&(H=H==null?\"r\"+Fe(O0(V(wt,lr),22)):H+\",\"+(\"r\"+Fe(O0(V(wt,lr),22)))),gt(V(wt,l9),0)&&(H=eL(H,ZW(wt))),gt(V(wt,M2),0)&&(H=H==null?\"ox\"+Fe(Y1(O0(V(wt,M2),47),7)):H+\",\"+(\"ox\"+Fe(Y1(O0(V(wt,M2),47),7)))),gt(V(wt,d9),0)&&(H=H==null?\"f\":H+\",f\")),ge(t.L,e)!=0&&(H=eL(H,\"\"+ge(t.L,e))),St=0,jA(t.L,e)!=0)switch(jA(t.L,e)){case 16:ht=ht==null?\"|\":ht+\",|\";break;case 32:St=1;break;case 48:St=2}if(L=null,(t.G&64)==0){if(E9(t.L,e))L=\"?\";else if(OU(t.L,e)!=0&&(De(t.L,e)==0||A==null||A[De(t.L,e)][OA(t.L,e)]>1))if(O(t.L,e)==2)switch(OU(t.L,e)){case 2:L=xi(t.L,e)?\"p\":\"P\";break;case 1:L=xi(t.L,e)?\"m\":\"M\";break;default:L=\"*\"}else switch(OU(t.L,e)){case 1:L=xi(t.L,e)?\"r\":\"R\";break;case 2:L=xi(t.L,e)?\"s\":\"S\";break;default:L=\"*\"}}if((t.G&768)!=0&&(L=eL(L,\"\"+H0(t.L,e))),W=null,(t.G&16)!=0&&M1(t.L,e)!=0&&(W=\"\"+M1(t.L,e)),T=null,xQ(t.L,e)!=-1&&(h=e5(t,e),h!=-1&&(T=h==0?\"abs\":((h&255)==1?\"&\":\"or\")+(1+(h>>8)))),C=0,(t.G&je)==0&&(t.L.L?gt(V(h0(t.L,e),O1),0)&&(C=xt(t.L,e)):(X(t.L,e)!=6||ge(t.L,e)!=0||!t.q[e]||jA(t.L,e)!=0)&&(C=xt(t.L,e))),tt=!1,N=!1,r=(t.G&o0)!=0?null:eP(t.L,e),r!=null&&r.startsWith(\"]\")&&(tt=H==null,N=!0,H=eL((zt(1,r.length+1),r.substr(1)),H),r=null),r!=null?C=0:IA(t.L,e)!=null?(P=gt(V(h0(t.L,e),1),0)?\"[!\":\"[\",r=P+L5(t.L,e)+\"]\",r.length>5&&(r=P+IA(t.L,e).length+\"]\")):gt(V(h0(t.L,e),1),0)?r=\"?\":(X(t.L,e)!=6||ht!=null||H!=null&&(!tt||(t.G&g8)==0)||C>0||!t.q[e])&&(r=Vi(t.L,e)),gt(V(h0(t.L,e),O1),0)&&C==0&&(H=H==null?\"!s\":H+\",!s\"),et=0,!i0(t.L,e)&ye(t.L,e)&&$1(t,-8),r!=null?(et=t.vb(r),EP(t,W1(t.R,mt(t.L,e)),Z1(t.R,Rt(t.L,e)),r,!0),t.s[e]=!0):AK(t,e)&&Ez(t,W1(t.R,mt(t.L,e)),Z1(t.R,Rt(t.L,e)),e),ht!=null&&(t.Cb((t.X*2+1)/3|0),Qt=W1(t.R,mt(t.L,e))+((et+t.vb(ht))/2+1),yt=Z1(t.R,Rt(t.L,e))-((t.wb()*4-4)/8|0),EP(t,Qt,yt,ht,!0),t.Cb(t.X)),(t.G&2)!=0&&(H=\"\"+e),H!=null&&(N?t.Cb((t.X*5+1)/6|0):t.Cb((t.X*2+1)/3|0),Qt=W1(t.R,mt(t.L,e))-(et+t.vb(H))/2,yt=Z1(t.R,Rt(t.L,e))-((t.wb()*4-4)/8|0),EP(t,Qt,yt,H,!0),t.Cb(t.X)),L!=null&&(t.Cb((t.X*2+1)/3|0),Qt=W1(t.R,mt(t.L,e))-(et+t.vb(L))/2,yt=Z1(t.R,Rt(t.L,e))+((t.wb()*4+4)/8|0),Xt=t.C,t.L.P!=1&&(t.G&S0)==0&&$1(t,448),EP(t,Qt,yt,L,!1),$1(t,Xt),t.Cb(t.X)),W!=null&&(t.Cb((t.X*2+1)/3|0),Qt=W1(t.R,mt(t.L,e))+((et+t.vb(W))/2+1),yt=Z1(t.R,Rt(t.L,e))+((t.wb()*4+4)/8|0),Xt=t.C,$1(t,Fn(t.L,e)?384:448),EP(t,Qt,yt,W,!0),$1(t,Xt),t.Cb(t.X)),T!=null&&(n=LZ(t,e),t.Cb((t.X*2+1)/3|0),Qt=W1(t.R,mt(t.L,e))+.7*t.wb()*w.Math.sin(n),yt=Z1(t.R,Rt(t.L,e))+.7*t.wb()*w.Math.cos(n),Xt=t.C,!t.K&&t.L.P!=1&&$1(t,y5(t,e)),EP(t,Qt,yt,T,!1),$1(t,Xt),t.Cb(t.X)),C==0&&St==0){t.C==-8&&$1(t,-9);return}for(b=c(Ut,Tt,6,4,15,1),x=0;x<Le(t.L,e);x++)for(f=Nt(t.L,e,x),Y=0;Y<2;Y++)K(t.L,Y,f)==e&&(ct=_0(t.L,K(t.L,Y,f),K(t.L,1-Y,f)),ct<uo?(b[0]-=ct+HA,b[3]+=ct+l1):ct<0?(b[2]+=ct+HA,b[3]-=ct):ct<HA?(b[1]+=ct,b[2]+=HA-ct):(b[0]+=ct-HA,b[1]+=l1-ct));if(O(t.L,e)==0?rA(t.L,e)?b[3]-=.2:b[1]-=.2:b[1]-=.1,(ht!=null||W!=null)&&(b[1]+=10),(H!=null||L!=null)&&(b[3]+=10),k=\"\",C!=0&&(j=t.vb(\"H\"),v=0,g=t.wb(),C>1&&(k=\"\"+C,t.Cb((t.X*2+1)/3|0),v=t.vb(k)),b[1]<.6||b[3]<.6?(o=Z1(t.R,Rt(t.L,e)),b[1]<=b[3]?(b[1]+=10,Q=W1(t.R,mt(t.L,e))+(et+j)/2):(b[3]+=10,Q=W1(t.R,mt(t.L,e))-(et+j)/2-v)):(Q=W1(t.R,mt(t.L,e)),b[0]<b[2]?(b[0]+=10,o=Z1(t.R,Rt(t.L,e))-g):(b[2]+=10,o=Z1(t.R,Rt(t.L,e))+g)),v>0&&(Qt=Q+(j+v)/2,yt=o+((t.wb()*4+4)/8|0),EP(t,Qt,yt,k,!0),t.Cb(t.X)),EP(t,Q,o,\"H\",!0)),i=0,St!=0){for($=50,s=0,S=0;S<4;S++)y=S>1?S-2:S+2,b[S]<$?(i=S,$=b[S],s=b[y]):b[S]==$&&b[y]>s&&(i=S,s=b[y]);switch(i){case 0:Q=W1(t.R,mt(t.L,e)),o=Z1(t.R,Rt(t.L,e))-t.V-et/2;break;case 1:Q=W1(t.R,mt(t.L,e))+t.V+et/2,o=Z1(t.R,Rt(t.L,e));break;case 2:Q=W1(t.R,mt(t.L,e)),o=Z1(t.R,Rt(t.L,e))+t.V+et/2;break;default:Q=W1(t.R,mt(t.L,e))-t.V-et/2,o=Z1(t.R,Rt(t.L,e))}if(St==1)Ft(t.$,new lA(Q-t.V,o-t.V,2*t.V,2*t.V)),t.K||Ft(t.U,new Vu(Q,o,wQ(t,e)?-3:t.p[e]));else{switch(i){case 2:case 0:bt=2*t.V,Jt=0,Q-=t.V;break;case 1:bt=0,Jt=2*t.V,o-=t.V;break;default:bt=0,Jt=2*t.V,o-=t.V}Ft(t.$,new lA(Q-t.V,o-t.V,2*t.V,2*t.V)),t.K||Ft(t.U,new Vu(Q,o,wQ(t,e)?-3:t.p[e])),Ft(t.$,new lA(Q+bt-t.V,o+Jt-t.V,2*t.V,2*t.V)),t.K||Ft(t.U,new Vu(Q+bt,o+Jt,wQ(t,e)?-3:t.p[e]))}}t.C==-8&&$1(t,-9)}function p6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1,F1,T0,Y0,ZA,M0,B1,Ue,$e,kA,kr,M8,sP,yP,rn,mr,Kn,fn,b9,eD,lt,r1,C8,AD,nD,PD;if(e<t.g&&f0(t.q,e)){if(lf(t,e,5)){if(h=new pL(t.r),k=new pL(t.r),l=!1,N=!1,tt=!1,t.D[e]==6||t.D[e]==7){for(C=0;C<t.e[e];C++)if(lt=t.j[e][C],!!lf(t,lt,5))for(js(t,e,lt)&&(t.D[lt]==8||t.D[lt]==16||t.D[lt]==7&&t.e[lt]+xt(t,lt)==3&&!i2(t,lt))&&Ft(h,U1(lt)),T0=0;T0<t.e[lt];T0++)r1=t.j[lt][T0],r1!=e&&lf(t,r1,5)&&js(t,e,r1)&&(t.D[r1]==8||t.D[r1]==16||t.D[r1]==7&&t.e[r1]+xt(t,r1)==3&&!i2(t,r1))&&Ft(k,U1(r1));for(y=new Zt(h);y.a<y.c.a.length;)if(s=_t(y).a,t.D[s]==8||t.D[s]==16){N=!0;break}for(g=new Zt(k);g.a<g.c.a.length;)if(T=_t(g).a,t.D[T]==8||t.D[T]==16){tt=!0;break}for(R=0;R<h.a.length;R++)for(F1=R;F1<k.a.length;F1++)if(js(t,(ee(R,h.a.length),h.a[R]).a,(ee(F1,k.a.length),k.a[F1]).a)){l=!0;break}}switch(t.D[e]){case 6:if(k.a.length==0){for($e=0,ZA=0,B1=0,Ue=0,R=0;R<t.e[e];R++)lt=t.j[e][R],t.D[lt]==7&&t.e[lt]+xt(t,lt)==3&&(++$e,t.t[lt]>0&&!i2(t,lt)&&++ZA,lf(t,lt,5)&&++B1,lf(t,lt,6)&&++Ue);if(($e==2&&B1>0||$e==3&&B1==2)&&ZA>0&&Ue==0)return 80}if(!(h.a.length==0^k.a.length==0)){for(PD=!0,nD=!0,R=0;R<t.e[e];R++)lt=t.j[e][R],(t.D[lt]!=6||!jJ(t,lt))&&(PD=!1),js(t,e,lt)&&!(lt<t.g&&f0(t.q,lt))&&(nD=!1);if(h.a.length==0&&k.a.length==0&&!PD&&nD||h.a.length!=0&&h.a.length!=0&&(!l||!N&&!tt))return 78}if(h.a.length!=0&&(k.a.length==0||N))return 63;if(k.a.length!=0&&(h.a.length==0||tt))return 64;break;case 7:if(i2(t,e))return 82;if(h.a.length==0&&k.a.length==0)return t.e[e]+xt(t,e)==3?39:76;if(t.e[e]+xt(t,e)==3&&h.a.length==0^k.a.length==0)return 81;if(h.a.length!=0&&(k.a.length==0||N))return 65;if(k.a.length!=0&&(h.a.length==0||tt))return 66;if(h.a.length!=0&&k.a.length!=0)return 79;break;case 8:return 59;case 16:return 44}}if(lf(t,e,6))switch(t.D[e]){case 6:return 37;case 7:return i2(t,e)?69:t.e[e]+xt(t,e)==3?58:38}}switch(t.D[e]){case 3:if(t.k[e]==0)return 92;break;case 6:if(t.e[e]+xt(t,e)==4)return(t.q&&e<t.g?UA(t.q,e):0)==3?22:(t.q&&e<t.g?UA(t.q,e):0)==4?20:1;if(t.e[e]+xt(t,e)==3){for(kA=0,kr=0,sP=0,Kn=0,b=0,C=0;C<t.e[e];C++)lt=t.j[e][C],dt(t,o1(t,e,lt))==2&&(b=t.D[lt]),t.e[lt]+xt(t,lt)==1?(t.D[lt]==8&&++sP,t.D[lt]==16&&++Kn):t.D[lt]==7&&(t.e[lt]+xt(t,lt)==3?++kr:t.e[lt]+xt(t,lt)==2&&dt(t,o1(t,e,lt))==2&&++kA);return kr>=2&&kA==0&&b==7?57:sP==2||Kn==2?41:(t.q&&e<t.g?UA(t.q,e):0)==4&&b==6?30:b==7||b==8||b==15||b==16?3:2}if(t.e[e]+xt(t,e)==2)return 4;if(t.e[e]+xt(t,e)==1)return 60;break;case 7:for(b9=0,V1=!1,S=0;S<t.e[e];S++)if(lt=t.j[e][S],t.D[lt]==8&&t.e[lt]+xt(t,lt)==1&&++b9,G1(t,e)+xt(t,e)>=3&&(t.D[lt]==15||t.D[lt]==16)){for(mr=0,F1=0;F1<t.e[lt];F1++)r1=t.j[lt][F1],t.D[r1]==8&&t.e[r1]+xt(t,r1)==1&&++mr;V1||(V1=mr>=2)}if(t.e[e]+xt(t,e)==4)return i2(t,e)?68:34;if(t.e[e]+xt(t,e)==3){if(G1(t,e)+xt(t,e)>=4){for(j=!1,R=0;R<t.e[e];R++)if(lt=t.j[e][R],dt(t,o1(t,e,lt))==2&&(j=t.D[lt]==7||t.D[lt]==6,t.D[lt]==6))for(F1=0;j&&F1<t.e[lt];F1++)r1=t.j[lt][F1],r1!=e&&(j=!(t.D[r1]==7&&t.e[r1]+xt(t,r1)==3));if(b9==1)return 67;if(b9>=2)return 45;if(j)return 54}if(G1(t,e)+xt(t,e)>=3){for(ht=!1,st=!1,wt=!1,rt=!1,Qt=!1,A1=!1,A=0,n=0,P=0,r=0,f=0,o=0,R=0;R<t.e[e];R++)if(lt=t.j[e][R],t.D[lt]==6){for(Qt=!0,lt<t.g&&f0(t.q,lt)&&(t.q&&lt<t.g?UA(t.q,lt):0)==6&&(A1=!0),P=0,r=0,f=0,o=0,ZA=0,x=0,F1=0;F1<t.e[lt];F1++){if(r1=t.j[lt][F1],v=o1(t,lt,r1),dt(t,v)==2&&(t.D[r1]==8||t.D[r1]==16)&&(ht=!0),(dt(t,v)==2||v<t.i&&Ee(t.q,v)&&(t.D[r1]==6||t.D[r1]==7&&Tz(t,r1)==1))&&(A=t.D[r1]),dt(t,v)==3&&(n=t.D[r1]),t.D[r1]==7&&t.e[r1]+xt(t,r1)==3){for(t.t[r1]==1&&++ZA,lf(t,lt,6)&&++x,Q=0,Y0=0;Y0<t.e[r1];Y0++)C8=t.j[r1][Y0],t.D[C8]==8&&++Q;Q<2&&++r}t.D[r1]==7&&t.e[r1]+xt(t,r1)==2&&(dt(t,v)==2||v<t.i&&Ee(t.q,v))&&++P,r1<t.g&&f0(t.q,r1)&&(t.D[r1]==8&&++f,t.D[r1]==16&&++o)}A==7&&(r==2&&P==0&&ZA>0&&x==0&&t.e[lt]+xt(t,lt)<4&&(st=!0),r==3&&(wt=!0))}else if(t.D[lt]==7){for(i=0,D=0,L=0,F1=0;F1<t.e[lt];F1++)if(r1=t.j[lt][F1],v=o1(t,lt,r1),dt(t,v)==2){if(t.D[r1]==6){for(Y0=0;Y0<t.e[r1];Y0++)C8=t.j[r1][Y0],C8!=e&&(t.D[C8]==7?++i:t.D[C8]==8?++D:t.D[C8]==16&&++L);i==0&&D==0&&L==0&&!A1&&(rt=!0)}t.D[r1]==7&&!A1&&(rt=!0)}}if(Qt){if(n==7&&(V1=!0),st)return 55;if(wt)return 56;if(!ht&&!V1&&(f==0&&o==0&&A1||A==6||A==7||A==15||n==6))return 40}if(!V1&&(ht||rt))return 10}}if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==4){for($=!1,R=0;!$&&R<t.e[e];R++)lt=t.j[e][R],$=dt(t,o1(t,e,lt))==3;return $?61:53}if(G1(t,e)+xt(t,e)==3){for(yt=!1,W=!1,R=0;R<t.e[e];R++)lt=t.j[e][R],dt(t,o1(t,e,lt))==2&&(yt=t.D[lt]==8&&b9==1,W=t.D[lt]==6||t.D[lt]==7);if(yt&&!W)return 46;if(W)return 9}if(G1(t,e)+xt(t,e)>=2){for(Xt=!1,R=0;R<t.e[e];R++)if(lt=t.j[e][R],t.D[lt]==16){for(eD=0,F1=0;F1<t.e[lt];F1++)r1=t.j[lt][F1],t.D[r1]==8&&t.e[r1]+xt(t,r1)==1&&++eD;Xt=eD==1}if(Xt)return 48;if(!V1)return 62}}if(V1)return 43;if(t.e[e]+xt(t,e)==1){for(St=!1,a=!1,R=0;!St&&!a&&R<t.e[e];R++)if(lt=t.j[e][R],St=dt(t,o1(t,e,lt))==3,t.D[lt]==7&&t.e[lt]+xt(t,lt)==2)for(F1=0;!a&&F1<t.e[lt];F1++)r1=t.j[lt][F1],a=t.D[r1]==7&&t.e[r1]+xt(t,r1)==2||t.D[r1]==6&&t.e[r1]+xt(t,r1)==3;if(St)return 42;if(a)return 47}return 8;case 8:if(t.e[e]+xt(t,e)==3)return 49;if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==3)return 51;for(M0=0,R=0;R<t.e[e];R++)lt=t.j[e][R],t.D[lt]==1&&++M0;return M0+xt(t,e)==2?70:6}if(t.k[e]<=1){for(M8=0,rn=0,fn=0,Q1=t.e[e]-t.k[e]+xt(t,e)>0,Y=!1,H=!1,D1=!1,Jt=!1,Lt=!1,ct=!1,bt=!1,m1=!1,U0=!1,l0=!1,pt=!1,R=0;R<t.e[e]&&!(Q1||Y||H||D1||Jt||Lt||ct||bt||m1||U0||l0||pt);R++){if(lt=t.j[e][R],t.D[lt]==6||t.D[lt]==7||t.D[lt]==16)for(F1=0;F1<t.e[lt];F1++)r1=t.j[lt][F1],t.D[r1]==7&&t.e[r1]+xt(t,r1)==2&&++M8,t.D[r1]==8&&t.e[r1]+xt(t,r1)==1&&++rn,t.D[r1]==16&&t.e[r1]+xt(t,r1)==1&&++fn;Q1=t.D[lt]==1,t.D[lt]==6&&(Y=rn==2,H=dt(t,o1(t,e,lt))==2,D1=dt(t,o1(t,e,lt))==1&&rn==1),t.D[lt]==7&&(Jt=dt(t,o1(t,e,lt))==2,dt(t,o1(t,e,lt))==1&&rn==1&&(Lt=t.e[lt]+xt(t,lt)==2||G1(t,lt)+xt(t,lt)==3,ct=G1(t,lt)+xt(t,lt)==4),bt=rn>=2),t.D[lt]==16&&(m1=fn==1,U0=dt(t,o1(t,e,lt))==1||dt(t,o1(t,e,lt))==2&&rn+M8>1,l0=dt(t,o1(t,e,lt))==2&&rn+M8==1),pt=t.D[lt]==15||t.D[lt]==17}if(D1||Lt||Q1)return 35;if(Y||bt||ct||m1||U0||pt)return 32;if(H||Jt||l0)return 7}break;case 9:if(t.k[e]==1)return 11;if(t.k[e]==0)return 89;break;case 11:if(t.k[e]==0)return 93;break;case 12:if(t.k[e]==0)return 99;break;case 14:return 19;case 15:if(t.e[e]+xt(t,e)==4)return 25;if(t.e[e]+xt(t,e)==3)return 26;if(t.e[e]+xt(t,e)==2)return 75;break;case 16:if(t.e[e]+xt(t,e)==3||t.e[e]+xt(t,e)==4){for(yP=0,fn=0,et=!1,R=0;R<t.e[e];R++)lt=t.j[e][R],t.D[lt]==6&&dt(t,o1(t,e,lt))==2&&(et=!0),(t.k[lt]==1&&t.D[lt]==8||t.e[lt]+xt(t,lt)==2&&t.D[lt]==7)&&++yP,t.k[lt]==1&&t.D[lt]==16&&++fn;return t.e[e]+xt(t,e)==3&&yP==2&&et||t.e[e]+xt(t,e)==4?18:yP>0&&fn>0||yP==2&&!et?73:17}if(t.e[e]+xt(t,e)==2){for(S1=!1,R=0;R<t.e[e];R++)lt=t.j[e][R],t.D[lt]==8&&dt(t,o1(t,e,lt))==2&&(S1=!0);return S1?74:15}if(t.e[e]+xt(t,e)==1){for(AD=0,et=!1,R=0;R<t.e[e];R++){for(lt=t.j[e][R],F1=0;F1<t.e[lt];F1++)r1=t.j[lt][F1],t.D[r1]==16&&t.e[r1]+xt(t,r1)==1&&++AD;t.D[lt]==6&&dt(t,o1(t,e,lt))==2&&(et=!0)}return et&&AD!=2?16:72}break;case 17:if(t.k[e]==4){for(sP=0,R=0;R<t.e[e];R++)lt=t.j[e][R],t.D[lt]==8&&++sP;if(sP==4)return 77}if(t.k[e]==1)return 12;if(t.k[e]==0)return 90;break;case 19:if(t.k[e]==0)return 94;break;case 20:if(t.k[e]==0)return 96;break;case 26:if(t.k[e]==0){if(t.t[e]==2)return 87;if(t.t[e]==3)return 88}break;case 29:if(t.k[e]==0){if(t.t[e]==1)return 97;if(t.t[e]==2)return 98}break;case 30:if(t.k[e]==0)return 95;break;case 35:if(t.k[e]==1)return 13;if(t.k[e]==0)return 91;break;case 53:if(t.k[e]==1)return 14}return 0}function M6(){M6=v1,gl=B(d(XA,1),re,6,14,[524290,524292,524297,524301,589826,589827,589828,589829,589832,589833,589837,589838,688130,688131,688132,688137,688141,819202,819203,819204,819205,819208,819209,1114114,1114115,1114116,1114120,1212420,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17465346,1074266116,1208483842,1208483844,1208549378,1208549379,1208549380,1208549384,1208549388,1409810434,1409875970,1409875971,1409875972,1409875976,1409974274,1409974280,1409974284,1678311426,1678311427,1678311428,1678311432,1678311436,1678409730,1678409731,1678409732,1678540802,1678540803,1678540804,1678540808,2282291202,2282291203,2282389506,2282389507,2282520578,2282520579,2483617794,2483617795,2483716098,2483716099,2752675842,3356033026,3557359618,3557457922,3557588994,34510798850,34510798851,34510798852,34510798856,34712125442,34712125443,34712125444,34712125448,34712223746,34712223747,34712223748,34980560898,34980560899,34980659202,35568287746,35568287747,35568287748,35568287752,35568386050,35568386051,35568386052,35568517122,35568517123,35568517124,35568517128,35568812034,35568812035,35568910338,35568910339,35568910350,35569336322,35585064962,35585064963,35585064964,35585064968,35769548802,35769614338,35769712642,35769843714,35786391554,ZC,WC,_C,$C,aC,tH,eH,AH,nH,PH,rH,iH,fH,3437652377603,DH,uH,4674334294019,QH,oH,4674602827778,UH,LH,sH,yH,5086651154435,lH,5086651252739,hH,5086651252744,TH,5086919589896,cH,5086919819266,wH,gH,dH,5636675633154,{l:589826,m:73760,h:4},{l:589827,m:73760,h:4},{l:688130,m:73760,h:4},{l:819202,m:73760,h:4},{l:65538,m:73764,h:4},{l:65539,m:73764,h:4},{l:589826,m:172064,h:4},{l:589827,m:172064,h:4},{l:688130,m:172064,h:4},{l:819202,m:172064,h:4},{l:819203,m:172064,h:4},{l:65538,m:172068,h:4},{l:65539,m:172068,h:4},{l:589826,m:172112,h:4},{l:589827,m:172112,h:4},{l:688130,m:172112,h:4},{l:819202,m:172112,h:4},{l:65538,m:172116,h:4},{l:163842,m:172116,h:4},{l:589826,m:303136,h:4},{l:688130,m:303136,h:4},{l:819202,m:303136,h:4},{l:65538,m:303140,h:4},{l:589826,m:303184,h:4},{l:688130,m:303184,h:4},{l:819202,m:303184,h:4},{l:65538,m:303188,h:4},BH,vH,FH,kH,mH,bH,jH,{l:688130,m:590224,h:4},{l:819202,m:590224,h:4},RH,pH,MH,CH,HH,VH,EH,SH,{l:688135,m:590416,h:4},IH,{l:1212430,m:590416,h:4},{l:65538,m:598052,h:4},{l:65538,m:598100,h:4},{l:65539,m:598100,h:4},{l:163842,m:598100,h:4},{l:163843,m:598100,h:4},xH,NH,GH,{l:688131,m:598304,h:4},OH,qH,zH,KH,JH,{l:589826,m:688672,h:4},YH,XH,ZH,WH,{l:589827,m:590112,h:336},_H,$H,aH,tV,eV,AV,nV,PV,rV,{l:688130,m:819536,h:400},iV,fV,DV,{l:589831,m:590112,h:592},uV,QV,oV,UV,LV,sV,{l:819207,m:819600,h:592},yV,lV,hV,{l:589832,m:1212816,h:592},{l:688136,m:1212816,h:592},TV,cV,wV,gV,dV,{l:589826,m:819488,h:8480},BV,vV,FV,kV,{l:819208,m:1213008,h:8480},mV,bV,{l:688130,m:590160,h:8484},{l:589826,m:598304,h:8484},jV,{l:819202,m:598304,h:8484}]),_f=B(d(Oe,1),uA,6,15,[-.1899999976158142,1.2699999809265137,-.7009999752044678,2.690999984741211,-.22699999809265137,MM,.10599999874830246,-.47600001096725464,-.44699999690055847,-.19099999964237213,-.3330000042915344,.0860000029206276,.24699999392032623,-.06199999898672104,.01600000075995922,.3869999945163727,.23499999940395355,-.4320000112056732,-.902999997138977,.38999998569488525,.5809999704360962,4.52400016784668,-.6349999904632568,-.2800000011920929,.7699999809265137,-.05000000074505806,1.0870000123977661,.19200000166893005,.19599999487400055,-.5199999809265137,.5419999957084656,.3630000054836273,.7919999957084656,.5920000076293945,.9639999866485596,CV,-.6850000023841858,-.3149999976158142,-.4129999876022339,-.5950000286102295,.2199999988079071,-1.4320000410079956,-2.253999948501587,.4399999976158142,-.27000001072883606,-.13300000131130219,-.26899999380111694,.2669999897480011,.5720000267028809,-.5680000185966492,.17399999499320984,-.1850000023841858,-.23499999940395355,GV,OV,-.34200000762939453,-.3479999899864197,-.43700000643730164,-.8040000200271606,-.41200000047683716,-.2150000035762787,-.625,-.8309999704360962,.4970000088214874,-.4309999942779541,-1.3309999704360962,.5070000290870667,-.6320000290870667,-.5989999771118164,-.15600000321865082,-.3529999852180481,-.164000004529953,-.4410000145435333,-.4970000088214874,-1.059999942779541,.11500000208616257,-.22499999403953552,-.15399999916553497,-.03099999949336052,-1.5740000009536743,-1.093000054359436,SV,-.44999998807907104,-.5559999942779541,OV,2.384000062942505,1.75,-1.6660000085830688,-1.065999984741211,1.3270000219345093,.8029999732971191,-1.5049999952316284,-2.5369999408721924,GV,.14900000393390656,.5210000276565552,2.9049999713897705,-.25200000405311584,.8600000143051147,.3610000014305115,.40299999713897705,.004999999888241291,1.1460000276565552,.9359999895095825,-.30000001192092896,.20900000631809235,-.5830000042915344,-.024000000208616257,-.009999999776482582,.6110000014305115,.4860000014305115,.8619999885559082,-.03500000014901161,-.5960000157356262,1.1610000133514404,1.6469999551773071,.843999981880188,.125,.1420000046491623,-.17100000381469727,.44200000166893005,.08799999952316284,3.065999984741211,1.6519999504089355,qV,-.017999999225139618,.023000000044703484,.0729999989271164,.2540000081062317,.5540000200271606,.5950000286102295,-.4059999883174896,-.6370000243186951,-.17399999499320984,-.10100000351667404,-.5429999828338623,-2.4059998989105225,-3.2920000553131104,-.05299999937415123,-.19300000369548798,g4,-1.2610000371932983,-.656000018119812,-.7300000190734863,-.9380000233650208,.12800000607967377,1.1540000438690186,.24199999868869781,-.5289999842643738,-.27799999713897705,-.8019999861717224,.9120000004768372,-1.38100004196167,.46299999952316284,1.0740000009536743,-.628000020980835,-.9620000123977661,-1.8320000171661377,-1.4989999532699585,-2.115999937057495,-2.2070000171661377,-1.3170000314712524,2.500999927520752,-.8489999771118164,VV,-.621999979019165,2.121999979019165,-2.2260000705718994,.9129999876022339,-2.259000062942505,-1.25,1.3940000534057617,-1.4019999504089355,2.072999954223633,-2.9570000171661377,.29100000858306885,-3.4760000705718994,-2.7269999980926514,-3.131999969482422,-2.119999885559082,-.7250000238418579,-.296999990940094,.08299999684095383,.34700000286102295,-1.4249999523162842,-1.659999966621399,-1.281999945640564,-1.2649999856948853,.718999981880188,.1379999965429306,1.3020000457763672,.859000027179718,1.3589999675750732,.6589999794960022,-.9399999976158142,.8999999761581421,.3190000057220459,-2.571000099182129,1.1089999675750732,.972000002861023,1.652999997138977,2.6019999980926514,.7289999723434448,1.065999984741211,1.0670000314712524,-.3109999895095825,.03099999949336052,qV,-.6809999942779541,-1.2580000162124634,iC,-3.0959999561309814,-.2280000001192093,1.9329999685287476,.11900000274181366,2.1080000400543213,.11299999803304672,1.628000020980835,1.3079999685287476,3.3359999656677246,.7540000081062317,-.4650000035762787,-.3970000147819519,.07699999958276749,-.4790000021457672,-.15299999713897705,.14100000262260437,2.134999990463257,.23399999737739563,.460999995470047,.6700000166893005,-.3610000014305115,-1.0390000343322754,-.4830000102519989,.13699999451637268,-.7680000066757202,-.5109999775886536,3.4240000247955322,-.8550000190734863,-.5849999785423279,-1.5670000314712524,3.3429999351501465,1.840000033378601,.3889999985694885,1.121999979019165,d4,1.3350000381469727,.3659999966621399,-.5569999814033508,.4320000112056732,.20399999618530273,.8820000290870667,.4659999907016754,-.4580000042915344,.40400001406669617,.6570000052452087,1.1150000095367432,1.9759999513626099,1.7860000133514404,-.035999998450279236,-1.0499999523162842,1.0449999570846558,.04399999976158142,1.0329999923706055,-1.0800000429153442,2.5390000343322754,2.234999895095825,l4,3.121000051498413,3.931999921798706,2.75])}function DM(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N,tt,H,Y,et,W,$,a,st,ht,wt,rt,ct,Xt,St,A1,Qt,bt,yt,Jt,S1,D1,Q1,Lt,pt,U0,V1,l0,m1,F1,T0,Y0,ZA,M0,B1,Ue,$e,kA,kr,M8,sP,yP,rn,mr,Kn,fn,b9,eD,lt,r1,C8,AD,nD,PD,Sc,Ic,xc,Nc,Gc,Oc,qc,zc,Il,xl,Kc,Jc,Yc,Xc,Zc,Wc,Dn,_c,$c,ac,tw,ew,Aw,nw,Pw,rw,iw,fw,zP,Dw,H8,Z2,W2,ES,Nl,SS,IS,xS,NS,i1,uw,GS,OS,qS,j9,zS,KP,_2,Gl,Zo,KS,lP,Ol,JS,Wo,YS,_o,XS,$o;if(zL(e),e.d=null,!(A==null||0>=A.length)){if(t.g=e,Ol=8,n!=null&&(P<0||P>=n.length)&&(n=null),DL(t,A,0),f=nt(t,4),C=nt(t,4),f>8&&(Ol=f,f=C),f==0){ve(t.g,nt(t,1)==1);return}for(D=nt(t,f),Q=nt(t,C),NS=nt(t,f),qS=nt(t,f),GS=nt(t,f),ht=nt(t,f),y=0;y<D;y++)i9(t.g,6);for($e=0;$e<NS;$e++)$0(t.g,nt(t,f),7);for(kA=0;kA<qS;kA++)$0(t.g,nt(t,f),8);for(lt=0;lt<GS;lt++)$0(t.g,nt(t,f),nt(t,8));for(Oc=0;Oc<ht;Oc++)b0(t.g,nt(t,f),nt(t,4)-8);for(wt=1+Q-D,yt=nt(t,4),R=0,de(t.g,0,0),Ve(t.g,0,0),Yn(t.g,0,0),Jt=n!=null&&n[P]>=39,lP=0,Wo=0,_o=0,$o=0,St=!1,A1=!1,Jt&&(n.length>2*D-2&&n[2*D-2]==39||n.length>3*D-3&&n[3*D-3]==39?(A1=!0,St=n.length==3*D-3+9,zP=St?3*D-3:2*D-2,j=86*(n[zP+1]-40)+n[zP+2]-40,lP=w.Math.pow(10,j/2e3-1),zP+=2,JS=86*(n[zP+1]-40)+n[zP+2]-40,Wo=w.Math.pow(10,JS/1500-1),zP+=2,YS=86*(n[zP+1]-40)+n[zP+2]-40,_o=w.Math.pow(10,YS/1500-1),St&&(zP+=2,XS=86*(n[zP+1]-40)+n[zP+2]-40,$o=w.Math.pow(10,XS/1500-1))):St=n.length==3*D-3),t.ac()&&St&&(n=null,Jt=!1),Dn=1;Dn<D;Dn++){if(Q1=nt(t,yt),Q1==0){Jt&&(de(t.g,Dn,t.g.K[0].a+8*(n[Dn*2-2]-83)),Ve(t.g,Dn,t.g.K[0].b+8*(n[Dn*2-1]-83)),St&&Yn(t.g,Dn,t.g.K[0].c+8*(n[2*D-3+Dn]-83))),++wt;continue}R+=Q1-1,Jt&&(de(t.g,Dn,mt(t.g,R)+n[Dn*2-2]-83),Ve(t.g,Dn,Rt(t.g,R)+n[Dn*2-1]-83),St&&Yn(t.g,Dn,oA(t.g,R)+(n[2*D-3+Dn]-83))),J0(t.g,R,Dn,1)}for(nw=0;nw<wt;nw++)J0(t.g,nt(t,f),nt(t,f),1);for(Dw=c(Pt,it,6,Q,16,1),Y=0;Y<Q;Y++)switch(et=nt(t,2),et){case 0:Dw[Y]=!0;break;case 2:g0(t.g,Y,2);break;case 3:g0(t.g,Y,4)}for(i=nt(t,f),Pw=0;Pw<i;Pw++)if(s=nt(t,f),Ol==8)j9=nt(t,2),j9==3?(Ne(t.g,s,1,0),me(t.g,s,1,!1)):me(t.g,s,j9,!1);else switch(j9=nt(t,3),j9){case 4:me(t.g,s,1,!1),Ne(t.g,s,1,nt(t,3));break;case 5:me(t.g,s,2,!1),Ne(t.g,s,1,nt(t,3));break;case 6:me(t.g,s,1,!1),Ne(t.g,s,2,nt(t,3));break;case 7:me(t.g,s,2,!1),Ne(t.g,s,2,nt(t,3));break;default:me(t.g,s,j9,!1)}for(Ol==8&&nt(t,1)==0&&(t.g.M=!0),r=nt(t,C),rw=0;rw<r;rw++)if(x=nt(t,C),c1(t.g,x)==1)switch(j9=nt(t,3),j9){case 4:Q8(t.g,x,1,!1),T8(t.g,x,1,nt(t,3));break;case 5:Q8(t.g,x,2,!1),T8(t.g,x,1,nt(t,3));break;case 6:Q8(t.g,x,1,!1),T8(t.g,x,2,nt(t,3));break;case 7:Q8(t.g,x,2,!1),T8(t.g,x,2,nt(t,3));break;default:Q8(t.g,x,j9,!1)}else Q8(t.g,x,nt(t,2),!1);for(ve(t.g,nt(t,1)==1),L=null,Zo=null,uw=0;nt(t,1)==1;)switch(bt=uw+nt(t,4),bt){case 0:for(i1=nt(t,f),iw=0;iw<i1;iw++)s=nt(t,f),w1(t.g,s,O1,!0);break;case 1:for(i1=nt(t,f),fw=0;fw<i1;fw++)s=nt(t,f),SS=nt(t,8),O9(t.g,s,SS);break;case 2:for(i1=nt(t,C),kr=0;kr<i1;kr++)nt(t,C);break;case 3:for(i1=nt(t,f),M8=0;M8<i1;M8++)s=nt(t,f),w1(t.g,s,S0,!0);break;case 4:for(i1=nt(t,f),sP=0;sP<i1;sP++)s=nt(t,f),Gl=Wt(nt(t,4),3),w1(t.g,s,Gl,!0);break;case 5:for(i1=nt(t,f),yP=0;yP<i1;yP++)s=nt(t,f),o=Wt(nt(t,2),1),w1(t.g,s,o,!0);break;case 6:for(i1=nt(t,f),rn=0;rn<i1;rn++)s=nt(t,f),w1(t.g,s,1,!0);break;case 7:for(i1=nt(t,f),mr=0;mr<i1;mr++)s=nt(t,f),M0=Wt(nt(t,4),7),w1(t.g,s,M0,!0);break;case 8:for(i1=nt(t,f),Kn=0;Kn<i1;Kn++){for(s=nt(t,f),k=nt(t,4),T=c(F,m,6,k,15,1),H8=0;H8<k;H8++)g=nt(t,8),T[H8]=g;MT(t.g,s,T)}break;case 9:for(i1=nt(t,C),fn=0;fn<i1;fn++)x=nt(t,C),Gl=nt(t,2)<<7,Xe(t.g,x,Gl,!0);break;case 10:for(i1=nt(t,C),b9=0;b9<i1;b9++)x=nt(t,C),$=nt(t,5),Xe(t.g,x,$,!0);break;case 11:for(i1=nt(t,f),eD=0;eD<i1;eD++)s=nt(t,f),w1(t.g,s,je,!0);break;case 12:for(i1=nt(t,C),r1=0;r1<i1;r1++)x=nt(t,C),a=nt(t,8)<<9,Xe(t.g,x,a,!0);break;case 13:for(i1=nt(t,f),C8=0;C8<i1;C8++)s=nt(t,f),zS=Wt(nt(t,3),14),w1(t.g,s,zS,!0);break;case 14:for(i1=nt(t,f),AD=0;AD<i1;AD++)s=nt(t,f),xS=Wt(nt(t,5),17),w1(t.g,s,xS,!0);break;case 15:case 31:uw+=16;break;case 16:for(i1=nt(t,f),nD=0;nD<i1;nD++)s=nt(t,f),_2=Wt(nt(t,3),22),w1(t.g,s,_2,!0);break;case 17:for(i1=nt(t,f),PD=0;PD<i1;PD++)s=nt(t,f),aA(t.g,s,nt(t,4));break;case 18:for(i1=nt(t,f),Nl=nt(t,4),Sc=0;Sc<i1;Sc++){for(s=nt(t,f),Qt=nt(t,Nl),Z2=c(E,I,6,Qt,15,1),H8=0;H8<Qt;H8++)Z2[H8]=nt(t,7)<<24>>24;IP(t.g,s,on((W2=Z2,w0(),W2)))}break;case 19:for(i1=nt(t,f),Ic=0;Ic<i1;Ic++)s=nt(t,f),st=Wt(nt(t,3),25),w1(t.g,s,st,!0);break;case 20:for(i1=nt(t,C),xc=0;xc<i1;xc++)x=nt(t,C),_2=nt(t,3)<<17,Xe(t.g,x,_2,!0);break;case 21:for(i1=nt(t,f),Nc=0;Nc<i1;Nc++)s=nt(t,f),Je(t.g,s,nt(t,2)<<4);break;case 22:for(i1=nt(t,f),Gc=0;Gc<i1;Gc++)s=nt(t,f),w1(t.g,s,d9,!0);break;case 23:for(i1=nt(t,C),qc=0;qc<i1;qc++)x=nt(t,C),Xe(t.g,x,F8,!0);break;case 24:for(i1=nt(t,C),zc=0;zc<i1;zc++)x=nt(t,C),o=nt(t,2)<<21,Xe(t.g,x,o,!0);break;case 25:for(Il=0;Il<D;Il++)nt(t,1)==1&&vP(t.g,Il,!0);break;case 26:for(i1=nt(t,C),L=c(F,m,6,i1,15,1),xl=0;xl<i1;xl++)L[xl]=nt(t,C);break;case 27:for(i1=nt(t,f),Kc=0;Kc<i1;Kc++)s=nt(t,f),w1(t.g,s,Pe,!0);break;case 28:for(i1=nt(t,C),Jc=0;Jc<i1;Jc++)g0(t.g,nt(t,C),16);break;case 29:for(i1=nt(t,f),Yc=0;Yc<i1;Yc++)s=nt(t,f),ZA=Wt(nt(t,2),30),w1(t.g,s,ZA,!0);break;case 30:for(i1=nt(t,f),Xc=0;Xc<i1;Xc++)s=nt(t,f),_2=Wt(nt(t,7),32),w1(t.g,s,_2,!0);break;case 32:for(i1=nt(t,f),Zc=0;Zc<i1;Zc++)s=nt(t,f),KS=Wt(nt(t,2),44),w1(t.g,s,KS,!0);break;case 33:for(i1=nt(t,f),Wc=0;Wc<i1;Wc++)s=nt(t,f),l0=Wt(nt(t,5),39),w1(t.g,s,l0,!0);break;case 34:for(i1=nt(t,f),_c=0;_c<i1;_c++)s=nt(t,f),w1(t.g,s,no,!0);break;case 35:for(i1=nt(t,C),$c=0;$c<i1;$c++)x=nt(t,C),Xe(t.g,x,Nf,!0);break;case 36:for(i1=nt(t,C),ac=0;ac<i1;ac++)x=nt(t,C),W=nt(t,2)<<5,Xe(t.g,x,W,!0);break;case 37:for(i1=nt(t,C),tw=0;tw<i1;tw++)x=nt(t,C),W=nt(t,1)==0?32:64,g0(t.g,x,W);break;case 38:for(i1=nt(t,f),rt=nt(t,3),Zo=c(F,m,6,D,15,1),ew=0;ew<i1;ew++)s=nt(t,f),ct=nt(t,rt),Zo[s]=ct;break;case 39:for(i1=nt(t,f),Aw=0;Aw<i1;Aw++)s=nt(t,f),OS=Wt(nt(t,4),47),w1(t.g,s,OS,!0);break;case 40:for(i1=nt(t,f),Nl=nt(t,6),IS=nt(t,16),Ue=0;Ue<i1;Ue++){for(s=nt(t,f),Qt=nt(t,Nl),Z2=new C0,H8=0;H8<Qt;H8++)Ye(Z2,nt(t,IS)&d1);IP(t.g,s,Z2.a)}}if(jf(new p9(t.g),Dw,!1),L!=null)for(N=L,tt=0,H=N.length;tt<H;++tt)x=N[tt],g0(t.g,x,c1(t.g,x)==2?4:2);if(n==null&&!t.i&&A.length>t.e+1&&(A[t.e+1]==32||A[t.e+1]==9)&&(n=A,P=t.e+2),n!=null)try{if(n[P]==33||n[P]==35){for(DL(t,n,P+1),St=nt(t,1)==1,A1=nt(t,1)==1,KP=2*nt(t,4),S=1<<KP,T0=0,x=0,l=1;l<D;l++)x<Q&&K(t.g,1,x)==l?(T0=K(t.g,0,x++),F1=1):(T0=0,F1=8),S1=F1*(nt(t,KP)+1-(S>>1)),D1=F1*(nt(t,KP)+1-(S>>1)),de(t.g,l,mt(t.g,T0)+S1),Ve(t.g,l,Rt(t.g,T0)+D1),St&&Yn(t.g,l,oA(t.g,T0)+F1*(nt(t,KP)+1-(S>>1)));if(n[P]==35){for(B1=0,Y0=c(F,m,6,D,15,1),h=0;h<D;h++)B1+=Y0[h]=xt(t.g,h);for(s=0;s<D;s++)for(Ue=0;Ue<Y0[s];Ue++)M0=i9(t.g,1),J0(t.g,s,M0,1),de(t.g,M0,mt(t.g,s)+(nt(t,KP)+1-(S>>1))),Ve(t.g,M0,Rt(t.g,s)+(nt(t,KP)+1-(S>>1))),St&&Yn(t.g,M0,oA(t.g,s)+(nt(t,KP)+1-(S>>1))),Zo!=null&&(Zo[s]&1<<Ue)!=0&&vP(t.g,M0,!0);D+=B1,Q+=B1}if(b=St?1.5:(J1(),J1(),Bn),v=dP(t.g,D,Q,b),A1)for(lP=OO(nt(t,KP),S),Wo=lP*sT(nt(t,KP),S),_o=lP*sT(nt(t,KP),S),St&&($o=lP*sT(nt(t,KP),S)),F1=lP/v,s=0;s<D;s++)de(t.g,s,Wo+F1*mt(t.g,s)),Ve(t.g,s,_o+F1*Rt(t.g,s)),St&&Yn(t.g,s,$o+F1*oA(t.g,s));else for(lP=1.5,F1=lP/v,s=0;s<D;s++)de(t.g,s,F1*mt(t.g,s)),Ve(t.g,s,F1*Rt(t.g,s)),St&&Yn(t.g,s,F1*oA(t.g,s))}else if(St&&!A1&&lP==0&&(lP=1.5),lP!=0&&t.g.s!=0){for(v=0,x=0;x<t.g.s;x++)Lt=mt(t.g,K(t.g,0,x))-mt(t.g,K(t.g,1,x)),pt=Rt(t.g,K(t.g,0,x))-Rt(t.g,K(t.g,1,x)),U0=St?oA(t.g,K(t.g,0,x))-oA(t.g,K(t.g,1,x)):0,v+=w.Math.sqrt(Lt*Lt+pt*pt+U0*U0);for(v/=t.g.s,m1=lP/v,s=0;s<t.g.r;s++)de(t.g,s,mt(t.g,s)*m1+Wo),Ve(t.g,s,Rt(t.g,s)*m1+_o),St&&Yn(t.g,s,oA(t.g,s)*m1+$o)}}catch(V8){if(V8=_1(V8),Yt(V8,19))V1=V8,ur(V1,(q1(),k9),\"\"),\"\"+V1+on((ES=A,w0(),ES))+on((W2=n,W2)),n=null,St=!1;else throw At(V8)}if(Xt=n!=null&&!St,BW(t),Xt||t.ac())for(ut(t.g,7),x=0;x<t.g.i;x++)dt(t.g,x)==2&&!A8(t.g,x)&&ze(t.g,x)==0&&yh(t.g,x);if(TD(t.g,0),!Xt&&t.ac())try{t.bc(t.g),Xt=!0}catch(V8){if(V8=_1(V8),Yt(V8,19))V1=V8,ur(V1,(q1(),k9),\"\"),\"\"+V1+on((W2=A,w0(),W2));else throw At(V8)}Xt?(hf(t.g),Kh(t.g)):St||TD(t.g,0)}}function pf(){pf=v1,F9=B(d(ft,1),Dt,2,6,[\"QM@HzAmdqjF@\",\"RF@Q``\",\"qC`@ISTAlQE`\",\"`J@H\",\"QM@HzAmdqbF@\",\"qC`@ISTAlQEhqPp@\",\"sJP@DiZhAmQEb\",\"RF@QPvR@\",\"QM@HzA@\",\"qC`@ISTAlQEhpPp@\",\"qC`@Qz`MbHl\",\"sJP@DiZhAmQEcFZF@\",\"RFPDXH\",\"qC`@IVtAlQE`\",\"QM@HvAmdqfF@\",\"sGP@DiVj`FsDVM@\",\"`L@H\",\"sJP@DizhAmQEcFBF@\",\"sJP@DjvhAmQEb\",\"sFp@DiTt@@AlqEcP\",\"sGP@LdbMU@MfHlZ\",\"QMHAIhD\",\"QM@HzAy@\",\"sJP@DkVhAmQEb\",\"sNp@DiUjj@[\\\\QXu`\",\"sJP@DiZhAmQEcFBF@\",\"sGP@DjVj`FsDVM@\",\"RFPDTH\",\"RG@DXOH@\",\"sGP@Divj`FsDVMcAC@\",\"sGP@Dj}j`FsDVM@\",\"qC`@Qz`MbHmFRF@\",\"sNp@LdbJjj@[\\\\QXu`\",\"QMHAIhGe@\",\"QM@HzAyd`\",\"QM`AIhD\",\"qC`@ISTA@\",\"sGP@DkUj`FsDVM@\",\"qC`@IVtAlQEhqPp@\",\"sNp@DiUjj@[\\\\QXuqea`@\",\"KAx@@IRjuUPAlHPfES\\\\\",\"QM`BN`P\",\"sJP@DjZhAmQEcFJF@\",\"Hid@@DjU^nBBH@FtaBXUMp`\",\"sNp@Diujj@[\\\\QXuq`a`@\",\"sJP@DjvhAmQEcFZF@\",\"sJP@DjZhAmQEcFFF@\",\"sOp@DjWkB@@FwDVM\\\\YhX@\",\"sNp@Dj}Zj@[\\\\QXu`\",\"sNp@DiWjj@[\\\\QXuq`a`@\",\"sOp@DjWkB@@D\",\"KAx@@ITouUPAlHPfES\\\\\",\"KAx@@YIDTjjh@vDHSBin@\",\"sNp@DkUZj@[\\\\QXu`\",\"RFPDXOH@\",\"QM`BN`^L`\",\"qC`@ISTAy@\",\"sGP@LdbMU@MfHl[FVF@\",\"qCb@AIZ`H\",\"KAx@@IRjuUPAlHPfES]FFa`@\",\"KAx@@ITnuUPAlHPfES\\\\\",\"HiD@@DiUVjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXu`\",\"sJP@DkVhAmQEcFJF@\",\"sGP@DjVj`FsDVMcCC@\",\"qC`@Qz`MbHmFBF@\",\"sJP@DkfhAmQEb\",\"qC`@IVtAlQEhsPp@\",\"sGP@Djuj`FsDVM@\",\"sGP@Dj}j`FsDVMcMC@\",\"sJP@DiZhA@\",\"KAx@@ISjuUPAlHPfES]F@a`@\",\"sJP@DjZhAmQEcFRF@\",\"KAx@@IRnuUPAlHPfES]F@a`@\",\"HiD@@DjWvjj`AmHPfES\\\\H\",\"QMHAIhGd@\",\"sNp@DiUjj@[\\\\QXuq`a`@\",\"KAx@@IVjmUPAlHPfES\\\\\",\"sGP@DjVj`FsDVMcMC@\",\"QM`AIhGe@\",\"HiD@@LdbJRjjh@[RDIaTwB\",\"qCp@AIZ`H\",\"sGP@LdbMU@MfHl[FFF@\",\"QMDARVA@\",\"sNp@LdbJjj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqca`@\",\"sGP@Dkej`FsDVM@\",\"qCb@AIZ`OI@\",\"HaD@@DjUZxHH@AlHPfES]FLa`@\",\"sGP@DkYj`FsDVM@\",\"qCb@AIV`H\",\"sNp@LdbJjj@[\\\\QXuqea`@\",\"sGP@DkUj`FsDVMcEC@\",\"sFp@DiTt@@Axa@\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\Lj\",\"QM`BN`^P\",\"qCb@AIZ`OH`\",\"sFp@DiTt@@AxaP\",\"sGP@Djuj`FsDVMcEC@\",\"sGP@Djuj`FsDVMcIC@\",\"sGP@DkUj`FsDVMcKC@\",\"sJP@DkfhAmQEcFRF@\",\"sGP@DjVj`FsDVMcIC@\",\"HaD@@DjUZxHH@AlHPfES]FFa`@\",\"qC`@IRtDVqDV@\",\"sNp@Dj}Zj@[\\\\QXuqfa`@\",\"KAx@@ITnuUPAlHPfES]FFa`@\",\"HiD@@DkUUjj`AmHPfES\\\\H\",\"sJQ@@dkU@H\",\"qC`@Qz`H\",\"KAx@@IUkmUPAlHPfES\\\\\",\"KAx@@ITouUPAlHPfES]FJa`@\",\"sJP@H~j@[TQX`\",\"sGP@DjZj`FsDVM@\",\"sJP@DkVhAmQEcFFF@\",\"sJX@@eKU@H\",\"sJP@DizhAy@\",\"QMHAIhGbP\",\"KAx@@ITouUPAlHPfES]FNa`@\",\"HaD@@DjUZxHD@AlHPfES\\\\\",\"HaD@@DjUZxHH@A@\",\"sNp@LdbJjj@[\\\\QXuqaa`@\",\"Hed@@LdbRQUUUP@vTHSBinFP\",\"KAx@@ITouUPAlHPfES]FLa`@\",\"sNp@DkUZj@[\\\\QXuqba`@\",\"KAx@@ITjuUPAlHPfES]FNa`@\",\"KAx@@YIDTjjh@vDHSBincGPp@\",\"HaD@@DjYvxH`@AlHPfES]FLa`@\",\"RF@QP`\",\"qCb@AIj`H\",\"sNp@DjUjj@[\\\\QXuqaa`@\",\"sNp@DkVZj@[\\\\QXu`\",\"KAx@@YIDUJjh@vDHSBin@\",\"sGP@DkYj`FsDVMcIC@\",\"sGP@DjVj`FsDVMcAC@\",\"sGP@DiVj`D\",\"sJP@DkVhAmQEcFZF@\",\"sNp@LdbLjj@[\\\\QXu`\",\"QM@HvAmdqbF@\",\"HaD@@DjWjXHB@AlHPfES\\\\\",\"sNp@DjwZj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqda`@\",\"sFp@DiTt@@Axa`\",\"HiD@@Djuujj`AmHPfES\\\\H\",\"sNp@DkUZj@[\\\\QXuqca`@\",\"sJP@DiZhAy@\",\"KAx@@YIDTjjh@vDHSBincCPp@\",\"KAx@@IWNmUPAlHPfES\\\\\",\"KAx@@IVkMUPAlHPfES\\\\\",\"sJQ@@dju@H\",\"qCb@AIZ`OH@\",\"qC`@ISTAxa@\",\"sNp@DjyZj@[\\\\QXu`\",\"Hid@@DjUfaBB`@FtaBXUMp`\",\"HiD@@DiUVjj`AmHPfES\\\\LXBF@\",\"KAx@@IUjmUPAlHPfES\\\\\",\"HiD@@DjWvjj`AmHPfES\\\\LXjF@\",\"sJP@DjVhAmQEb\",\"qCb@AIV`OH`\",\"HiD@@LdbJRjjh@[RDIaTwCFDa`@\",\"KAx@@YIDTjjh@vDHSBinc@Pp@\",\"sNp@DjUjj@[\\\\QXuqda`@\",\"qC`@Qz`OED\",\"sJP@DkfhAmQEcFZF@\",\"KAx@@YIDbjjh@vDHSBincDPp@\",\"sGP@Djyj`FsDVMcMC@\",\"KAx@@IVrmUPAlHPfES\\\\\",\"qCp@AIZ`OI@\",\"sJX@@dkU@H\",\"sJQ@@dkU@OH`\",\"sNp@Di]ZjBBvxbqk@\",\"Hkl@@DjU_Uk``bj`@[VDIaTwCJzX\",\"sGP@DjZj`FsDVMcEC@\",\"Hid@@DjU^nBBH@FtaBXUMpqcHX@\",\"sNp@DkeZj@[\\\\QXu`\",\"sNp@DjYjj@[\\\\QXuqca`@\",\"sGQ@@djuT@`\",\"HiD@@LdbJTjjh@[RDIaTwB\",\"sOp@DjWkB@@Gd`\",\"HeT@@LdbbRKBDQD@CYPaLJfxY@\",\"qCr@XIKTA@\",\"HiD@@DjW^jj`AmHPfES\\\\LXJF@\",\"HeT@@DjU]k``b`@[JDIaTwCH\",\"sGP@Djuj`FsDVMcCC@\",\"`IH`B\",\"sOp@DjWkB@@GdX\",\"sJQ@@eKU@H\",\"KAx@@YIDUJjh@vDHSBincBPp@\",\"sJX@@eKU@OH@\",\"KAx@@YIDTjjh@vDHSBincAPp@\",\"sOq@@drm\\\\@@@`\",\"KAx@@IUkMUPAlHPfES\\\\\",\"qCp@AIj`H\",\"Hed@@DjUUjjj@FraBXUMpr\",\"sGX@@eJuT@`\",\"sGP@DkUj`FsDVMcCC@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXrF@\",\"KAx@@ITouUPAlHPfES]FHa`@\",\"Hed@@DjWujjj@FraBXUMpsFIa`@\",\"sGP@DiUj``mfHlZ\",\"sFp@DiTvjhAlqEcP\",\"Hid@@DjU^nBBH@FtaBXUMpq`XX@\",\"sJP@DkVdAmQEb\",\"qCp@AIZ`OH`\",\"QMhDRVA@\",\"qC`@ISJAlQE`\",\"qCp@BOTAyhl\",\"sJX@@eOU@ODB\",\"sFp@DiTt@@AyaB\",\"sGP@DkUj`FsDVMcMC@\",\"Hid@@DjYUaBH`@FtaBXUMpqcHX@\",\"qC`@Qz`OH@\",\"HiD@@DjUVjj`AmHPfES\\\\LXZF@\",\"sJP@H~j@[TQXqda`@\",\"sJX@@eKU@OI@\",\"sNp@Djejj@[\\\\QXu`\",\"sJQ@@dsU@H\",\"sJQ@@dkU@OI`\",\"KAx@@YIMDVjh@vDHSBin@\",\"Hid@@DjU^nBBD@FtaBXUMp`\",\"sNp@DkgZj@[\\\\QXuqca`@\",\"qC`@IRtDVqDVcEC@\",\"Hed@@LdbRQeUUP@vTHSBinFP\",\"sNp@DiUjj@P\",\"qC`@IRtDT\",\"sNp@DkYZj@[\\\\QXuqca`@\",\"KAx@@IUkmUPAlHPfES]FDa`@\",\"KAx@@IVjmUPAlHPfES]FNa`@\",\"sOx@@drm\\\\@@@`\",\"KAx@@ITjuUPAlHPfES]FBa`@\",\"QMDARVAyH\",\"sJP`@dfvhA@\",\"HeT@@DjU_k``b`@[JDIaTwCLXfF@\",\"KAx@@IToUUPAlHPfES]FJa`@\",\"sGP@DkYj`FsDVMcEC@\",\"qCb@AIZ`ODH\",\"`I@`B\",\"KAx@@IUzmUPAlHPfES]FFa`@\",\"sNp@DkfZj@[\\\\QXu`\",\"KAx@@ITnuUPAlHPfES]F@a`@\",\"HiD@@LddURjjh@[RDIaTwB\",\"sNp@Dj~Zj@[\\\\QXuqfa`@\",\"Hed@@Dj{uZjj@FraBXUMpr\",\"KAx@@ITsUUPAlHPfES\\\\\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXrF@\",\"sOp@DjWkB@@GdH\",\"sJQ@@dkU@OH@\",\"Hid@@DjU^nBBH@FtaBXUMpqahX@\",\"sGP@DiYj``mfHlZ\",\"KAx@@IToUUPAlHPfES]FLa`@\",\"qCp@AJZ`ODH\",\"Hmt@@DjU]ZxHHj@AmhPfES\\\\Lj\",\"sGP@DkUjPFsDVM@\",\"qC`@IVtA@\",\"Hed@@LdbJReUUP@vTHSBinFP\",\"sNp@DjuZj@[\\\\QXuqea`@\",\"KAx@@IUkmUPAlHPfES]FNa`@\",\"HiD@@DkVUjj`AmHPfES\\\\H\",\"Hed@@DkUeZjj@FraBXUMpr\",\"sNp@DkVZj@[\\\\QXuqea`@\",\"sJP@DiVhHKZbKFLLL@\",\"HiD@@Djuyjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXuq`a`@\",\"HeT@@DjYUXPbH`@[JDIaTwCH\",\"HiD@@DjwUjj`AmHPfES\\\\LXRF@\",\"sNq@@djmUPB\",\"KAx@@YIEEZjh@vDHSBincCPp@\",\"sGP@Di^V`dmfHlZ\",\"Hid@@DjYUaBHP@FtaBXUMp`\",\"sNp@DjYjj@[\\\\QXuqba`@\",\"sGP@Dkej`FsDVMcKC@\",\"HeT@@DjU^k``b`@[JDIaTwCH\",\"qC`@Qv`MbHmFBF@\",\"sGQ@@djmT@`\",\"qCr@XIKTAyH\",\"qC`@IVtAlQEhpPp@\",\"Hid@@LdbbQxXF@@AmHPfES\\\\LXjF@\",\"sGP@DkYj`FsDVMcCC@\",\"KAx@@IVsMUPAlHPfES\\\\\",\"qCp@AIj`ODl\",\"HiD@@DkeUjj`AmHPfES\\\\H\",\"deT@@DjU[k``b`@vTHSBinFP\",\"sJP@DkVdAmQEcFRF@\",\"HiD@@LdbJTjjh@[RDIaTwCFDa`@\",\"HiD@@DkYyjj`AmHPfES\\\\H\",\"sJP@DjZhAyH\",\"KAx@@IVkMUPAlHPfES]FDa`@\",\"sJX@@dkU@OI@\",\"Hed@@LdbRQUUUP@vTHSBinFXpLL@\",\"Hed@@DjuUZjj@FraBXUMpr\",\"sGP@Djfj`FsDVMcKC@\",\"sNp@DkVZj@[\\\\QXuqba`@\",\"sNp@DjyZj@[\\\\QXuqfa`@\",\"qCb@AIj`OH@\",\"sNp@DjUZj@[\\\\QXu`\",\"KAx@@IWOMUPAlHPfES\\\\\",\"Hid@@DjU^nBBH@D\",\"Hed@@DjuvZjj@FraBXUMpr\",\"sJP@DiVhHKZbKFLtL@\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLKC@\",\"sNp@DjuZj@[\\\\QXuqca`@\",\"sJP@DkfhAmQEcFJF@\",\"sNp@LdbJZj@[\\\\QXu`\",\"HeT@@DjU_k``b`@[JDIaTwCLXFF@\",\"KAx@@IVlmUPAlHPfES]FNa`@\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcEPp@\",\"Hid@@DjUZnBBH@FtaBXUMpqcHX@\",\"qCa@CIKTA@\",\"HiD@@Dj~]jj`AmHPfES\\\\LXFF@\",\"sKP@Di\\\\Zj@[TQX`\",\"sGP@Djfj`FsDVMcEC@\",\"HiD@@DkgYjj`AmHPfES\\\\H\",\"sNp@DjuZj@[\\\\QXuqaa`@\",\"KAx@@YIMDVjh@vDHSBincDPp@\",\"sJP@DjVhHKZbKFLTL@\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXZF@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXzF@\",\"HeT@@DjU_k``bP@[JDIaTwCH\",\"sNp@DkUZi@[\\\\QXu`\",\"HiD@@DjYfjj`AmHPfES\\\\H\",\"sGP@DjZj`FsDVMcAC@\",\"Hmt@@DjU_jxHHj@AmhPfES\\\\Lj\",\"Hid@@LdbRQk``R@AmHPfES\\\\H\",\"KAx@@YIDUJjh@vDHSBincDPp@\",\"qCr@XIKTAyD\",\"sOq@@drm\\\\@@@|`@\",\"Hed@@DjW^jjj@FraBXUMpsFBa`@\",\"HeT@@DjY]zXFB@@[JDIaTwCH\",\"Hkl@@DjU_Vk``bj`@[VDIaTwCJzX\",\"Hid@@DjY}nBHH@FtaBXUMpqcHX@\",\"sGX@@eKuT@|d@\",\"sGP@Dj^Y`FsDVM@\",\"HcL@@DjU_ZnBBJh@FqaBXUMprn`\",\"sJP@DkVdAmQEcFJF@\",\"sOq@@drm\\\\@@@|b@\",\"sNp@DjyZj@[\\\\QXuqaa`@\",\"HaD@@DjUZxHH@AyD@\",\"qC`@Qv`H\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLYC@\",\"sGP@Dkej`FsDVMcMC@\",\"Hed@@DjUUjjj@FraBXUMpsFHa`@\",\"HeT@@LdbbRkBDQD@CYPaLJfxY@\",\"KAx@@IU{MUPAlHPfES]FLa`@\",\"RG@DTH\",\"sJY@DDeVhA@\",\"KAx@@YIDUJjh@vDHSBinc@Pp@\",\"sJX@@dkU@OI`\",\"sJQ@@dju@OI`\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcFPp@\",\"sFp@DiTvjhAlqEcXpPp@\",\"HaD@@DjUZxHH@AyG@\",\"sNx@@eJ}UPB\",\"sNp@LddUjj@[\\\\QXuqca`@\",\"HaDH@@RVU[j@@@D\",\"sNp@DkgZi@[\\\\QXu`\",\"sGY@LDeVj`D\",\"sNp@LdbJfZBZvxbqk@\",\"sJP`@dfvhAyL\",\"sGX@AddQjhAxe`\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\LkFIa`@\",\"qCh@CIKTA@\",\"sNp@LdbLjj@[\\\\QXuq`a`@\",\"sOq@@drm\\\\@@@|a@\",\"KAx@@IUzmUPAlHPfES]FJa`@\",\"sNx@AddQUUPB\",\"sGP@Di]jP`mfHlZ\",\"sJP`@TeZhA@\",\"KAx@@IRjmUPHKXPaLJfx\",\"HeT@@LdbRTM\\\\DDT@CYPaLJfxY@\",\"HaF@@@Rfu[j@@@D\",\"Hid@@DjYUaBH`@FtaBXUMpqchX@\",\"KAx@@IUjmTpAlHPfES\\\\\",\"Hid@@DjU^nBBD@FtaBXUMpqcHX@\",\"sGP@DiUj``mfHl[FFF@\",\"KAx@@IUvmUPAlHPfES]FLa`@\",\"Hed@@LdbQTUUUP@vTHSBinFXqDL@\",\"sJP@DkVhA@\",\"sOx@@drm\\\\@@@|b@\",\"KAx@@IUkMUPAlHPfES]FDa`@\",\"HeT@@LdbRQU\\\\DDT@CYPaLJfxY@\",\"HiD@@Dj}Yjj`AmHPfES\\\\LXrF@\",\"HiD@@Dj{ujj`AmHPfES\\\\LXFF@\",\"KAx@@IWNmUPAlHPfES]FFa`@\",\"KAx@@IRkMUPHKXPaLJfx\",\"sJP@DjYdAmQEcFZF@\",\"sJY@LDeZhAyL\",\"HaDH@@RVU[f@@@D\",\"sJP`@deVhAyB\",\"HaD@@DjWjZjj`AlHPfES\\\\\",\"sGP@DkYj`FsDVMcMC@\",\"sNp@DkgZj@[\\\\QXuqea`@\",\"sJQ@@dlu@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXrF@\",\"sJX@@dkU@OH`\",\"RFDDQFCr`\",\"sJP@DiYXIKZbKFLLL@\",\"KAx@@YIHjjjh@vDHSBincGPp@\",\"Hk\\\\@@DjU^ukmLHH@@@AmXPfES\\\\Lki`\",\"sGQ@@djmT@|b@\",\"Hid@@DjUfaBB`@FtaBXUMpqahX@\",\"sNx@@eRmUPB\",\"Hmt@@LdbRVak``ah@FvaBXUMprh\",\"qCr@XIJtA@\",\"KAx@@IWMmUPAlHPfES]FNa`@\",\"HeT@@DjYYZPbJ@@[JDIaTwCH\",\"sNp@DkfZj@[\\\\QXuqea`@\",\"Hid@@DjU^nBAHAEVtaBXUMp`\",\"dmt@@DjUgZDHJJ@C[PaLJfxYT\",\"sGP@DkejPFsDVM@\",\"sNx@@eJmUPB\",\"qCb@AIf`H\",\"HcL@@DjU_VnBBJh@FqaBXUMprnqcXX@\",\"Hid@@DjUZnBBH@FtaBXUMpqahX@\",\"sNp@LdbQZjBBvxbqkcGC@\",\"sOx@@drm\\\\@@@|c@\",\"sJP@H~j@^R@\",\"KAx@@YIDcFjhDElHPfES\\\\\",\"Hid@@DjUZnBAH@FtaBXUMp`\",\"sNp@LddUji@[\\\\QXu`\",\"sGP@DjfjPFsDVM@\",\"HeT@@DjYUXPbD`@[JDIaTwCH\",\"KAx@@IUoMUPAlHPfES]FDa`@\",\"sFp@DiTt@@AyaD\",\"Hed@@DjuuZjj@FraBXUMpsFIa`@\",\"HeT@@DjUghP`h`@[JDIaTwCLXfF@\",\"sOp@DjWkjj`FwDVM\\\\YhX@\",\"sGP@Djfj`FsDVMcIC@\",\"KAx@@IRkmUPHKXPaLJfzL]C@\",\"sNx@@djmUPB\",\"QM`AIdD\",\"sOp@DjWkB@@Gbe@\",\"sNp@DjyZj@[\\\\QXuqca`@\",\"QM@HuAmd`\",\"sNp@LddUjj@[\\\\QXuqea`@\",\"daD@@DjUZxHD@CXPaLJfzLYC@\",\"qCb@AIZPH\",\"HiD@@LdbJTjjh@[RDIaTwCF@a`@\",\"Hmt@@DjU_ZxHHi@AmhPfES\\\\Lj\",\"HaDH@@RYWih@H@D\",\"HiD@@LdbJTjjh@[RDIaTwCFHa`@\",\"sGX@@djuT@|a@\",\"sNp@DkfZj@[\\\\QXuqaa`@\",\"Hid@@DjU^nBBH@GdL\",\"KAx@@IVkMUPAlHPfES]FJa`@\",\"qCr@XIKTAy@\",\"HmT@@Dj{uVjjh@[ZDIaTwCJqaXX@\",\"dmt@@DjYWVDHbJ@C[PaLJfxYT\",\"Hif@@@RUe^Fh@@@P\",\"HaDH@@Rfu[j@@@GdH\",\"KAx@@IVsMUPAlHPfES]FDa`@\",\"sKP@Di\\\\Zj@[TQXq`a`@\",\"sJX@@eMU@OH@\",\"HeT@@DjU^k``b`@[JDIaTwCLXFF@\",\"Hmt@@LdbbRJXPbHh@FvaBXUMprh\",\"sJP@DjvhAmQEcFBF@\",\"dmt@@LdbbRNXPbHh@MmBDpj[aeXplL@\",\"sJP`@dfvhAyD\",\"sGP@Di^V`dmfHl[FVF@\",\"KAx@@IVsmUPAlHPfES]FBa`@\",\"sOq@@drm\\\\@@@|PP\",\"sJY@BDeZhA@\",\"HeT@@LdbRbmBDED@CYPaLJfxY@\",\"Hed@@Djy[Zjj@FraBXUMpr\",\"HeT@@DjU]k``b`@[JDIaTwCLXFF@\",\"Hid@@DjUfaBB`@D\",\"qCa@CIJtA@\",\"QMPARVA@\",\"Hid@@DjUfaBB`@FtaBXUMpqcHX@\",\"sJY@BDfZhA@\",\"HeT@@DjUghP`hP@[JDIaTwCH\",\"Hed@@Dj{uZjj@FraBXUMpsFIa`@\",\"dmt@@DjYUvDHbJ@C[PaLJfxYVLUC@\",\"sNp`@dfuZj@P\",\"sJQ@@dmU@OH@\",\"sJX@@dmU@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXZF@\",\"HiD@@LdfbJZjh@[RDIaTwCFAa`@\",\"sOx@@drm\\\\@@@|a@\",\"deT@@DjUfhP`h`@vTHSBinFP\",\"dmt@@DjU]ZxHHj@C[PaLJfxYVLKC@\",\"sOp@DjWkjj`FwDVM\\\\XHX@\",\"HcL@@LdbbRNSBDQEP@McBDpj[ae]cFpp@\",\"HiD@@Dj}Yji`AmHPfES\\\\H\",\"HaDH@@RYe[hB@@D\",\"Hid@@DjU^njjj@FtaBXUMpq`XX@\",\"deT@@LdbbRKBDQB@FraBXUMpr\",\"QMPARZA@\",\"sOq@@drm\\\\@@@|QX\",\"HaD@@DjYvxH`@A@\",\"HcL@@LdbbRNcBDQEP@McBDpj[ae]@\",\"QMhDRZA@\",\"RG@DXLHmP\",\"QM`BN`XQYd\",\"RG@DTLHmP\",\"QMHAIXFEVd\",\"QMDARVAaH\",\"RFPDXLHmP\",\"RF@Q`vRbdLEC@\",\"RF@QpvR@\",\"QO@HyjAmd`\",\"`II@B\",\"`II@CFspqJp\",\"`II@CF[@hM@prB`\",\"`H@[T[|B`XN@PdM@p|@bHrBcDk@\",\"RG@DXMj}F@\",\"QM`BN`[L~b@\",\"RG@DTMj}D@\",\"QMHAIXFt~j@\",\"QMDARVA}L@\",\"RFPDXMj}D@\",\"sKP@Di\\\\YZ@[TQXqaa`@\",\"eF`BHD\"])}function uM(){uM=v1,pE=B(d(XA,1),re,6,14,[524290,524292,589826,589827,589828,589829,589832,589833,589837,589838,598019,598020,598024,606211,688130,688131,688132,688137,688142,696324,819202,819203,819204,819205,819214,827396,1048580,1114114,1114115,1114116,1114120,1212420,1220611,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17375236,17465346,17465348,17465353,17473540,1208483842,1208483848,1208483912,1208549378,1208549379,1208549380,1208549384,1208549388,1208549442,1208549443,1208549444,1208549448,1208557571,1208565763,1208565827,1409875970,1409875971,1409875972,1409875976,1409876034,1409876035,1409876036,1409876040,1409884163,1409974274,1409974280,1409974338,1678245892,1678311426,1678311427,1678311428,1678311432,1678311490,1678311491,1678311492,1678311496,1678409730,1678409731,1678409732,1678409794,1678540802,1678540808,1678540810,1678540866,2282291202,2282291203,2282291266,2282291267,2282389506,2282389507,2282389570,2282389571,2282389572,2282520578,2282520579,2282520642,2282520643,2282537027,2483617794,2483617795,2483617858,2483617859,2483617860,2483617864,2483716098,2483716099,2483716162,2483716163,2484150275,2484248579,2752675842,3356033026,3356139523,3557359618,3557457922,3557588994,34510798914,34510798915,34510798916,34510798920,34510807107,34510815299,34712125506,34712125507,34712125508,34712125512,34712223810,34712223811,34712223812,34712223816,34980560962,34980560963,34980659266,34980659267,34980659268,35568287746,35568287747,35568287748,35568287752,35568287756,35568287810,35568287811,35568287812,35568287816,35568287820,35568386050,35568386051,35568386052,35568386114,35568386120,35568517122,35568517123,35568517124,35568517128,35568517186,35568517187,35568517188,35568517192,35568812034,35568812035,35568812098,35568812099,35568910338,35568910339,35568910403,35569336322,35569434626,35585064962,35585064963,35585064964,35585064968,35585065026,35585065027,35585065028,35585065032,35769614338,35769614340,35769614402,35769712642,35770138626,35770236930,35786391554,35786391555,2475109646403,ZC,WC,2475109711938,2475109711939,2475109720067,2475109720131,2475109728259,2475109728323,_C,$C,2887426572354,2887426572355,aC,tH,2887627898946,eH,2887627997250,AH,nH,3437182386242,3437182386243,PH,3437383712771,3437383712834,rH,iH,fH,DH,4674132967490,4674132967491,4674132975619,uH,4674334294082,4674334294083,4674334302211,4674334302275,QH,4674334392386,oH,4674602729538,4674602827842,UH,4674602958914,LH,sH,5086449827906,5086449827907,5086449827912,yH,5086651154498,5086651162627,lH,hH,5086651252802,5086651252808,5086651260931,TH,5086919589954,cH,5086919688258,5086919819330,5636205641794,wH,5636406968386,gH,5636407066690,5636675403842,dH,5636675502146,{l:589890,m:73760,h:4},{l:589891,m:73760,h:4},{l:598083,m:73760,h:4},{l:688194,m:73760,h:4},{l:688195,m:73760,h:4},{l:696387,m:73760,h:4},{l:819266,m:73760,h:4},{l:65602,m:73764,h:4},{l:65603,m:73764,h:4},{l:589890,m:172064,h:4},{l:589891,m:172064,h:4},{l:598083,m:172064,h:4},{l:688194,m:172064,h:4},{l:688195,m:172064,h:4},{l:696387,m:172064,h:4},{l:819266,m:172064,h:4},{l:65602,m:172068,h:4},{l:65603,m:172068,h:4},{l:589890,m:172112,h:4},{l:589891,m:172112,h:4},{l:688194,m:172112,h:4},{l:819266,m:172112,h:4},{l:65602,m:172116,h:4},{l:65608,m:172116,h:4},{l:163906,m:172116,h:4},{l:589890,m:303136,h:4},{l:688194,m:303136,h:4},{l:819266,m:303136,h:4},{l:65602,m:303140,h:4},{l:589890,m:303184,h:4},{l:688194,m:303184,h:4},{l:819266,m:303184,h:4},{l:65602,m:303188,h:4},{l:65602,m:303252,h:4},BH,vH,{l:589890,m:590112,h:4},{l:589891,m:590112,h:4},FH,kH,{l:589890,m:590160,h:4},{l:589891,m:590160,h:4},mH,{l:688194,m:590160,h:4},bH,jH,{l:589890,m:590224,h:4},{l:589891,m:590224,h:4},{l:688131,m:590224,h:4},{l:688194,m:590224,h:4},RH,pH,{l:589890,m:590368,h:4},MH,{l:688194,m:590368,h:4},{l:696323,m:590368,h:4},CH,HH,{l:819266,m:590368,h:4},VH,EH,{l:589890,m:590416,h:4},{l:589891,m:590416,h:4},{l:589896,m:590416,h:4},SH,{l:688136,m:590416,h:4},{l:688194,m:590416,h:4},{l:696323,m:590416,h:4},IH,{l:819266,m:590416,h:4},{l:688130,m:590480,h:4},{l:688194,m:590480,h:4},{l:65602,m:598052,h:4},{l:65603,m:598052,h:4},{l:65602,m:598100,h:4},{l:65603,m:598100,h:4},{l:73795,m:598100,h:4},{l:163906,m:598100,h:4},{l:163907,m:598100,h:4},{l:65602,m:598164,h:4},{l:163906,m:598164,h:4},xH,NH,{l:589890,m:598304,h:4},{l:589891,m:598304,h:4},GH,{l:688194,m:598304,h:4},OH,{l:1114178,m:598304,h:4},qH,{l:1212424,m:598304,h:4},{l:1212482,m:598304,h:4},zH,KH,{l:589890,m:688416,h:4},JH,{l:589890,m:688464,h:4},{l:589890,m:688528,h:4},YH,XH,{l:688130,m:688784,h:4},{l:65602,m:696356,h:4},{l:65602,m:696404,h:4},{l:163906,m:696404,h:4},{l:589826,m:696608,h:4},{l:1114178,m:696608,h:4},{l:1212418,m:696608,h:4},{l:589826,m:696612,h:4},{l:524355,m:590112,h:288},{l:589825,m:590112,h:288},ZH,{l:589890,m:590112,h:288},{l:598019,m:590112,h:288},{l:598083,m:590112,h:288},WH,{l:589890,m:590112,h:336},{l:598019,m:590112,h:336},{l:598083,m:590112,h:336},_H,{l:589890,m:688416,h:336},$H,{l:589890,m:688464,h:336},aH,tV,{l:589827,m:590112,h:400},{l:589890,m:590112,h:400},{l:589891,m:590112,h:400},eV,AV,nV,PV,{l:589890,m:819488,h:400},rV,iV,fV,DV,{l:589827,m:819488,h:544},uV,QV,oV,{l:688199,m:688464,h:592},UV,LV,sV,{l:688202,m:819600,h:592},yV,{l:589896,m:1212704,h:592},lV,hV,{l:688200,m:1212752,h:592},TV,{l:688135,m:688464,h:656},{l:688135,m:819536,h:656},{l:589891,m:65936,h:8228},cV,{l:589890,m:590112,h:8480},{l:598019,m:590112,h:8480},wV,{l:589890,m:688416,h:8480},gV,{l:589890,m:688464,h:8480},dV,BV,vV,FV,{l:589896,m:1213008,h:8480},kV,{l:688200,m:1213008,h:8480},{l:688135,m:1343824,h:8480},mV,{l:589890,m:590112,h:8484},bV,{l:589890,m:590160,h:8484},{l:1212424,m:590416,h:8484},{l:1212488,m:590416,h:8484},jV,{l:688194,m:598304,h:8484},{l:589826,m:590112,h:8528},{l:589890,m:590112,h:8528}]),yc=B(d(Oe,1),uA,6,15,[.6966999769210815,0,.4885999858379364,-.47269999980926514,-.07490000128746033,RV,.273499995470047,.5699999928474426,.7009999752044678,.9534000158309937,-3.6435000896453857,-2.150899887084961,.4975000023841858,-2.19950008392334,-.2809000015258789,-.8259999752044678,-.1784999966621399,-1.620300054550171,-1.0959999561309814,-.3619999885559082,.13950000703334808,-.29750001430511475,-1.2907999753952026,1.0161999464035034,pV,-2.5383999347686768,Xy,.4291999936103821,-.5824000239372253,-.1834000051021576,.1306000053882599,-.5015000104904175,RV,-.5257999897003174,.4244000017642975,-.16099999845027924,-.2777999937534332,.5110999941825867,-.435699999332428,-.10409999638795853,.3424000144004822,-.061500001698732376,.6035000085830688,.7226999998092651,.43459999561309814,-1.6821000576019287,-.3310000002384186,-.49799999594688416,MV,-.3650999963283539,.45969998836517334,.3384000062942505,.6632999777793884,.4544000029563904,.15970000624656677,.633899986743927,.35040000081062317,.04490000009536743,.34200000762939453,.26109999418258667,.40459999442100525,.5218999981880188,-1.065000057220459,-1.2314000129699707,-1.802299976348877,-.36320000886917114,-.4108000099658966,.30570000410079956,-.14560000598430634,-.27129998803138733,-.5192999839782715,.45260000228881836,.5539000034332275,.8374000191688538,-.7070000171661377,-.48809999227523804,-.4099999964237213,0,.14790000021457672,.3447999954223633,.42980000376701355,.5579000115394592,-.1264999955892563,-.042500000447034836,.07670000195503235,.6635000109672546,-.38119998574256897,-.8367999792098999,1.0286999940872192,-.10209999978542328,.3587000072002411,-.5945000052452087,.16920000314712524,-.121799997985363,.32829999923706055,.22390000522136688,.20430000126361847,.05900000035762787,-.48350000381469727,.6165000200271606,-.4011000096797943,.5577999949455261,-.21639999747276306,-.017500000074505806,.29809999465942383,.10999999940395355,.27149999141693115,-.2994999885559082,-.46700000762939453,.1565999984741211,.046799998730421066,-.13210000097751617,1.3686000108718872,0,-.4115999937057495,1.0185999870300293,-.3935000002384186,.5223000049591064,.3684999942779541,.25769999623298645,1.5192999839782715,.2705000042915344,.3790999948978424,.012000000104308128,-.33970001339912415,.14830000698566437,.2766000032424927,.35929998755455017,.7714999914169312,.3149999976158142,-1.618499994277954,.18889999389648438,-.2651999890804291,-.09650000184774399,.420199990272522,.18709999322891235,-.3684000074863434,-.07779999822378159,.8942999839782715,.3693999946117401,.28790000081062317,.4489000141620636,-.26010000705718994,.4771000146865845,.1923000067472458,.43810001015663147,.16949999332427979,.45249998569488525,.3352000117301941,.1582999974489212,.4036000072956085,-.04800000041723251,.5023000240325928,-.26489999890327454,.76910001039505,-.35519999265670776,1.0300999879837036,-.11410000175237656,-.5932000279426575,.17489999532699585,.13130000233650208,-.18039999902248383,.399399995803833,.22910000383853912,.31690001487731934,.35989999771118164,-.0038999998942017555,-.2955999970436096,.4408999979496002,-.16089999675750732,.3774999976158142,-.13459999859333038,.2838999927043915,.5128999948501587,.1265999972820282,.4293999969959259,.28060001134872437,.49070000648498535,CV,.219200000166893,.15649999678134918,.6934999823570251,.3617999851703644,.6735000014305115,.5777999758720398,-.5636000037193298,.5569000244140625,.30379998683929443,-.32760000228881836,-.6991999745368958,.010300000198185444,-.4659000039100647,HV,Xy,.18410000205039978,.707099974155426,.12269999831914902,.7949000000953674,-.6592000126838684,-1.3148000240325928,-.4066999852657318,-.1316000074148178,-.4925000071525574,-.09290000051259995,-.4352000057697296,-.2206999957561493,-.9959999918937683,-.723800003528595,-.5468999743461609,-1.2939000129699707,-.01360000018030405,.065700002014637,.7189000248908997,.05700000002980232,.661899983882904,-.6381000280380249,-.8072999715805054,.23549999296665192,.30480000376701355,-.019899999722838402,-.07519999891519547,.44609999656677246,.1559000015258789,1.1167999505996704,-1.8039000034332275,.23649999499320984,-.22059999406337738,.4480000138282776,-1.1339999437332153,-.5652999877929688,-.40529999136924744,-.13609999418258667,.2198999971151352,.053599998354911804,-.020999999716877937,.6984999775886536,.9642999768257141,-.41519999504089355,-1.0369000434875488,-.18299999833106995,.5882999897003174,-.29179999232292175,-.5293999910354614,-.6541000008583069,.9473000168800354,-.19059999287128448,-.8483999967575073,-.3456999957561493,.9541000127792358,1.4230999946594238,-.7924000024795532,VV,EV,-.2596000134944916,.8381999731063843,-.4415999948978424,-.37040001153945923,-.7487000226974487,-.10790000110864639,-.29919999837875366,-.3276999890804291,.025100000202655792,-.9187999963760376,.10939999669790268,.8230999708175659,-3.233299970626831,.03500000014901161,HV,SV,.2791000008583069,.3206000030040741,.5662000179290771,-.3783999979496002,.4032000005245209,-1.794800043106079,-.15539999306201935,.3785000145435333,.05339999869465828,-.16529999673366547,-.09870000183582306,-.10050000250339508,-.6460999846458435,.8034999966621399,-.24050000309944153,-.12380000203847885,-.35760000348091125,.09610000252723694,-.6401000022888184,.2029000073671341,.23589999973773956,.4950999915599823,.19210000336170197,-.37450000643730164,.34630000591278076,.289900004863739,-.15330000221729279,-.4169999957084656,.37700000405311584,.6998000144958496,.593999981880188,.5911999940872192,-.5570999979972839,.023800000548362732,-.2475000023841858,.030700000002980232,-.38749998807907104,-.7437000274658203,.5144000053405762,.00570000009611249,.765500009059906,.1720000058412552,-2.5624001026153564,-.30660000443458557,.36469998955726624,.17270000278949738,-.03290000185370445,-.18930000066757202,.07020000368356705,-1.2453999519348145,.14959999918937683,pV,.4146000146865845,-.2667999863624573,-.11060000211000443,.03620000183582306,-.3188999891281128,-.7278000116348267,-.08940000087022781,-.22769999504089355,-.2393999993801117,1.011199951171875,-.2962000072002411,.7775999903678894,.2944999933242798,-.22339999675750732,.27639999985694885,.8011000156402588,-.17440000176429749,.15809999406337738,-1.7552000284194946,-.384799987077713,.5993000268936157,.5267999768257141,-.04170000180602074,.4733000099658966,-.3400999903678894,-.14499999582767487,.7088000178337097,-.13179999589920044,.04259999841451645,-.5027999877929688,.3831999897956848,-.011800000444054604,-.4357999861240387,.3749000132083893,-.12030000239610672,-.5648000240325928,-.1972000002861023,-.8769000172615051,-.3675000071525574,-.2003999948501587,-.6069999933242798,-.18569999933242798,.3467999994754791,-.36239999532699585,.5357999801635742,-.3700999915599823,.13359999656677246,.9545000195503235,.11389999836683273,-.16990000009536743,Xy,.2890999913215637,.2612999975681305,-.03440000116825104,-1.9498000144958496,-2.024899959564209,-.6004999876022339,-.6258000135421753,-1.2348999977111816,.328000009059906,-.54339998960495,-.7712000012397766,-.9057000279426575,-.16680000722408295,-.9904999732971191,-.03720000013709068,-1.1638000011444092,.12620000541210175,-.5248000025749207,-.15379999577999115,-.36820000410079956,.3249000012874603,.06499999761581421,.051100000739097595,-.46070000529289246,.22310000658035278,.28220000863075256,.1396999955177307,-.49380001425743103,.39480000734329224,-.4074999988079071,-.6410999894142151,-.009100000374019146,-.13330000638961792,-.5192000269889832,-.16609999537467957,Xy,-.07069999724626541,.4805999994277954,.38280001282691956,.22290000319480896,.6159999966621399,.33709999918937683,.188400000333786,.13809999823570251,MV,.2833000123500824,-.1225999966263771,-3.9189000129699707,-.459199994802475,-.3434999883174896,-.6654000282287598,-.5055999755859375,-.863099992275238,.15360000729560852,-.6427000164985657,-.08839999884366989,-.0471000000834465,.11060000211000443,.382099986076355,-.23919999599456787,-.4050999879837036,.08910000324249268,-.6972000002861023,-.4699000120162964,.09220000356435776,.08060000091791153,-.6773999929428101,-.062199998646974564,-.9300000071525574,.13369999825954437])}function QM(){QM=v1,yl=B(d(Ht,2),DA,17,0,[null,B(d(Ht,1),Vt,3,0,[new u(0,1.007825032),new u(1,2.014101778),new u(2,3.016049268),new u(3,4.027834627),new u(4,5.039542911),new u(5,6.044942608)]),B(d(Ht,1),Vt,3,0,[new u(1,3.01602931),new u(2,4.00260325),new u(3,5.012223628),new u(4,6.018888072),new u(5,7.028030527),new u(6,8.033921838),new u(7,9.043820323),new u(8,10.052399713)]),B(d(Ht,1),Vt,3,0,[new u(1,4.027182329),new u(2,5.012537796),new u(3,6.015122281),new u(4,7.016004049),new u(5,8.02248667),new u(6,9.026789122),new u(7,10.035480884),new u(8,11.043796166),new u(9,12.05378)]),B(d(Ht,1),Vt,3,0,[new u(1,5.04079),new u(2,6.019725804),new u(3,7.016929246),new u(4,8.005305094),new u(5,9.012182135),new u(6,10.01353372),new u(7,11.021657653),new u(8,12.026920631),new u(9,13.036133834),new u(10,14.042815522)]),B(d(Ht,1),Vt,3,0,[new u(2,7.029917389),new u(3,8.024606713),new u(4,9.013328806),new u(5,10.012937027),new u(6,11.009305466),new u(7,12.014352109),new u(8,13.017780267),new u(9,14.025404064),new u(10,15.031097291),new u(11,16.039808836),new u(12,17.046931399),new u(13,18.05617),new u(14,19.06373)]),B(d(Ht,1),Vt,3,0,[new u(2,8.037675026),new u(3,9.031040087),new u(4,10.01685311),new u(5,11.011433818),new u(6,12),new u(7,13.003354838),new u(8,14.003241988),new u(9,15.010599258),new u(10,16.014701243),new u(11,17.022583712),new u(12,18.026757058),new u(13,19.035248094),new u(14,20.040322395),new u(15,21.04934),new u(16,22.05645)]),B(d(Ht,1),Vt,3,0,[new u(3,10.042618),new u(4,11.026796226),new u(5,12.018613202),new u(6,13.005738584),new u(7,14.003074005),new u(8,15.000108898),new u(9,16.006101417),new u(10,17.008449673),new u(11,18.014081827),new u(12,19.017026896),new u(13,20.023367295),new u(14,21.027087574),new u(15,22.034440259),new u(16,23.04051),new u(17,24.0505)]),B(d(Ht,1),Vt,3,0,[new u(4,12.034404776),new u(5,13.0248104),new u(6,14.008595285),new u(7,15.003065386),new u(8,15.994914622),new u(9,16.999131501),new u(10,17.999160419),new u(11,19.00357873),new u(12,20.00407615),new u(13,21.008654631),new u(14,22.009967157),new u(15,23.015691325),new u(16,24.020369922),new u(17,25.02914),new u(18,26.03775)]),B(d(Ht,1),Vt,3,0,[new u(5,14.03608),new u(6,15.018010856),new u(7,16.01146573),new u(8,17.002095238),new u(9,18.000937667),new u(10,18.998403205),new u(11,19.999981324),new u(12,20.999948921),new u(13,22.00299925),new u(14,23.003574385),new u(15,24.008099371),new u(16,25.012094963),new u(17,26.019633157),new u(18,27.026892316),new u(19,28.03567),new u(20,29.04326)]),B(d(Ht,1),Vt,3,0,[new u(6,16.025756907),new u(7,17.017697565),new u(8,18.005697066),new u(9,19.001879839),new u(10,19.992440176),new u(11,20.993846744),new u(12,21.99138551),new u(13,22.994467337),new u(14,23.993615074),new u(15,24.997789899),new u(16,26.000461498),new u(17,27.0076152),new u(18,28.012108072),new u(19,29.019345902),new u(20,30.023872),new u(21,31.03311),new u(22,32.03991)]),B(d(Ht,1),Vt,3,0,[new u(7,18.02718),new u(8,19.01387945),new u(9,20.00734826),new u(10,20.997655099),new u(11,21.994436782),new u(12,22.989769675),new u(13,23.990963332),new u(14,24.989954352),new u(15,25.992589898),new u(16,26.994008702),new u(17,27.99889041),new u(18,29.002811301),new u(19,30.009226487),new u(20,31.013595108),new u(21,32.019649792),new u(22,33.027386),new u(23,34.0349),new u(24,35.04418)]),B(d(Ht,1),Vt,3,0,[new u(8,20.018862744),new u(9,21.011714174),new u(10,21.999574055),new u(11,22.99412485),new u(12,23.985041898),new u(13,24.985837023),new u(14,25.98259304),new u(15,26.984340742),new u(16,27.983876703),new u(17,28.988554743),new u(18,29.990464529),new u(19,30.996548459),new u(20,31.999145889),new u(21,33.005586975),new u(22,34.00907244),new u(23,35.018669),new u(24,36.02245),new u(25,37.03124)]),B(d(Ht,1),Vt,3,0,[new u(8,21.02804),new u(9,22.01952),new u(10,23.0072649),new u(11,23.999940911),new u(12,24.990428555),new u(13,25.986891659),new u(14,26.981538441),new u(15,27.981910184),new u(16,28.980444848),new u(17,29.982960304),new u(18,30.983946023),new u(19,31.988124379),new u(20,32.990869587),new u(21,33.996927255),new u(22,34.99993765),new u(23,36.006351501),new u(24,37.01031),new u(25,38.0169),new u(26,39.0219)]),B(d(Ht,1),Vt,3,0,[new u(8,22.03453),new u(9,23.02552),new u(10,24.011545711),new u(11,25.00410664),new u(12,25.992329935),new u(13,26.986704764),new u(14,27.976926533),new u(15,28.976494719),new u(16,29.973770218),new u(17,30.975363275),new u(18,31.974148129),new u(19,32.97800052),new u(20,33.978575745),new u(21,34.984584158),new u(22,35.986687363),new u(23,36.99299599),new u(24,37.99598),new u(25,39.0023),new u(26,40.0058),new u(27,41.0127),new u(28,42.0161)]),B(d(Ht,1),Vt,3,0,[new u(9,24.03435),new u(10,25.02026),new u(11,26.01178),new u(12,26.999191645),new u(13,27.99231233),new u(14,28.981801376),new u(15,29.978313807),new u(16,30.973761512),new u(17,31.973907163),new u(18,32.971725281),new u(19,33.973636381),new u(20,34.973314249),new u(21,35.978259824),new u(22,36.979608338),new u(23,37.98447),new u(24,38.98642),new u(25,39.99105),new u(26,40.9948),new u(27,42.00009),new u(28,43.00331),new u(29,44.00988),new u(30,45.01514),new u(31,46.02383)]),B(d(Ht,1),Vt,3,0,[new u(10,26.02788),new u(11,27.018795),new u(12,28.004372661),new u(13,28.996608805),new u(14,29.984902954),new u(15,30.979554421),new u(16,31.97207069),new u(17,32.971458497),new u(18,33.967866831),new u(19,34.96903214),new u(20,35.96708088),new u(21,36.971125716),new u(22,37.971163443),new u(23,38.975135275),new u(24,39.97547),new u(25,40.98003),new u(26,41.98149),new u(27,42.9866),new u(28,43.98832),new u(29,44.99482),new u(30,45.99957),new u(31,47.00762),new u(32,48.01299),new u(33,49.02201)]),B(d(Ht,1),Vt,3,0,[new u(11,28.02851),new u(12,29.01411),new u(13,30.00477),new u(14,30.992416014),new u(15,31.985688908),new u(16,32.977451798),new u(17,33.973761967),new u(18,34.968852707),new u(19,35.968306945),new u(20,36.9659026),new u(21,37.96801055),new u(22,38.968007677),new u(23,39.970415555),new u(24,40.970650212),new u(25,41.973174994),new u(26,42.974203385),new u(27,43.978538712),new u(28,44.9797),new u(29,45.98412),new u(30,46.98795),new u(31,47.99485),new u(32,48.99989),new u(33,50.00773),new u(34,51.01353)]),B(d(Ht,1),Vt,3,0,[new u(12,30.02156),new u(13,31.012126),new u(14,31.99766066),new u(15,32.989928719),new u(16,33.980270118),new u(17,34.975256726),new u(18,35.967546282),new u(19,36.966775912),new u(20,37.962732161),new u(21,38.964313413),new u(22,39.962383123),new u(23,40.964500828),new u(24,41.963046386),new u(25,42.965670701),new u(26,43.965365269),new u(27,44.968094979),new u(28,45.968093467),new u(29,46.972186238),new u(30,47.97507),new u(31,48.98218),new u(32,49.98594),new u(33,50.99324),new u(34,51.99817),new u(35,53.006227)]),B(d(Ht,1),Vt,3,0,[new u(13,32.02192),new u(14,33.00726),new u(15,33.99841),new u(16,34.988011615),new u(17,35.981293405),new u(18,36.973376915),new u(19,37.969080107),new u(20,38.963706861),new u(21,39.963998672),new u(22,40.961825972),new u(23,41.962403059),new u(24,42.960715746),new u(25,43.961556146),new u(26,44.960699658),new u(27,45.961976203),new u(28,46.961677807),new u(29,47.965512946),new u(30,48.967450084),new u(31,49.972782832),new u(32,50.97638),new u(33,51.98261),new u(34,52.98712),new u(35,53.99399),new u(36,54.999388)]),B(d(Ht,1),Vt,3,0,[new u(14,34.01412),new u(15,35.004765),new u(16,35.993087234),new u(17,36.985871505),new u(18,37.976318637),new u(19,38.970717729),new u(20,39.962591155),new u(21,40.962278349),new u(22,41.958618337),new u(23,42.958766833),new u(24,43.955481094),new u(25,44.956185938),new u(26,45.953692759),new u(27,46.954546459),new u(28,47.952533512),new u(29,48.955673302),new u(30,49.957518286),new u(31,50.961474238),new u(32,51.9651),new u(33,52.97005),new u(34,53.97468),new u(35,54.98055),new u(36,55.98579),new u(37,56.992356)]),B(d(Ht,1),Vt,3,0,[new u(15,36.01492),new u(16,37.00305),new u(17,37.9947),new u(18,38.984790009),new u(19,39.977964014),new u(20,40.969251316),new u(21,41.965516761),new u(22,42.96115098),new u(23,43.959403048),new u(24,44.955910243),new u(25,45.95517025),new u(26,46.952408027),new u(27,47.952234991),new u(28,48.950024065),new u(29,49.952187008),new u(30,50.9536027),new u(31,51.95665),new u(32,52.95817),new u(33,53.963),new u(34,54.9694),new u(35,55.97266),new u(36,56.97704),new u(37,57.98307),new u(38,58.988041)]),B(d(Ht,1),Vt,3,0,[new u(16,38.00977),new u(17,39.001323),new u(18,39.990498907),new u(19,40.983131),new u(20,41.973031622),new u(21,42.968523342),new u(22,43.959690235),new u(23,44.958124349),new u(24,45.952629491),new u(25,46.951763792),new u(26,47.947947053),new u(27,48.947870789),new u(28,49.944792069),new u(29,50.946616017),new u(30,51.946898175),new u(31,52.949731709),new u(32,53.95087),new u(33,54.95512),new u(34,55.95799),new u(35,56.9643),new u(36,57.96611),new u(37,58.97196),new u(38,59.97564),new u(39,60.982018)]),B(d(Ht,1),Vt,3,0,[new u(17,40.01109),new u(18,40.99974),new u(19,41.99123),new u(20,42.98065),new u(21,43.9744),new u(22,44.965782286),new u(23,45.960199491),new u(24,46.954906918),new u(25,47.95225448),new u(26,48.948516914),new u(27,49.947162792),new u(28,50.943963675),new u(29,51.944779658),new u(30,52.944342517),new u(31,53.946444381),new u(32,54.947238194),new u(33,55.95036),new u(34,56.95236),new u(35,57.95665),new u(36,58.9593),new u(37,59.9645),new u(38,60.96741),new u(39,61.97314),new u(40,62.97675)]),B(d(Ht,1),Vt,3,0,[new u(18,42.00643),new u(19,42.997707),new u(20,43.98547),new u(21,44.97916),new u(22,45.968361649),new u(23,46.962906512),new u(24,47.954035861),new u(25,48.951341135),new u(26,49.946049607),new u(27,50.944771767),new u(28,51.940511904),new u(29,52.940653781),new u(30,53.938884921),new u(31,54.940844164),new u(32,55.940645238),new u(33,56.9437538),new u(34,57.94425),new u(35,58.94863),new u(36,59.94973),new u(37,60.95409),new u(38,61.9558),new u(39,62.96186),new u(40,63.9642),new u(41,64.97037)]),B(d(Ht,1),Vt,3,0,[new u(19,44.00687),new u(20,44.99451),new u(21,45.98672),new u(22,46.9761),new u(23,47.96887),new u(24,48.959623415),new u(25,49.95424396),new u(26,50.948215487),new u(27,51.945570079),new u(28,52.941294702),new u(29,53.940363247),new u(30,54.938049636),new u(31,55.938909366),new u(32,56.938287458),new u(33,57.939986451),new u(34,58.940447166),new u(35,59.943193998),new u(36,60.94446),new u(37,61.94797),new u(38,62.94981),new u(39,63.95373),new u(40,64.9561),new u(41,65.96082),new u(42,66.96382)]),B(d(Ht,1),Vt,3,0,[new u(19,45.01456),new u(20,46.00081),new u(21,46.99289),new u(22,47.98056),new u(23,48.97361),new u(24,49.962993316),new u(25,50.956824936),new u(26,51.948116526),new u(27,52.945312282),new u(28,53.939614836),new u(29,54.938298029),new u(30,55.934942133),new u(31,56.935398707),new u(32,57.933280458),new u(33,58.934880493),new u(34,59.934076943),new u(35,60.936749461),new u(36,61.936770495),new u(37,62.940118442),new u(38,63.94087),new u(39,64.94494),new u(40,65.94598),new u(41,66.95),new u(42,67.95251),new u(43,68.9577)]),B(d(Ht,1),Vt,3,0,[new u(21,48.00176),new u(22,48.98972),new u(23,49.98154),new u(24,50.97072),new u(25,51.96359),new u(26,52.954224985),new u(27,53.948464147),new u(28,54.942003149),new u(29,55.939843937),new u(30,56.936296235),new u(31,57.935757571),new u(32,58.933200194),new u(33,59.933822196),new u(34,60.932479381),new u(35,61.934054212),new u(36,62.933615218),new u(37,63.935813523),new u(38,64.936484581),new u(39,65.939825412),new u(40,66.94061),new u(41,67.94436),new u(42,68.9452),new u(43,69.94981),new u(44,70.95173),new u(45,71.95641)]),B(d(Ht,1),Vt,3,0,[new u(22,49.99593),new u(23,50.98772),new u(24,51.97568),new u(25,52.96846),new u(26,53.957910508),new u(27,54.951336329),new u(28,55.942136339),new u(29,56.939800489),new u(30,57.935347922),new u(31,58.934351553),new u(32,59.930790633),new u(33,60.931060442),new u(34,61.928348763),new u(35,62.929672948),new u(36,63.927969574),new u(37,64.930088013),new u(38,65.929115232),new u(39,66.931569638),new u(40,67.931844932),new u(41,68.935181837),new u(42,69.93614),new u(43,70.94),new u(44,71.9413),new u(45,72.94608),new u(46,73.94791),new u(47,74.95297),new u(48,75.95533),new u(49,76.96083),new u(50,77.9638)]),B(d(Ht,1),Vt,3,0,[new u(23,51.99718),new u(24,52.98555),new u(25,53.97671),new u(26,54.96605),new u(27,55.95856),new u(28,56.949215695),new u(29,57.944540734),new u(30,58.939504114),new u(31,59.937368123),new u(32,60.933462181),new u(33,61.932587299),new u(34,62.929601079),new u(35,63.929767865),new u(36,64.927793707),new u(37,65.928873041),new u(38,66.927750294),new u(39,67.929637875),new u(40,68.929425281),new u(41,69.932409287),new u(42,70.932619818),new u(43,71.93552),new u(44,72.93649),new u(45,73.9402),new u(46,74.9417),new u(47,75.94599),new u(48,76.94795),new u(49,77.95281),new u(50,78.95528),new u(51,79.96189)]),B(d(Ht,1),Vt,3,0,[new u(24,53.99295),new u(25,54.98398),new u(26,55.97238),new u(27,56.96491),new u(28,57.954596465),new u(29,58.949267074),new u(30,59.941832031),new u(31,60.939513907),new u(32,61.934334132),new u(33,62.933215563),new u(34,63.929146578),new u(35,64.929245079),new u(36,65.926036763),new u(37,66.927130859),new u(38,67.924847566),new u(39,68.926553538),new u(40,69.92532487),new u(41,70.927727195),new u(42,71.926861122),new u(43,72.929779469),new u(44,73.929458261),new u(45,74.932937379),new u(46,75.933394207),new u(47,76.937085857),new u(48,77.938569576),new u(49,78.942095175),new u(50,79.944414722),new u(51,80.95048),new u(52,81.95484)]),B(d(Ht,1),Vt,3,0,[new u(25,55.99491),new u(26,56.98293),new u(27,57.97425),new u(28,58.96337),new u(29,59.95706),new u(30,60.94917),new u(31,61.944179608),new u(32,62.939141527),new u(33,63.936838307),new u(34,64.932739322),new u(35,65.931592355),new u(36,66.928204915),new u(37,67.927983497),new u(38,68.925580912),new u(39,69.926027741),new u(40,70.92470501),new u(41,71.92636935),new u(42,72.925169832),new u(43,73.926940999),new u(44,74.926500645),new u(45,75.928928262),new u(46,76.929281189),new u(47,77.93165595),new u(48,78.932916371),new u(49,79.936588154),new u(50,80.937752955),new u(51,81.94316),new u(52,82.94687),new u(53,83.95234)]),B(d(Ht,1),Vt,3,0,[new u(26,57.99101),new u(27,58.98175),new u(28,59.97019),new u(29,60.96379),new u(30,61.95465),new u(31,62.94964),new u(32,63.941572638),new u(33,64.939440762),new u(34,65.933846798),new u(35,66.932738415),new u(36,67.928097266),new u(37,68.927972002),new u(38,69.924250365),new u(39,70.924953991),new u(40,71.922076184),new u(41,72.923459361),new u(42,73.921178213),new u(43,74.922859494),new u(44,75.921402716),new u(45,76.923548462),new u(46,77.922852886),new u(47,78.92540156),new u(48,79.925444764),new u(49,80.928821065),new u(50,81.929550326),new u(51,82.93451),new u(52,83.93731),new u(53,84.94269),new u(54,85.94627)]),B(d(Ht,1),Vt,3,0,[new u(27,59.99313),new u(28,60.98062),new u(29,61.9732),new u(30,62.96369),new u(31,63.957572),new u(32,64.949484),new u(33,65.944099147),new u(34,66.939190417),new u(35,67.936792976),new u(36,68.932280154),new u(37,69.930927811),new u(38,70.927114724),new u(39,71.926752647),new u(40,72.923825288),new u(41,73.923929076),new u(42,74.921596417),new u(43,75.922393933),new u(44,76.920647703),new u(45,77.921828577),new u(46,78.920948498),new u(47,79.922578162),new u(48,80.922132884),new u(49,81.924504668),new u(50,82.924980625),new u(51,83.92906),new u(52,84.93181),new u(53,85.93623),new u(54,86.93958),new u(55,87.94456),new u(56,88.94923)]),B(d(Ht,1),Vt,3,0,[new u(31,64.96466),new u(32,65.95521),new u(33,66.95009),new u(34,67.94187),new u(35,68.939562155),new u(36,69.933504),new u(37,70.931868378),new u(38,71.927112313),new u(39,72.9267668),new u(40,73.922476561),new u(41,74.922523571),new u(42,75.919214107),new u(43,76.91991461),new u(44,77.917309522),new u(45,78.918499802),new u(46,79.916521828),new u(47,80.917992931),new u(48,81.9167),new u(49,82.919119072),new u(50,83.918464523),new u(51,84.922244678),new u(52,85.924271165),new u(53,86.928520749),new u(54,87.931423982),new u(55,88.93602),new u(56,89.93942),new u(57,90.94537),new u(58,91.94933)]),B(d(Ht,1),Vt,3,0,[new u(32,66.96479),new u(33,67.958248),new u(34,68.950178),new u(35,69.944208),new u(36,70.939246),new u(37,71.936496876),new u(38,72.931794889),new u(39,73.929891152),new u(40,74.92577641),new u(41,75.924541974),new u(42,76.921380123),new u(43,77.92114613),new u(44,78.918337647),new u(45,79.918529952),new u(46,80.91629106),new u(47,81.916804666),new u(48,82.915180219),new u(49,83.916503685),new u(50,84.915608027),new u(51,85.918797162),new u(52,86.920710713),new u(53,87.924065908),new u(54,88.92638726),new u(55,89.930634988),new u(56,90.9339653),new u(57,91.939255258),new u(58,92.9431),new u(59,93.94868)]),B(d(Ht,1),Vt,3,0,[new u(33,68.96532),new u(34,69.95601),new u(35,70.95051),new u(36,71.94190754),new u(37,72.938931115),new u(38,73.933258225),new u(39,74.931033794),new u(40,75.925948304),new u(41,76.92466788),new u(42,77.920386271),new u(43,78.920082992),new u(44,79.91637804),new u(45,80.916592419),new u(46,81.913484601),new u(47,82.914135952),new u(48,83.911506627),new u(49,84.912526954),new u(50,85.910610313),new u(51,86.913354251),new u(52,87.914446951),new u(53,88.917632505),new u(54,89.919523803),new u(55,90.923442418),new u(56,91.926152752),new u(57,92.931265246),new u(58,93.934362),new u(59,94.93984),new u(60,95.94307),new u(61,96.94856)]),B(d(Ht,1),Vt,3,0,[new u(34,70.96532),new u(35,71.95908),new u(36,72.950366),new u(37,73.944470376),new u(38,74.938569199),new u(39,75.935071448),new u(40,76.930406599),new u(41,77.928141485),new u(42,78.923996719),new u(43,79.922519322),new u(44,80.918994165),new u(45,81.918207691),new u(46,82.915111951),new u(47,83.914384676),new u(48,84.911789341),new u(49,85.91116708),new u(50,86.909183465),new u(51,87.911318556),new u(52,88.912279939),new u(53,89.914808941),new u(54,90.91653416),new u(55,91.919725442),new u(56,92.922032765),new u(57,93.926407326),new u(58,94.92931926),new u(59,95.934283962),new u(60,96.937342863),new u(61,97.941703557),new u(62,98.945420616),new u(63,99.94987),new u(64,100.953195994),new u(65,101.95921)]),B(d(Ht,1),Vt,3,0,[new u(35,72.96597),new u(36,73.95631),new u(37,74.94992),new u(38,75.94161),new u(39,76.937761511),new u(40,77.932179362),new u(41,78.929707076),new u(42,79.924524588),new u(43,80.923213095),new u(44,81.918401258),new u(45,82.917555029),new u(46,83.913424778),new u(47,84.912932689),new u(48,85.909262351),new u(49,86.908879316),new u(50,87.905614339),new u(51,88.907452906),new u(52,89.907737596),new u(53,90.910209845),new u(54,91.911029895),new u(55,92.91402241),new u(56,93.915359856),new u(57,94.919358213),new u(58,95.921680473),new u(59,96.926148757),new u(60,97.928471177),new u(61,98.933315038),new u(62,99.935351729),new u(63,100.940517434),new u(64,101.943018795),new u(65,102.94895),new u(66,103.95233)]),B(d(Ht,1),Vt,3,0,[new u(38,76.94962),new u(39,77.9435),new u(40,78.937350712),new u(41,79.931982402),new u(42,80.929128719),new u(43,81.926792071),new u(44,82.922352572),new u(45,83.920387768),new u(46,84.916427076),new u(47,85.914887724),new u(48,86.910877833),new u(49,87.909503361),new u(50,88.905847902),new u(51,89.907151443),new u(52,90.907303415),new u(53,91.908946832),new u(54,92.909581582),new u(55,93.911594008),new u(56,94.912823709),new u(57,95.915897787),new u(58,96.918131017),new u(59,97.922219525),new u(60,98.924634736),new u(61,99.927756402),new u(62,100.930313395),new u(63,101.933555501),new u(64,102.93694),new u(65,103.94145),new u(66,104.94509),new u(67,105.95022)]),B(d(Ht,1),Vt,3,0,[new u(39,78.94916),new u(40,79.94055),new u(41,80.936815296),new u(42,81.931086249),new u(43,82.92865213),new u(44,83.92325),new u(45,84.92146522),new u(46,85.916472851),new u(47,86.914816578),new u(48,87.910226179),new u(49,88.908888916),new u(50,89.904703679),new u(51,90.905644968),new u(52,91.905040106),new u(53,92.906475627),new u(54,93.906315765),new u(55,94.908042739),new u(56,95.908275675),new u(57,96.910950716),new u(58,97.912746366),new u(59,98.916511084),new u(60,99.917761704),new u(61,100.921139958),new u(62,101.922981089),new u(63,102.926597062),new u(64,103.92878),new u(65,104.93305),new u(66,105.93591),new u(67,106.94086),new u(68,107.94428)]),B(d(Ht,1),Vt,3,0,[new u(40,80.94905),new u(41,81.94313),new u(42,82.936703713),new u(43,83.93357),new u(44,84.927906486),new u(45,85.925037588),new u(46,86.920361435),new u(47,87.91833144),new u(48,88.913495503),new u(49,89.911264109),new u(50,90.906990538),new u(51,91.907193214),new u(52,92.906377543),new u(53,93.907283457),new u(54,94.906835178),new u(55,95.908100076),new u(56,96.908097144),new u(57,97.91033069),new u(58,98.911617864),new u(59,99.914181434),new u(60,100.915251567),new u(61,101.918037417),new u(62,102.919141297),new u(63,103.922459464),new u(64,104.923934023),new u(65,105.92819),new u(66,106.93031),new u(67,107.93501),new u(68,108.93763),new u(69,109.94268)]),B(d(Ht,1),Vt,3,0,[new u(41,82.94874),new u(42,83.94009),new u(43,84.93659),new u(44,85.930695167),new u(45,86.92732683),new u(46,87.921952728),new u(47,88.919480562),new u(48,89.913936161),new u(49,90.911750754),new u(50,91.90681048),new u(51,92.906812213),new u(52,93.905087578),new u(53,94.905841487),new u(54,95.904678904),new u(55,96.906021033),new u(56,97.905407846),new u(57,98.907711598),new u(58,99.907477149),new u(59,100.910346543),new u(60,101.910297162),new u(61,102.913204596),new u(62,103.913758387),new u(63,104.916972087),new u(64,105.918134284),new u(65,106.921694724),new u(66,107.923973837),new u(67,108.92781),new u(68,109.92973),new u(69,110.93451),new u(70,111.93684),new u(71,112.94203)]),B(d(Ht,1),Vt,3,0,[new u(42,84.94894),new u(43,85.94288),new u(44,86.93653),new u(45,87.93283),new u(46,88.92754288),new u(47,89.92355583),new u(48,90.9184282),new u(49,91.915259655),new u(50,92.910248473),new u(51,93.909656309),new u(52,94.907656454),new u(53,95.907870803),new u(54,96.906364843),new u(55,97.907215692),new u(56,98.906254554),new u(57,99.907657594),new u(58,100.90731438),new u(59,101.909212938),new u(60,102.909178805),new u(61,103.911444898),new u(62,104.911658043),new u(63,105.914355408),new u(64,106.915081691),new u(65,107.918479973),new u(66,108.919980998),new u(67,109.92339),new u(68,110.92505),new u(69,111.92924),new u(70,112.93133),new u(71,113.93588),new u(72,114.93828)]),B(d(Ht,1),Vt,3,0,[new u(43,86.94918),new u(44,87.94042),new u(45,88.93611),new u(46,89.92978),new u(47,90.926377434),new u(48,91.92012),new u(49,92.917051523),new u(50,93.911359569),new u(51,94.910412729),new u(52,95.907597681),new u(53,96.907554546),new u(54,97.905287111),new u(55,98.905939307),new u(56,99.904219664),new u(57,100.905582219),new u(58,101.904349503),new u(59,102.906323677),new u(60,103.905430145),new u(61,104.907750341),new u(62,105.907326913),new u(63,106.909907207),new u(64,107.910192211),new u(65,108.913201565),new u(66,109.913966185),new u(67,110.91756),new u(68,111.918821673),new u(69,112.92254),new u(70,113.923891981),new u(71,114.92831),new u(72,115.93016),new u(73,116.93479),new u(74,117.93703)]),B(d(Ht,1),Vt,3,0,[new u(44,88.94938),new u(45,89.94287),new u(46,90.93655),new u(47,91.93198),new u(48,92.92574),new u(49,93.921698),new u(50,94.915898541),new u(51,95.914518212),new u(52,96.911336643),new u(53,97.910716431),new u(54,98.908132101),new u(55,99.90811663),new u(56,100.906163526),new u(57,101.906842845),new u(58,102.905504182),new u(59,103.906655315),new u(60,104.905692444),new u(61,105.907284615),new u(62,106.90675054),new u(63,107.908730768),new u(64,108.908735621),new u(65,109.910949525),new u(66,110.91166),new u(67,111.913969253),new u(68,112.91542),new u(69,113.91734336),new u(70,114.920124676),new u(71,115.922746643),new u(72,116.92535),new u(73,117.92943),new u(74,118.93136),new u(75,119.93578),new u(76,120.93808)]),B(d(Ht,1),Vt,3,0,[new u(45,90.94948),new u(46,91.94042),new u(47,92.93591),new u(48,93.92877),new u(49,94.92469),new u(50,95.91822194),new u(51,96.916478921),new u(52,97.912720751),new u(53,98.911767757),new u(54,99.908504596),new u(55,100.908289144),new u(56,101.905607716),new u(57,102.906087204),new u(58,103.904034912),new u(59,104.905084046),new u(60,105.903483087),new u(61,106.905128453),new u(62,107.903894451),new u(63,108.905953535),new u(64,109.905152385),new u(65,110.907643952),new u(66,111.907313277),new u(67,112.910151346),new u(68,113.910365322),new u(69,114.91368341),new u(70,115.914158288),new u(71,116.91784),new u(72,117.918983915),new u(73,118.92268),new u(74,119.92403),new u(75,120.92818),new u(76,121.9298),new u(77,122.93426)]),B(d(Ht,1),Vt,3,0,[new u(47,93.94278),new u(48,94.93548),new u(49,95.93068),new u(50,96.924),new u(51,97.921759995),new u(52,98.917597103),new u(53,99.916069387),new u(54,100.912802135),new u(55,101.911999996),new u(56,102.908972453),new u(57,103.908628228),new u(58,104.906528234),new u(59,105.906666431),new u(60,106.90509302),new u(61,107.905953705),new u(62,108.904755514),new u(63,109.90611046),new u(64,110.905294679),new u(65,111.907004132),new u(66,112.906565708),new u(67,113.908807907),new u(68,114.908762282),new u(69,115.911359558),new u(70,116.911684187),new u(71,117.914582383),new u(72,118.915666045),new u(73,119.918788609),new u(74,120.919851074),new u(75,121.92332),new u(76,122.9249),new u(77,123.92853),new u(78,124.93054),new u(79,125.9345),new u(80,126.93688)]),B(d(Ht,1),Vt,3,0,[new u(48,95.93977),new u(49,96.93494),new u(50,97.927579),new u(51,98.92501),new u(52,99.920230232),new u(53,100.918681442),new u(54,101.914777255),new u(55,102.913418952),new u(56,103.909848091),new u(57,104.909467818),new u(58,105.906458007),new u(59,106.906614232),new u(60,107.904183403),new u(61,108.904985569),new u(62,109.903005578),new u(63,110.904181628),new u(64,111.902757226),new u(65,112.904400947),new u(66,113.903358121),new u(67,114.905430553),new u(68,115.904755434),new u(69,116.907218242),new u(70,117.906914144),new u(71,118.909922582),new u(72,119.909851352),new u(73,120.91298039),new u(74,121.9135),new u(75,122.917003675),new u(76,123.917648302),new u(77,124.92124717),new u(78,125.922353996),new u(79,126.926434822),new u(80,127.927760617),new u(81,128.93226),new u(82,129.93398)]),B(d(Ht,1),Vt,3,0,[new u(49,97.94224),new u(50,98.93461),new u(51,99.931149033),new u(52,100.92656),new u(53,101.924707541),new u(54,102.919913896),new u(55,103.918338416),new u(56,104.914673434),new u(57,105.913461134),new u(58,106.910292195),new u(59,107.909719683),new u(60,108.907154078),new u(61,109.907168783),new u(62,110.905110677),new u(63,111.905533338),new u(64,112.904061223),new u(65,113.904916758),new u(66,114.903878328),new u(67,115.905259995),new u(68,116.904515731),new u(69,117.906354623),new u(70,118.905846334),new u(71,119.907961505),new u(72,120.907848847),new u(73,121.910277103),new u(74,122.910438951),new u(75,123.913175916),new u(76,124.913601387),new u(77,125.916464532),new u(78,126.917344048),new u(79,127.920170658),new u(80,128.921657958),new u(81,129.924854941),new u(82,130.926767408),new u(83,131.932919005),new u(84,132.93834),new u(85,133.94466)]),B(d(Ht,1),Vt,3,0,[new u(50,99.938954),new u(51,100.93606),new u(52,101.93049),new u(53,102.92813),new u(54,103.923185469),new u(55,104.921390409),new u(56,105.916880472),new u(57,106.915666702),new u(58,107.911965339),new u(59,108.911286879),new u(60,109.907852688),new u(61,110.907735404),new u(62,111.90482081),new u(63,112.905173373),new u(64,113.902781816),new u(65,114.903345973),new u(66,115.901744149),new u(67,116.902953765),new u(68,117.901606328),new u(69,118.90330888),new u(70,119.902196571),new u(71,120.904236867),new u(72,121.903440138),new u(73,122.905721901),new u(74,123.90527463),new u(75,124.907784924),new u(76,125.907653953),new u(77,126.91035098),new u(78,127.910534953),new u(79,128.913439976),new u(80,129.913852185),new u(81,130.916919144),new u(82,131.917744455),new u(83,132.923814085),new u(84,133.928463576),new u(85,134.93473),new u(86,135.93934),new u(87,136.94579)]),B(d(Ht,1),Vt,3,0,[new u(52,102.94012),new u(53,103.936287),new u(54,104.931528593),new u(55,105.928183134),new u(56,106.92415),new u(57,107.92216),new u(58,108.918136092),new u(59,109.917533911),new u(60,110.912534147),new u(61,111.91239464),new u(62,112.909377941),new u(63,113.909095876),new u(64,114.906598812),new u(65,115.906797235),new u(66,116.90483959),new u(67,117.905531885),new u(68,118.90394646),new u(69,119.905074315),new u(70,120.903818044),new u(71,121.905175415),new u(72,122.904215696),new u(73,123.905937525),new u(74,124.905247804),new u(75,125.907248153),new u(76,126.906914564),new u(77,127.90916733),new u(78,128.909150092),new u(79,129.911546459),new u(80,130.911946487),new u(81,131.914413247),new u(82,132.915236466),new u(83,133.920551554),new u(84,134.925167962),new u(85,135.93066),new u(86,136.93531),new u(87,137.94096),new u(88,138.94571)]),B(d(Ht,1),Vt,3,0,[new u(54,105.937702),new u(55,106.935036),new u(56,107.929486838),new u(57,108.927456483),new u(58,109.922407164),new u(59,110.921120589),new u(60,111.917061617),new u(61,112.915452551),new u(62,113.912498025),new u(63,114.911578627),new u(64,115.908420253),new u(65,116.90863418),new u(66,117.905825187),new u(67,118.90640811),new u(68,119.904019891),new u(69,120.904929815),new u(70,121.903047064),new u(71,122.904272951),new u(72,123.902819466),new u(73,124.904424718),new u(74,125.903305543),new u(75,126.90521729),new u(76,127.904461383),new u(77,128.906595593),new u(78,129.906222753),new u(79,130.90852188),new u(80,131.908523782),new u(81,132.910939068),new u(82,133.911540546),new u(83,134.916450782),new u(84,135.920103155),new u(85,136.925324769),new u(86,137.92922),new u(87,138.93473),new u(88,139.9387),new u(89,140.94439),new u(90,141.9485)]),B(d(Ht,1),Vt,3,0,[new u(55,107.943291),new u(56,108.938191658),new u(57,109.934634181),new u(58,110.930276),new u(59,111.92797),new u(60,112.923644245),new u(61,113.92185),new u(62,114.918272),new u(63,115.916735014),new u(64,116.913647692),new u(65,117.91337523),new u(66,118.910180837),new u(67,119.910047843),new u(68,120.907366063),new u(69,121.907592451),new u(70,122.905597944),new u(71,123.906211423),new u(72,124.90462415),new u(73,125.905619387),new u(74,126.90446842),new u(75,127.905805254),new u(76,128.904987487),new u(77,129.906674018),new u(78,130.906124168),new u(79,131.907994525),new u(80,132.907806465),new u(81,133.909876552),new u(82,134.91005031),new u(83,135.914655105),new u(84,136.917872653),new u(85,137.922383666),new u(86,138.926093402),new u(87,139.93121),new u(88,140.93483),new u(89,141.94018),new u(90,142.94407),new u(91,143.94961)]),B(d(Ht,1),Vt,3,0,[new u(56,109.944476),new u(57,110.941632),new u(58,111.93566535),new u(59,112.933382836),new u(60,113.928145),new u(61,114.926979032),new u(62,115.921394197),new u(63,116.920564355),new u(64,117.91657092),new u(65,118.915554295),new u(66,119.91215199),new u(67,120.911386497),new u(68,121.908548396),new u(69,122.908470748),new u(70,123.905895774),new u(71,124.906398236),new u(72,125.904268868),new u(73,126.905179581),new u(74,127.903530436),new u(75,128.904779458),new u(76,129.903507903),new u(77,130.90508192),new u(78,131.904154457),new u(79,132.90590566),new u(80,133.905394504),new u(81,134.907207499),new u(82,135.907219526),new u(83,136.911562939),new u(84,137.913988549),new u(85,138.918786859),new u(86,139.921635665),new u(87,140.926646282),new u(88,141.929702981),new u(89,142.93489),new u(90,143.93823),new u(91,144.94367),new u(92,145.9473),new u(93,146.95301)]),B(d(Ht,1),Vt,3,0,[new u(57,111.950331),new u(58,112.944535512),new u(59,113.940841319),new u(60,114.935939),new u(61,115.932914152),new u(62,116.928639484),new u(63,117.926554883),new u(64,118.922370879),new u(65,119.920678219),new u(66,120.917183637),new u(67,121.916121946),new u(68,122.912990168),new u(69,123.912245731),new u(70,124.909724871),new u(71,125.909447953),new u(72,126.9074176),new u(73,127.907747919),new u(74,128.906063369),new u(75,129.906706163),new u(76,130.905460232),new u(77,131.906429799),new u(78,132.90544687),new u(79,133.906713419),new u(80,134.905971903),new u(81,135.907305741),new u(82,136.907083505),new u(83,137.911010537),new u(84,138.913357921),new u(85,139.917277075),new u(86,140.920043984),new u(87,141.924292317),new u(88,142.927330292),new u(89,143.932027373),new u(90,144.935388226),new u(91,145.940162028),new u(92,146.943864435),new u(93,147.948899539),new u(94,148.95272),new u(95,149.95797),new u(96,150.962)]),B(d(Ht,1),Vt,3,0,[new u(58,113.950941),new u(59,114.94771),new u(60,115.94168),new u(61,116.937700229),new u(62,117.93344),new u(63,118.931051927),new u(64,119.926045941),new u(65,120.924485908),new u(66,121.92026),new u(67,122.91885),new u(68,123.915088437),new u(69,124.914620234),new u(70,125.911244146),new u(71,126.911121328),new u(72,127.90830887),new u(73,128.908673749),new u(74,129.906310478),new u(75,130.906930798),new u(76,131.905056152),new u(77,132.906002368),new u(78,133.904503347),new u(79,134.905682749),new u(80,135.904570109),new u(81,136.905821414),new u(82,137.905241273),new u(83,138.908835384),new u(84,139.910599485),new u(85,140.914406439),new u(86,141.916448175),new u(87,142.920617184),new u(88,143.922940468),new u(89,144.926923807),new u(90,145.930106645),new u(91,146.933992519),new u(92,147.937682377),new u(93,148.94246),new u(94,149.94562),new u(95,150.9507),new u(96,151.95416),new u(97,152.95961)]),B(d(Ht,1),Vt,3,0,[new u(60,116.95001),new u(61,117.94657),new u(62,118.94099),new u(63,119.93807),new u(64,120.93301),new u(65,121.93071),new u(66,122.92624),new u(67,123.92453),new u(68,124.92067),new u(69,125.91937),new u(70,126.91616),new u(71,127.91544794),new u(72,128.912667334),new u(73,129.91232),new u(74,130.910108489),new u(75,131.910110399),new u(76,132.908396372),new u(77,133.908489607),new u(78,134.906971003),new u(79,135.907651181),new u(80,136.906465656),new u(81,137.907106826),new u(82,138.90634816),new u(83,139.909472552),new u(84,140.910957016),new u(85,141.914074489),new u(86,142.916058646),new u(87,143.919591666),new u(88,144.92163837),new u(89,145.925700146),new u(90,146.927819639),new u(91,147.932191197),new u(92,148.93437),new u(93,149.93857),new u(94,150.94156),new u(95,151.94611),new u(96,152.94945),new u(97,153.9544),new u(98,154.95813)]),B(d(Ht,1),Vt,3,0,[new u(61,118.95276),new u(62,119.94664),new u(63,120.94367),new u(64,121.93801),new u(65,122.93551),new u(66,123.93052),new u(67,124.92854),new u(68,125.9241),new u(69,126.92275),new u(70,127.91887),new u(71,128.918679183),new u(72,129.914339361),new u(73,130.914424137),new u(74,131.91149),new u(75,132.91155),new u(76,133.909026379),new u(77,134.909145555),new u(78,135.907143574),new u(79,136.907777634),new u(80,137.905985574),new u(81,138.906646605),new u(82,139.905434035),new u(83,140.908271103),new u(84,141.909239733),new u(85,142.912381158),new u(86,143.913642686),new u(87,144.917227871),new u(88,145.918689722),new u(89,146.922510962),new u(90,147.924394738),new u(91,148.928289207),new u(92,149.930226399),new u(93,150.93404),new u(94,151.93638),new u(95,152.94058),new u(96,153.94332),new u(97,154.94804),new u(98,155.95126),new u(99,156.95634)]),B(d(Ht,1),Vt,3,0,[new u(62,120.955364),new u(63,121.95165),new u(64,122.94596),new u(65,123.94296),new u(66,124.93783),new u(67,125.93531),new u(68,126.93083),new u(69,127.9288),new u(70,128.92486),new u(71,129.92338),new u(72,130.920060245),new u(73,131.91912),new u(74,132.9162),new u(75,133.915672),new u(76,134.91313914),new u(77,135.912646935),new u(78,136.910678351),new u(79,137.910748891),new u(80,138.908932181),new u(81,139.909071204),new u(82,140.907647726),new u(83,141.910039865),new u(84,142.910812233),new u(85,143.913300595),new u(86,144.914506897),new u(87,145.917588016),new u(88,146.918979001),new u(89,147.922183237),new u(90,148.923791056),new u(91,149.926995031),new u(92,150.928227869),new u(93,151.9316),new u(94,152.93365),new u(95,153.93739),new u(96,154.93999),new u(97,155.94412),new u(98,156.94717),new u(99,157.95178),new u(100,158.95523)]),B(d(Ht,1),Vt,3,0,[new u(66,125.94307),new u(67,126.9405),new u(68,127.93539),new u(69,128.932385),new u(70,129.92878),new u(71,130.927102697),new u(72,131.92312),new u(73,132.92221),new u(74,133.918645),new u(75,134.91824),new u(76,135.915020542),new u(77,136.91463973),new u(78,137.91291745),new u(79,138.91192415),new u(80,139.909309824),new u(81,140.9096048),new u(82,141.907718643),new u(83,142.909809626),new u(84,143.910082629),new u(85,144.912568847),new u(86,145.913112139),new u(87,146.916095794),new u(88,147.916888516),new u(89,148.92014419),new u(90,149.920886563),new u(91,150.923824739),new u(92,151.924682428),new u(93,152.927694534),new u(94,153.929483295),new u(95,154.932629551),new u(96,155.9352),new u(97,156.93927),new u(98,157.94187),new u(99,158.94639),new u(100,159.94939),new u(101,160.95433)]),B(d(Ht,1),Vt,3,0,[new u(67,127.94826),new u(68,128.94316),new u(69,129.94045),new u(70,130.9358),new u(71,131.93375),new u(72,132.92972),new u(73,133.92849),new u(74,134.924617),new u(75,135.923447865),new u(76,136.920713),new u(77,137.920432261),new u(78,138.916759814),new u(79,139.915801649),new u(80,140.913606636),new u(81,141.912950738),new u(82,142.910927571),new u(83,143.912585768),new u(84,144.912743879),new u(85,145.914692165),new u(86,146.915133898),new u(87,147.917467786),new u(88,148.918329195),new u(89,149.920979477),new u(90,150.921202693),new u(91,151.923490557),new u(92,152.924113189),new u(93,153.926547019),new u(94,154.928097047),new u(95,155.931060357),new u(96,156.9332),new u(97,157.93669),new u(98,158.93913),new u(99,159.94299),new u(100,160.94586),new u(101,161.95029),new u(102,162.95352)]),B(d(Ht,1),Vt,3,0,[new u(68,129.94863),new u(69,130.94589),new u(70,131.94082),new u(71,132.93873),new u(72,133.93402),new u(73,134.93235),new u(74,135.9283),new u(75,136.927046709),new u(76,137.92354),new u(77,138.922302),new u(78,139.918991),new u(79,140.918468512),new u(80,141.915193274),new u(81,142.914623555),new u(82,143.91199473),new u(83,144.913405611),new u(84,145.91303676),new u(85,146.914893275),new u(86,147.914817914),new u(87,148.917179521),new u(88,149.917271454),new u(89,150.919928351),new u(90,151.919728244),new u(91,152.922093907),new u(92,153.922205303),new u(93,154.92463594),new u(94,155.925526236),new u(95,156.928354506),new u(96,157.929987938),new u(97,158.9332),new u(98,159.93514),new u(99,160.93883),new u(100,161.94122),new u(101,162.94536),new u(102,163.94828),new u(103,164.95298)]),B(d(Ht,1),Vt,3,0,[new u(69,131.95416),new u(70,132.9489),new u(71,133.94632),new u(72,134.94172),new u(73,135.9395),new u(74,136.93521),new u(75,137.93345),new u(76,138.92882915),new u(77,139.928083921),new u(78,140.924885867),new u(79,141.923400033),new u(80,142.920286634),new u(81,143.918774116),new u(82,144.916261285),new u(83,145.917199714),new u(84,146.916741206),new u(85,147.918153775),new u(86,148.917925922),new u(87,149.919698294),new u(88,150.919846022),new u(89,151.921740399),new u(90,152.921226219),new u(91,153.922975386),new u(92,154.922889429),new u(93,155.924750855),new u(94,156.925419435),new u(95,157.927841923),new u(96,158.9290845),new u(97,159.931460406),new u(98,160.93368),new u(99,161.93704),new u(100,162.93921),new u(101,163.94299),new u(102,164.94572),new u(103,165.94997),new u(104,166.95305)]),B(d(Ht,1),Vt,3,0,[new u(72,135.94707),new u(73,136.94465),new u(74,137.93997),new u(75,138.93808),new u(76,139.933236934),new u(77,140.93221),new u(78,141.927908919),new u(79,142.926738636),new u(80,143.923390357),new u(81,144.921687498),new u(82,145.918305344),new u(83,146.919089446),new u(84,147.918109771),new u(85,148.919336427),new u(86,149.918655455),new u(87,150.920344273),new u(88,151.919787882),new u(89,152.921746283),new u(90,153.920862271),new u(91,154.922618801),new u(92,155.922119552),new u(93,156.923956686),new u(94,157.924100533),new u(95,158.926385075),new u(96,159.927050616),new u(97,160.929665688),new u(98,161.930981211),new u(99,162.93399),new u(100,163.93586),new u(101,164.93938),new u(102,165.9416),new u(103,166.94557),new u(104,167.94836),new u(105,168.95287)]),B(d(Ht,1),Vt,3,0,[new u(73,137.95287),new u(74,138.94803),new u(75,139.945367985),new u(76,140.94116),new u(77,141.939073781),new u(78,142.93475),new u(79,143.93253),new u(80,144.92888),new u(81,145.927180629),new u(82,146.924037176),new u(83,147.924298636),new u(84,148.92324163),new u(85,149.923654158),new u(86,150.923098169),new u(87,151.924071324),new u(88,152.923430858),new u(89,153.924686236),new u(90,154.923500411),new u(91,155.924743749),new u(92,156.924021155),new u(93,157.92541026),new u(94,158.925343135),new u(95,159.927164021),new u(96,160.927566289),new u(97,161.929484803),new u(98,162.930643942),new u(99,163.933347253),new u(100,164.93488),new u(101,165.93805),new u(102,166.94005),new u(103,167.94364),new u(104,168.94622),new u(105,169.95025),new u(106,170.9533)]),B(d(Ht,1),Vt,3,0,[new u(74,139.95379),new u(75,140.95119),new u(76,141.946695946),new u(77,142.94383),new u(78,143.93907),new u(79,144.936717),new u(80,145.932720118),new u(81,146.930878496),new u(82,147.927177882),new u(83,148.927333981),new u(84,149.925579728),new u(85,150.92617963),new u(86,151.924713874),new u(87,152.925760865),new u(88,153.924422046),new u(89,154.92574895),new u(90,155.924278273),new u(91,156.925461256),new u(92,157.924404637),new u(93,158.92573566),new u(94,159.925193718),new u(95,160.926929595),new u(96,161.926794731),new u(97,162.928727532),new u(98,163.929171165),new u(99,164.931699828),new u(100,165.932803241),new u(101,166.935649025),new u(102,167.93723),new u(103,168.940303648),new u(104,169.94267),new u(105,170.94648),new u(106,171.94911),new u(107,172.95344)]),B(d(Ht,1),Vt,3,0,[new u(75,141.95986),new u(76,142.95469),new u(77,143.95164),new u(78,144.94688),new u(79,145.9441),new u(80,146.93984),new u(81,147.937269),new u(82,148.933789944),new u(83,149.932760914),new u(84,150.931680791),new u(85,151.931740598),new u(86,152.930194506),new u(87,153.930596268),new u(88,154.929079084),new u(89,155.929001869),new u(90,156.928188059),new u(91,157.92894573),new u(92,158.927708537),new u(93,159.928725679),new u(94,160.927851662),new u(95,161.92909242),new u(96,162.928730286),new u(97,163.930230577),new u(98,164.930319169),new u(99,165.932281267),new u(100,166.933126195),new u(101,167.935496424),new u(102,168.936868306),new u(103,169.939614951),new u(104,170.941461227),new u(105,171.94482),new u(106,172.94729),new u(107,173.95115),new u(108,174.95405)]),B(d(Ht,1),Vt,3,0,[new u(76,143.96059),new u(77,144.95746),new u(78,145.95212),new u(79,146.94931),new u(80,147.94444),new u(81,148.942780527),new u(82,149.937171034),new u(83,150.93746),new u(84,151.935078452),new u(85,152.935093125),new u(86,153.932777294),new u(87,154.933204273),new u(88,155.931015001),new u(89,156.931945517),new u(90,157.929912),new u(91,158.930680718),new u(92,159.929078924),new u(93,160.930001348),new u(94,161.928774923),new u(95,162.930029273),new u(96,163.929196996),new u(97,164.9307228),new u(98,165.93028997),new u(99,166.932045448),new u(100,167.932367781),new u(101,168.934588082),new u(102,169.935460334),new u(103,170.938025885),new u(104,171.939352149),new u(105,172.9424),new u(106,173.94434),new u(107,174.94793),new u(108,175.95029),new u(109,176.95437)]),B(d(Ht,1),Vt,3,0,[new u(77,145.966495),new u(78,146.961081),new u(79,147.95755),new u(80,148.95265),new u(81,149.94967),new u(82,150.944842),new u(83,151.9443),new u(84,152.942027631),new u(85,153.940832325),new u(86,154.939191562),new u(87,155.939006895),new u(88,156.936756069),new u(89,157.936996),new u(90,158.934808966),new u(91,159.935090772),new u(92,160.933398042),new u(93,161.933970147),new u(94,162.932647648),new u(95,163.933450972),new u(96,164.932432463),new u(97,165.933553133),new u(98,166.932848844),new u(99,167.934170375),new u(100,168.934211117),new u(101,169.935797877),new u(102,170.936425817),new u(103,171.938396118),new u(104,172.939600336),new u(105,173.942164618),new u(106,174.943832897),new u(107,175.946991412),new u(108,176.94904),new u(109,177.95264),new u(110,178.95534)]),B(d(Ht,1),Vt,3,0,[new u(78,147.96676),new u(79,148.96348),new u(80,149.95799),new u(81,150.954657965),new u(82,151.950167),new u(83,152.94921),new u(84,153.945651145),new u(85,154.945792),new u(86,155.942847109),new u(87,156.94265865),new u(88,157.939857897),new u(89,158.940153735),new u(90,159.93756),new u(91,160.937357719),new u(92,161.93575),new u(93,162.936265492),new u(94,163.93452),new u(95,164.935397592),new u(96,165.933879623),new u(97,166.934946862),new u(98,167.933894465),new u(99,168.93518712),new u(100,169.934758652),new u(101,170.936322297),new u(102,171.936377696),new u(103,172.938206756),new u(104,173.938858101),new u(105,174.941272494),new u(106,175.942568409),new u(107,176.945257126),new u(108,177.946643396),new u(109,178.95017),new u(110,179.95233),new u(111,180.95615)]),B(d(Ht,1),Vt,3,0,[new u(79,149.972668),new u(80,150.967147),new u(81,151.96361),new u(82,152.95869),new u(83,153.9571),new u(84,154.953641324),new u(85,155.952907),new u(86,156.950101536),new u(87,157.948577981),new u(88,158.946615113),new u(89,159.945383),new u(90,160.943047504),new u(91,161.943222),new u(92,162.941203796),new u(93,163.941215),new u(94,164.939605886),new u(95,165.939762646),new u(96,166.938307056),new u(97,167.938698576),new u(98,168.937648757),new u(99,169.93847219),new u(100,170.937909903),new u(101,171.939082239),new u(102,172.938926901),new u(103,173.940333522),new u(104,174.940767904),new u(105,175.942682399),new u(106,176.943754987),new u(107,177.945951366),new u(108,178.947324216),new u(109,179.949879968),new u(110,180.95197),new u(111,181.95521),new u(112,182.95757),new u(113,183.96117)]),B(d(Ht,1),Vt,3,0,[new u(82,153.96425),new u(83,154.96276),new u(84,155.959247),new u(85,156.958127),new u(86,157.95405528),new u(87,158.954003),new u(88,159.950713588),new u(89,160.950330852),new u(90,161.947202977),new u(91,162.947057),new u(92,163.944422),new u(93,164.94454),new u(94,165.94225),new u(95,166.9426),new u(96,167.94063),new u(97,168.941158567),new u(98,169.93965),new u(99,170.94049),new u(100,171.93945798),new u(101,172.94065),new u(102,173.940040159),new u(103,174.941502991),new u(104,175.941401828),new u(105,176.943220013),new u(106,177.943697732),new u(107,178.945815073),new u(108,179.94654876),new u(109,180.949099124),new u(110,181.950552893),new u(111,182.953531012),new u(112,183.95544788),new u(113,184.95878),new u(114,185.96092)]),B(d(Ht,1),Vt,3,0,[new u(83,155.971689),new u(84,156.968145),new u(85,157.966368),new u(86,158.96232309),new u(87,159.961358),new u(88,160.958372992),new u(89,161.956556553),new u(90,162.95431665),new u(91,163.95357),new u(92,164.950817),new u(93,165.95047),new u(94,166.948639),new u(95,167.947787),new u(96,168.94592),new u(97,169.94609),new u(98,170.94446),new u(99,171.944739818),new u(100,172.94459),new u(101,173.944167937),new u(102,174.94365),new u(103,175.944740551),new u(104,176.944471766),new u(105,177.945750349),new u(106,178.945934113),new u(107,179.947465655),new u(108,180.947996346),new u(109,181.950152414),new u(110,182.951373188),new u(111,183.954009331),new u(112,184.955559086),new u(113,185.9585501),new u(114,186.96041),new u(115,187.96371)]),B(d(Ht,1),Vt,3,0,[new u(84,157.973939),new u(85,158.97228),new u(86,159.968369),new u(87,160.967089),new u(88,161.962750303),new u(89,162.962532),new u(90,163.95898381),new u(91,164.958335962),new u(92,165.955019896),new u(93,166.954672),new u(94,167.951863),new u(95,168.951759),new u(96,169.948473988),new u(97,170.94946),new u(98,171.948228837),new u(99,172.948884),new u(100,173.94616),new u(101,174.94677),new u(102,175.94559),new u(103,176.94662),new u(104,177.945848364),new u(105,178.947071733),new u(106,179.946705734),new u(107,180.948198054),new u(108,181.948205519),new u(109,182.950224458),new u(110,183.950932553),new u(111,184.953420586),new u(112,185.954362204),new u(113,186.957158365),new u(114,187.958486954),new u(115,188.96191222),new u(116,189.963179541)]),B(d(Ht,1),Vt,3,0,[new u(85,159.981485),new u(86,160.977661),new u(87,161.975707),new u(88,162.971375872),new u(89,163.970319),new u(90,164.967050268),new u(91,165.965211372),new u(92,166.962564),new u(93,167.961609),new u(94,168.95883),new u(95,169.958163),new u(96,170.955547),new u(97,171.955285),new u(98,172.953062),new u(99,173.952114),new u(100,174.951393),new u(101,175.95157),new u(102,176.95027),new u(103,177.950851081),new u(104,178.949981038),new u(105,179.95078768),new u(106,180.950064596),new u(107,181.951211444),new u(108,182.950821349),new u(109,183.952524289),new u(110,184.952955747),new u(111,185.954986529),new u(112,186.955750787),new u(113,187.958112287),new u(114,188.959228359),new u(115,189.961816139),new u(116,190.963123592),new u(117,191.96596)]),B(d(Ht,1),Vt,3,0,[new u(86,161.983819),new u(87,162.982048),new u(88,163.977927),new u(89,164.976475),new u(90,165.971934911),new u(91,166.971554),new u(92,167.967832911),new u(93,168.967076205),new u(94,169.963569716),new u(95,170.96304),new u(96,171.960078),new u(97,172.959791),new u(98,173.956307704),new u(99,174.95708),new u(100,175.953757941),new u(101,176.955045),new u(102,177.953348225),new u(103,178.953951),new u(104,179.952308241),new u(105,180.953274494),new u(106,181.952186222),new u(107,182.95311),new u(108,183.952490808),new u(109,184.954043023),new u(110,185.953838355),new u(111,186.955747928),new u(112,187.955835993),new u(113,188.958144866),new u(114,189.95844521),new u(115,190.960927951),new u(116,191.961479047),new u(117,192.964148083),new u(118,193.965179314),new u(119,194.968123889),new u(120,195.96962255)]),B(d(Ht,1),Vt,3,0,[new u(88,164.98758),new u(89,165.985506),new u(90,166.980951577),new u(91,167.979966),new u(92,168.976390868),new u(93,169.974441697),new u(94,170.971779),new u(95,171.970643),new u(96,172.967707),new u(97,173.966804),new u(98,174.964279),new u(99,175.963511),new u(100,176.96117),new u(101,177.960084944),new u(102,178.95915),new u(103,179.958555615),new u(104,180.957642156),new u(105,181.958127689),new u(106,182.956814),new u(107,183.957388318),new u(108,184.95659),new u(109,185.957951104),new u(110,186.95736083),new u(111,187.958851962),new u(112,188.958716473),new u(113,189.960592299),new u(114,190.960591191),new u(115,191.962602198),new u(116,192.9629237),new u(117,193.96507561),new u(118,194.9659768),new u(119,195.968379906),new u(120,196.969636496),new u(121,197.97228),new u(122,198.973787159)]),B(d(Ht,1),Vt,3,0,[new u(90,167.988035),new u(91,168.986421),new u(92,169.981734918),new u(93,170.981251),new u(94,171.977376138),new u(95,172.976499642),new u(96,173.972811276),new u(97,174.972276),new u(98,175.969),new u(99,176.968453),new u(100,177.964894223),new u(101,178.965475),new u(102,179.962023729),new u(103,180.963177),new u(104,181.961267637),new u(105,182.961729),new u(106,183.959851685),new u(107,184.960753782),new u(108,185.959432346),new u(109,186.960697),new u(110,187.959395697),new u(111,188.9608319),new u(112,189.959930073),new u(113,190.961684653),new u(114,191.961035158),new u(115,192.962984504),new u(116,193.962663581),new u(117,194.964774449),new u(118,195.964934884),new u(119,196.967323401),new u(120,197.967876009),new u(121,198.970576213),new u(122,199.971423885),new u(123,200.974496467),new u(124,201.97574)]),B(d(Ht,1),Vt,3,0,[new u(92,170.991183),new u(93,171.990109),new u(94,172.986398138),new u(95,173.984325861),new u(96,174.981552),new u(97,175.980269),new u(98,176.977215),new u(99,177.975975),new u(100,178.973412),new u(101,179.972396),new u(102,180.969948),new u(103,181.968621416),new u(104,182.96762),new u(105,183.966776046),new u(106,184.965806956),new u(107,185.965997671),new u(108,186.964562),new u(109,187.965321662),new u(110,188.9642243),new u(111,189.964698757),new u(112,190.963649239),new u(113,191.964810107),new u(114,192.964131745),new u(115,193.96533889),new u(116,194.965017928),new u(117,195.966551315),new u(118,196.966551609),new u(119,197.968225244),new u(120,198.968748016),new u(121,199.970717886),new u(122,200.971640839),new u(123,201.973788431),new u(124,202.975137256),new u(125,203.977705),new u(126,204.97961)]),B(d(Ht,1),Vt,3,0,[new u(95,174.991411),new u(96,175.987413248),new u(97,176.986336874),new u(98,177.982476325),new u(99,178.981783),new u(100,179.978322),new u(101,180.977806),new u(102,181.97393546),new u(103,182.974561),new u(104,183.970705219),new u(105,184.971983),new u(106,185.969460021),new u(107,186.969785),new u(108,187.967511693),new u(109,188.968733187),new u(110,189.966958568),new u(111,190.96706311),new u(112,191.965921572),new u(113,192.966644169),new u(114,193.965381832),new u(115,194.966638981),new u(116,195.965814846),new u(117,196.967195333),new u(118,197.96675183),new u(119,198.968262489),new u(120,199.968308726),new u(121,200.970285275),new u(122,201.970625604),new u(123,202.972857096),new u(124,203.97347564),new u(125,204.976056104),new u(126,205.977498672),new u(127,206.982577025),new u(128,207.98594)]),B(d(Ht,1),Vt,3,0,[new u(96,176.996881),new u(97,177.994637),new u(98,178.991466),new u(99,179.990194),new u(100,180.986904),new u(101,181.98561),new u(102,182.982697),new u(103,183.98176),new u(104,184.9791),new u(105,185.977549881),new u(106,186.97617),new u(107,187.97592),new u(108,188.974290451),new u(109,189.974473379),new u(110,190.972261952),new u(111,191.972770785),new u(112,192.970548),new u(113,193.971053),new u(114,194.96965),new u(115,195.970515),new u(116,196.9695362),new u(117,197.970466294),new u(118,198.969813837),new u(119,199.970945394),new u(120,200.97080377),new u(121,201.972090569),new u(122,202.972329088),new u(123,203.973848646),new u(124,204.97441227),new u(125,205.976095321),new u(126,206.977407908),new u(127,207.982004653),new u(128,208.985349125),new u(129,209.990065574)]),B(d(Ht,1),Vt,3,0,[new u(99,180.996714),new u(100,181.992676101),new u(101,182.99193),new u(102,183.988198),new u(103,184.98758),new u(104,185.983485388),new u(105,186.98403),new u(106,187.979869108),new u(107,188.98088),new u(108,189.978180008),new u(109,190.9782),new u(110,191.975719811),new u(111,192.97608),new u(112,193.974648056),new u(113,194.975920279),new u(114,195.97271),new u(115,196.97338),new u(116,197.97198),new u(117,198.972909384),new u(118,199.97181556),new u(119,200.972846589),new u(120,201.972143786),new u(121,202.973375491),new u(122,203.973028761),new u(123,204.974467112),new u(124,205.974449002),new u(125,206.975880605),new u(126,207.97663585),new u(127,208.981074801),new u(128,209.984173129),new u(129,210.988731474),new u(130,211.991887495),new u(131,212.9965),new u(132,213.999798147)]),B(d(Ht,1),Vt,3,0,[new u(102,184.997708),new u(103,185.99648),new u(104,186.993458),new u(105,187.992173),new u(106,188.989505),new u(107,189.987520007),new u(108,190.986053),new u(109,191.985368),new u(110,192.983662229),new u(111,193.983430186),new u(112,194.98112697),new u(113,195.981236107),new u(114,196.978934287),new u(115,197.979024396),new u(116,198.977576953),new u(117,199.978141983),new u(118,200.976970721),new u(119,201.977674504),new u(120,202.976868118),new u(121,203.977805161),new u(122,204.977374688),new u(123,205.978482854),new u(124,206.978455217),new u(125,207.979726699),new u(126,208.980383241),new u(127,209.984104944),new u(128,210.987258139),new u(129,211.991271542),new u(130,212.994374836),new u(131,213.998698664),new u(132,215.001832349),new u(133,216.006199)]),B(d(Ht,1),Vt,3,0,[new u(106,189.994293888),new u(107,190.994653),new u(108,191.99033039),new u(109,192.991102),new u(110,193.988284107),new u(111,194.988045),new u(112,195.985469432),new u(113,196.985567),new u(114,197.984024384),new u(115,198.985044507),new u(116,199.981735),new u(117,200.982209),new u(118,201.980704),new u(119,202.981412863),new u(120,203.980307113),new u(121,204.981165396),new u(122,205.980465241),new u(123,206.981578228),new u(124,207.981231059),new u(125,208.982415788),new u(126,209.982857396),new u(127,210.986636869),new u(128,211.988851755),new u(129,212.992842522),new u(130,213.995185949),new u(131,214.999414609),new u(132,216.001905198),new u(133,217.006253),new u(134,218.008965773)]),B(d(Ht,1),Vt,3,0,[new u(108,193.000188),new u(109,193.997973),new u(110,194.996554),new u(111,195.995702),new u(112,196.993891293),new u(113,197.99343368),new u(114,198.991008569),new u(115,199.990920883),new u(116,200.988486908),new u(117,201.988448629),new u(118,202.986847216),new u(119,203.987261559),new u(120,204.986036352),new u(121,205.986599242),new u(122,206.985775861),new u(123,207.986582508),new u(124,208.986158678),new u(125,209.987131308),new u(126,210.987480806),new u(127,211.990734657),new u(128,212.99292115),new u(129,213.996356412),new u(130,214.998641245),new u(131,216.002408839),new u(132,217.004709619),new u(133,218.008681458),new u(134,219.011296478),new u(135,220.015301),new u(136,221.01814),new u(137,222.02233),new u(138,223.02534)]),B(d(Ht,1),Vt,3,0,[new u(110,196.001117268),new u(111,197.001661),new u(112,197.998779978),new u(113,198.998309),new u(114,199.995634148),new u(115,200.995535),new u(116,201.993899382),new u(117,202.994765192),new u(118,203.991365),new u(119,204.991668),new u(120,205.99016),new u(121,206.990726826),new u(122,207.989631237),new u(123,208.990376634),new u(124,209.989679862),new u(125,210.99058541),new u(126,211.990688899),new u(127,212.993868354),new u(128,213.995346275),new u(129,214.998729195),new u(130,216.000258153),new u(131,217.003914555),new u(132,218.005586315),new u(133,219.009474831),new u(134,220.011384149),new u(135,221.015455),new u(136,222.017570472),new u(137,223.02179),new u(138,224.02409),new u(139,225.02844),new u(140,226.03089),new u(141,227.035407),new u(142,228.038084)]),B(d(Ht,1),Vt,3,0,[new u(113,200.006499),new u(114,201.00458692),new u(115,202.00396885),new u(116,203.001423829),new u(117,204.001221209),new u(118,204.998663961),new u(119,205.998486886),new u(120,206.996859385),new u(121,207.997133849),new u(122,208.995915421),new u(123,209.996398327),new u(124,210.995529332),new u(125,211.996194988),new u(126,212.996174845),new u(127,213.99895474),new u(128,215.000326029),new u(129,216.003187873),new u(130,217.004616452),new u(131,218.007563326),new u(132,219.009240843),new u(133,220.012312978),new u(134,221.014245654),new u(135,222.017543957),new u(136,223.019730712),new u(137,224.023235513),new u(138,225.025606914),new u(139,226.029343423),new u(140,227.031833167),new u(141,228.034776087),new u(142,229.038426),new u(143,230.04251),new u(144,231.045407),new u(145,232.049654)]),B(d(Ht,1),Vt,3,0,[new u(115,203.00921),new u(116,204.006434513),new u(117,205.006187),new u(118,206.004463814),new u(119,207.005176607),new u(120,208.001776),new u(121,209.001944),new u(122,210.000446),new u(123,211.000893996),new u(124,211.999783492),new u(125,213.000345847),new u(126,214.000091141),new u(127,215.002704195),new u(128,216.003518402),new u(129,217.00630601),new u(130,218.007123948),new u(131,219.010068787),new u(132,220.011014669),new u(133,221.013907762),new u(134,222.01536182),new u(135,223.01849714),new u(136,224.020202004),new u(137,225.023604463),new u(138,226.025402555),new u(139,227.029170677),new u(140,228.031064101),new u(141,229.034820309),new u(142,230.037084774),new u(143,231.04122),new u(144,232.043693),new u(145,233.047995),new u(146,234.050547)]),B(d(Ht,1),Vt,3,0,[new u(118,207.012469754),new u(119,208.012112949),new u(120,209.009568736),new u(121,210.009256802),new u(122,211.007648196),new u(123,212.007811441),new u(124,213.006573689),new u(125,214.006893072),new u(126,215.006450832),new u(127,216.008721268),new u(128,217.009332676),new u(129,218.011625045),new u(130,219.012404918),new u(131,220.014752105),new u(132,221.015575746),new u(133,222.017828852),new u(134,223.01912603),new u(135,224.021708435),new u(136,225.023220576),new u(137,226.026089848),new u(138,227.027746979),new u(139,228.031014825),new u(140,229.032930871),new u(141,230.036025144),new u(142,231.038551503),new u(143,232.042022474),new u(144,233.04455),new u(145,234.04842),new u(146,235.051102),new u(147,236.055178)]),B(d(Ht,1),Vt,3,0,[new u(120,210.015711883),new u(121,211.016306912),new u(122,212.012916),new u(123,213.012962),new u(124,214.011451),new u(125,215.011726597),new u(126,216.011050963),new u(127,217.013066169),new u(128,218.013267744),new u(129,219.015521253),new u(130,220.015733126),new u(131,221.018171499),new u(132,222.018454131),new u(133,223.020795153),new u(134,224.02145925),new u(135,225.023941441),new u(136,226.024890681),new u(137,227.027698859),new u(138,228.028731348),new u(139,229.03175534),new u(140,230.033126574),new u(141,231.03629706),new u(142,232.03805036),new u(143,233.041576923),new u(144,234.043595497),new u(145,235.04750442),new u(146,236.04971),new u(147,237.053894),new u(148,238.056243)]),B(d(Ht,1),Vt,3,0,[new u(122,213.021183209),new u(123,214.02073923),new u(124,215.019097612),new u(125,216.019109649),new u(126,217.018288571),new u(127,218.020007906),new u(128,219.019880348),new u(129,220.021876493),new u(130,221.021863742),new u(131,222.023726),new u(132,223.023963748),new u(133,224.025614854),new u(134,225.026115172),new u(135,226.02793275),new u(136,227.028793151),new u(137,228.031036942),new u(138,229.032088601),new u(139,230.034532562),new u(140,231.035878898),new u(141,232.03858172),new u(142,233.040240235),new u(143,234.043302325),new u(144,235.045436759),new u(145,236.048675176),new u(146,237.05113943),new u(147,238.054497046),new u(148,239.05713),new u(149,240.06098)]),B(d(Ht,1),Vt,3,0,[new u(126,218.023487),new u(127,219.024915423),new u(128,220.024712),new u(129,221.026351),new u(130,222.02607),new u(131,223.027722956),new u(132,224.027590139),new u(133,225.029384369),new u(134,226.02933975),new u(135,227.031140069),new u(136,228.031366357),new u(137,229.033496137),new u(138,230.033927392),new u(139,231.036289158),new u(140,232.03714628),new u(141,233.039628196),new u(142,234.040945606),new u(143,235.043923062),new u(144,236.045561897),new u(145,237.048723955),new u(146,238.050782583),new u(147,239.054287777),new u(148,240.056585734),new u(149,241.06033),new u(150,242.062925)]),B(d(Ht,1),Vt,3,0,[new u(132,225.033899689),new u(133,226.035129),new u(134,227.034958261),new u(135,228.03618),new u(136,229.036246866),new u(137,230.037812591),new u(138,231.038233161),new u(139,232.040099),new u(140,233.04073235),new u(141,234.042888556),new u(142,235.044055876),new u(143,236.046559724),new u(144,237.048167253),new u(145,238.050940464),new u(146,239.052931399),new u(147,240.056168828),new u(148,241.058246266),new u(149,242.061635),new u(150,243.064273),new u(151,244.06785)]),B(d(Ht,1),Vt,3,0,[new u(134,228.038727686),new u(135,229.040138934),new u(136,230.039645603),new u(137,231.041258),new u(138,232.041179445),new u(139,233.04298757),new u(140,234.043304681),new u(141,235.0452815),new u(142,236.046048088),new u(143,237.048403774),new u(144,238.0495534),new u(145,239.052156519),new u(146,240.05380746),new u(147,241.056845291),new u(148,242.058736847),new u(149,243.061997013),new u(150,244.06419765),new u(151,245.067738657),new u(152,246.070198429),new u(153,247.07407)]),B(d(Ht,1),Vt,3,0,[new u(136,231.04556),new u(137,232.04659),new u(138,233.046472),new u(139,234.047794),new u(140,235.048029),new u(141,236.049569),new u(142,237.049970748),new u(143,238.051977839),new u(144,239.053018481),new u(145,240.055287826),new u(146,241.056822944),new u(147,242.059543039),new u(148,243.061372686),new u(149,244.064279429),new u(150,245.066445398),new u(151,246.069768438),new u(152,247.072086),new u(153,248.075745),new u(154,249.07848)]),B(d(Ht,1),Vt,3,0,[new u(137,233.0508),new u(138,234.05024),new u(139,235.051591),new u(140,236.051405),new u(141,237.052891),new u(142,238.053016298),new u(143,239.054951),new u(144,240.055519046),new u(145,241.057646736),new u(146,242.058829326),new u(147,243.061382249),new u(148,244.062746349),new u(149,245.065485586),new u(150,246.067217551),new u(151,247.070346811),new u(152,248.072342247),new u(153,249.075947062),new u(154,250.078350687),new u(155,251.082277873),new u(156,252.08487)]),B(d(Ht,1),Vt,3,0,[new u(138,235.05658),new u(139,236.05733),new u(140,237.057127),new u(141,238.058266),new u(142,239.058362),new u(143,240.059749),new u(144,241.060223),new u(145,242.06205),new u(146,243.06300157),new u(147,244.065167882),new u(148,245.066355386),new u(149,246.068666836),new u(150,247.070298533),new u(151,248.07308),new u(152,249.074979937),new u(153,250.078310529),new u(154,251.08075344),new u(155,252.084303),new u(156,253.08688),new u(157,254.0906)]),B(d(Ht,1),Vt,3,0,[new u(139,237.06207),new u(140,238.06141),new u(141,239.062579),new u(142,240.062295),new u(143,241.063716),new u(144,242.063688713),new u(145,243.065421),new u(146,244.06599039),new u(147,245.068039),new u(148,246.068798807),new u(149,247.070992043),new u(150,248.07217808),new u(151,249.074846818),new u(152,250.076399951),new u(153,251.079580056),new u(154,252.081619582),new u(155,253.085126791),new u(156,254.087316198),new u(157,255.091039),new u(158,256.09344)]),B(d(Ht,1),Vt,3,0,[new u(141,240.06892),new u(142,241.068662),new u(143,242.069699),new u(144,243.069631),new u(145,244.070969),new u(146,245.071317),new u(147,246.072965),new u(148,247.07365),new u(149,248.075458),new u(150,249.076405),new u(151,250.078654),new u(152,251.079983592),new u(153,252.082972247),new u(154,253.084817974),new u(155,254.088016026),new u(156,255.090266386),new u(157,256.093592),new u(158,257.095979)]),B(d(Ht,1),Vt,3,0,[new u(142,242.07343),new u(143,243.07451),new u(144,244.074077),new u(145,245.075375),new u(146,246.075281634),new u(147,247.076819),new u(148,248.077184411),new u(149,249.079024),new u(150,250.079514759),new u(151,251.081566467),new u(152,252.082460071),new u(153,253.085176259),new u(154,254.086847795),new u(155,255.089955466),new u(156,256.091766522),new u(157,257.095098635),new u(158,258.097069),new u(159,259.100588)]),B(d(Ht,1),Vt,3,0,[new u(144,245.081017),new u(145,246.081933),new u(146,247.081804),new u(147,248.082909),new u(148,249.083002),new u(149,250.084488),new u(150,251.084919),new u(151,252.08663),new u(152,253.08728),new u(153,254.089725),new u(154,255.091075196),new u(155,256.094052757),new u(156,257.095534643),new u(157,258.098425321),new u(158,259.100503),new u(159,260.103645)]),B(d(Ht,1),Vt,3,0,[new u(147,249.087823),new u(148,250.087493),new u(149,251.08896),new u(150,252.088965909),new u(151,253.090649),new u(152,254.090948746),new u(153,255.093232449),new u(154,256.094275879),new u(155,257.096852778),new u(156,258.0982),new u(157,259.101024),new u(158,260.102636),new u(159,261.105743),new u(160,262.10752)]),B(d(Ht,1),Vt,3,0,[new u(148,251.09436),new u(149,252.09533),new u(150,253.095258),new u(151,254.096587),new u(152,255.096769),new u(153,256.098763),new u(154,257.099606),new u(155,258.101883),new u(156,259.10299),new u(157,260.105572),new u(158,261.106941),new u(159,262.109692),new u(160,263.111394)]),B(d(Ht,1),Vt,3,0,[new u(149,253.100679),new u(150,254.100166),new u(151,255.101492),new u(152,256.101179573),new u(153,257.103072),new u(154,258.103568),new u(155,259.105628),new u(156,260.106434),new u(157,261.108752),new u(158,262.109918),new u(159,263.11254),new u(160,264.113978)]),B(d(Ht,1),Vt,3,0,[new u(150,255.107398),new u(151,256.10811),new u(152,257.107858),new u(153,258.109438),new u(154,259.109721),new u(155,260.111427),new u(156,261.112106),new u(157,262.114153),new u(158,263.115078),new u(159,264.117473),new u(160,265.118659)]),B(d(Ht,1),Vt,3,0,[new u(152,258.113151),new u(153,259.114652),new u(154,260.114435447),new u(155,261.116199),new u(156,262.116477),new u(157,263.118313),new u(158,264.118924),new u(159,265.121066),new u(160,266.121928)]),B(d(Ht,1),Vt,3,0,[new u(153,260.121803),new u(154,261.1218),new u(155,262.123009),new u(156,263.123146),new u(157,264.12473),new u(158,265.125198),new u(159,266.127009),new u(160,267.12774)]),B(d(Ht,1),Vt,3,0,[new u(155,263.12871),new u(156,264.128408258),new u(157,265.130001),new u(158,266.130042),new u(159,267.131774),new u(160,268.132156),new u(161,269.134114)]),B(d(Ht,1),Vt,3,0,[new u(156,265.136567),new u(157,266.13794),new u(158,267.137526),new u(159,268.138816),new u(160,269.139106),new u(161,270.140723),new u(162,271.141229)])])}function C6(t,e){return e1(e,p4)?new iU(xv(t,168,1428,\"%5968%UDy0ClA8tJ9QPLT6UDy08FA8tJVQPLQK%858%BQPLQdUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLSW%362%D4BwYC+AYGAvgHBgE%303%D/AAAB/wAAAQ%159%FA8tC1QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTl%330%D5BgcB+AcGBPkHBhX5BwdN+QYHefgHB2/5Bwc8+AYGFfgGBgj5BgcF+AYGAvkHBgE%245%/wAAAf8AAAL/AAAG/wAAEP8AACP/AAA7/wAAP/8AAD3/AAAg/wAABw%154%UDy0RFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%325%PkFCAT4BgZE+QcHo/gHB+X5Bwb/+QcH//kHB//4Bwf9+QYH1vgHB5X5BwZD+QcGDvkHBwb5BgYD+QcGAQ%228%D/AAAS/wAARP8AAIL/AAC4/wAA2/8AAPf/AAD//wAA//8AAPj/AAB+/wAADw%148%BQPLRnUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%314%D5BwYC+AYHK/kHBrb4Bwf4+AcH//gHB//5Bwf/+AcG//kHBv/5Bwf/+AYH//gHB/75Bwf3+AYHs/kHBkH5BgcR+QYGB/kFBgL6BgYB%197%P8AAAH/AAAI/wAAKP8AAIj/AADh/wAA9/8AAP3/AAD//wAA//8AAP//AAD6/wAAzv8AAGH/AAAq/wAAEw%143%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYHAfoIBwX4BgZu+QcH6fkGB//5Bgf/+QYH//kHB//5Bwf/+QcG//kHBv/4Bwb/+AcH//gHB//5Bgf/+AcH//kHBvT5Bwas+QYGO/kGBgr5BgUG+gUFAQ%175%P8AAAE%5%/wAACv8AAFX/AACy/wAA8P8AAP//AAD//wAA//8AAP//AAD//wAA//8AANP/AACD/wAARf8AACz/AAAZ/wAACQ%132%BQPLQJUDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QcGBPkGB374Bwf5+AcH//kHB//5Bwf/+QcH//kHBv/4Bwf/+AcH//gHB//5Bwf/+QcG//gHB//5Bwf/+QcG//gGB//4Bwb/+QYG8PkGBoD5BgYg+gYFCvoFBQQ%165%/wAAAf8AAA7/AABV/wAAzf8AAPv/AAD//wAA//8AAP//AAD//wAA//8AAPz/AADo/wAAkf8AAEr/AAAz/wAAH/8AAA//AAAG/wAAAQ%127%FA8tBNQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYGUvgHBvn4Bwf/+AcH//kHB//5Bwf/+QcH//kHB//4Bgf/+QcH//gHB//4Bwb/+AcH//gHB//4Bgf/+QcG//gGB//5Bwf/+QYG//kGBv76BgbL+gYFTfoFBQ76BQUH+gUEAQ%148%D/AAAG/wAAWf8AAMb/AAD9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA7P8AAJ3/AABW/wAANP8AACL/AAAS/wAAB/8AAAI%133%UDy0I1A8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PkHBwH4BwYD+AYHwfgHB//4Bwb/+QYH//gGBv/4Bwf/+QYH//kGB//5Bwf/+AcH//gHB//5Bwb/+AcH//kGB//4Bwf/+AYG//kHB//4Bwb/+AYG//kHB//5BQb/+QYF8/oFBX76BQUd+wQFCfsEBAI%133%/wAABv8AADj/AAC5/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPP/AAC6/wAAXv8AADn/AAAm/wAAE/8AAAj/AAAC/wAAAQ%132%BQPLQ7UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBgH4BggD+QcGqPgHB//4Bwf/+AcH//gHB//4Bwf/+AcG//gHB//4Bgf/+QYG//gGBv/5Bgb/+AcH//kHB//4Bgb/+QcH//gHB//5Bwf/+QcH//kHBv/5Bgb/+gYG//oFBfz6BQW++wQFMfoFBAz7BAQE%112%/wAAAQ%4%D/AAAf/wAAo/8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0P8AAHL/AABB/wAAKf8AABb/AAAJ/wAAA/8AAAE%138%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBwH4BwcE+AcHJ/gHB8j4Bgf/+AcH//kHBv/4Bwf/+QcH//gHB//5Bgb/+AcG//gHB//4Bwf/+AYH//gHB//4Bwb/+QcH//kGB//5Bwf/+AYH//kHBv/5Bgb/+QYG//oFBv/6BQX/+gQF3foEBVL7BAQR+wMEBvwDAwE%101%/wAAEP8AAGj/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOj/AACX/wAASP8AADD/AAAb/wAADP8AAAT/AAAB%144%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0LlA8tAI%287%D5BgcC+QcGC/gGBir5Bwea+QcH9vkHB//4Bwb/+QYG//gHB//4Bwf/+QYG//gGB//4Bwf/+AcH//gGBv/4Bwf/+QYH//kGB//4Bgf/+QcH//gHBv/5Bgb/+QUG//kGBf/6BQX/+gUF//oEBfD7BAR0/AQEFPsDAwj8BAMC%80%/wAAAf8AAAL/AAA1/wAAyv8AAPr/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAAwv8AAGD/AAA5/wAAI/8AABD/AAAG/wAAAg%143%FA8tAFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0yFA8tJpQPLR4UDy0UFA8tCI%261%+AYHA/gGBw35BwYa+AYHWPkHBr75Bwf4+AcH//kHB//4Bwf/+AYH//gHB//5Bwf/+QcH//gHB//4Bwb/+QcG//kHBv/4Bwf/+QcG//gHBv/5Bgb/+QYG//oGBv/6BQX/+gUF//sEBf/7BAT+/AQEkvwDAx38AwMK/QMDAg%74%/wAAFP8AAIP/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO7/AACX/wAAR/8AAC7/AAAX/wAACf8AAAI%149%UDy0B1A8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0v1A8tI1QPLRSUDy0Fw%239%PkHBwL4BwcI+AYGFPgHByf5Bgdh+AYHzPkHB/v5Bwf/+QcG//kHBv/4Bwb/+QcG//kHB//5Bwf/+QYG//gHBv/4Bwf/+QcH//gGB//5Bwb/+QYG//oGBv/6BgX/+gQF//oFBP/7BAT/+wQE/fwEBK/8BAMk/AMDDPwCAgM%53%/wAAAf8AAAP/AAA5/wAA0v8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAA3P8AAGz/AAA8/wAAIv8AAA//AAAF/wAAAQ%148%BQPLQTUDy0xlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLSTUDy0TlA8tAw%223%D4BgYB+QcHBPkHBgv4BwcV+AYGK/gHB3H4BwfM+AcH/vgHB//4Bgf/+QYG//gHB//4Bwb/+AYH//gHBv/5Bwf/+QcH//gHB//4Bwb/+QYG//kGBv/6Bgb/+gUF//sEBf/7BAT/+wQE//wEBP78AwS7/AMDLP0DAgz9AgID%37%P8AAAE%5%/wAAEP8AAIL/AADx/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC5/wAAVv8AADH/AAAa/wAACf8AAAI%154%FA8tCBQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS3UDy0aVA8tBg%218%PkHBwH5BwcF+QYHDPgHBxn5Bwct+QYHd/kHBt/5Bwb8+AcG//gHB//4Bwf/+QcG//gGBv/4Bwf/+AcG//gHB//5Bgb/+QcH//kGBv/6BgX/+gYF//oFBf/7BAX/+wUE//sEBP/7AwT//AMDy/0DAzP8AwIO/QIDB%32%P8AAAP/AAAr/wAAx/8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9v8AAJz/AABG/wAAK/8AABP/AAAG/wAAAQ%154%UDy0NVA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS2UDy0XlA8tAg%213%+QYGAfgHBgX4BwcN+QcHGPgHBzf4BgeF+QcH4/gGBv/4Bwb/+AcH//gHB//5Bwf/+QcG//gHB//5Bwb/+QYG//kGBv/5Bgb/+QYF//oFBf/7BQX/+gUE//sEBP/8BAP//AMD//wDAtD9AgI3/QICDv0CAgQ%21%/wAAAv8AAG7/AADo/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq/wAAgf8AAD7/AAAk/wAADv8AAAQ%159%BQPLRJUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSSUDy0L%213%D5BwcB+QYHBfgGBg/5Bgcb+AcGOfgHB6D5Bwfv+QcH//kGBv/5Bwb/+AcH//gGB//5Bwf/+QYG//kGBv/5Bgb/+gUG//oGBf/6BAX/+gQF//sEBP/7BAP/+wMD//wDA//9AwPW/QMCOf0CAg/9AQIE%5%P4BAQH/AQEd/wEApv8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANz/AABo/wAAOP8AAB7/AAAL/wAAAw%159%FA8tGZQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLxQPLRB%213%PgHBwL5BgcH+AcHEPkHBh/5BgZN+AYHsfgGB/v4Bwf/+AYG//gHBv/4Bgf/+QYH//kGBv/5Bgb/+gYG//oFBf/6BQX/+gQF//sEBP/7BAP//AQE//wDA//8AwP//QID0/0CAjP9AgEP/QEBAv4BAUf+AQDX/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAx/8AAFz/AAAz/wAAGP8AAAj/AAAB%160%UDy0elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFA8tEQ%207%D5BgcB+QcHAvgHBwj4BwYT+AYGIfgHB2j5BgfW+QcH/PkHBv/5Bwf/+AYH//gHBv/5Bgb/+QUF//oFBv/7BQX/+gUF//sFBP/7BAT//AME//wDA//8AwL//AMD//wCAsv+AgI8/QEBfP4BAfb+AQH//wEA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPv/AAC6/wAAUP8AAC7/AAAV/wAABv8AAAE%159%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Mw%207%PkHBwH4BwcD+QcHCvgHBhb5Bwcy+QYHh/kHB/H4Bwf/+AcH//kGBv/5Bgb/+QYG//oFBv/6BQX/+gUF//oFBP/7BAT/+wQD//sDA//8AwP//QMD//0DAv79AgLp/gIC+/4CAf/+AQH//wAB//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AAKL/AABJ/wAAKf8AABH/AAAF%165%FA8tJdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJZQPLQO%208%+AYGAfkHBwT4BgYO+QYGGfgHB0n5Bwe7+QcH+vkHBv/5Bgb/+gYF//kGBv/6BgX/+wUF//oEBf/7BAT/+wME//wDA//8AwP//AMD//wCAv/9AgL//QIC//4BAf/+AQH//gAA//8AAf//AAD//wAA//8AAP//AAD1/wAAmf8AAEP/AAAm/wAADv8AAAQ%170%FA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0VQ%212%D4BwcC+AcHB/kHBxL5BgYm+QcHb/kGB+n5Bwf++QYG//kFBv/5BgX/+wUF//sFBf/7BAT/+wME//wDA//8AwT//AMD//0DAv/9AgL//QIC//4CAf/+AgH//gAB//4AAP//AAD//wAA//8AAPT/AACF/wAAQP8AACL/AAAN/wAAAw%175%FA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK1QPLQP%208%+AcHAfkHBwT4BwcL+QcHF/gHBj/5Bgau+QYG+/oFBv/6BQX/+gUF//sFBf/7BQT/+wQE//sEBP/8AwP//AMD//wCA//9AgL//gEC//4CAf/+AQH//gEA//4BAf//AAD//wAA6/8AAHz/AAA7/wAAH/8AAAv/AAAC%181%FA8tHVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Mw%212%D5BwYB+QcHBvgHBhH5Bwci+QYHbPoGBuX5Bgb++gUG//oFBf/7BAT/+wUE//sEBP/8AwT//AMD//0CAv/9AgL//QIC//4BAf/+AgL//gEB//8AAP/+AADs/wAAcv8AADr/AAAd/wAACv8AAAI%191%BQPLSNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tFs%213%+AcHAfgHBwP4BwcK+QYGFfkGBkD5BQWz+gUF/PoFBf/7BAT/+wQE//sEBP/7BAP//AME//wDA//8AgL//QIC//0CAv/9AgL//gEB//8BAPf/AAB5/wAAPP8AABz/AAAI/wAAAQ%202%UDy0f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRt%218%D5BwYB+AYGBfkGBhH6BQYk+gUFqfsEBf77BAX/+wUF//sEBP/7BAP//AMD//wDA//9AwL//QMD//0BAv/+AQL//gEB//4BAf/+AAG//wAANP8AABH/AAAD%213%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0iw%218%+AcGAfkGBgn6BgaD+QUF8foFBf/7BQX/+wUE//sEBP/7BAT//AMD//wDBP/9AwP//QMC//4CAv/+AQL//gIB//4BAf//AAD8/wAAjf8AABr/AAAI/wAAAQ%212%BQPLRSUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%213%+AcHEfkGB5X6BgX7+gYF//oFBf/6BAX/+wUE//sEBP/7AwT//AMD//wDA//8AwL//AMD//0CAv/+AgL//gIB//4BAf/+AQD//wAA9/8AAGH/AAAU/wAABg%218%UDy0OlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRf%202%D5BwcZ+AYHvfkGB/75Bgb/+gYG//oFBf/6BQX/+gQE//sEBP/7BAT//AQE//wDA//9AwP//AMD//0CAv/9AgL//gIB//4BAf/+AAD//wAA//8AAOT/AABE/wAAEf8AAAQ%218%FA8tCJQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0O%187%9wcIAfkHByz5BgfN+QcH//kGBv/5Bgb/+QYG//oFBf/6BQX/+gUE//sEBP/7BAT//AQE//wEA//9AwP//QID//0CAv/9AgL//QIC//4BAf//AQH//gAB//8AAf//AADB/wAAKP8AAAz/AAAC%218%BQPLQXUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAw%175%D4BwcB+AcGPPgHB9/4Bwb/+AcH//kHBv/5Bgb/+gYG//kGBf/6BQX/+gUE//oFBP/7BAX/+wQE//wDA/38AwP//AMD//0CA//9AgL//QIB//4CAv/+AQH//wEB//8AAP//AAD+/wAAn/8AAB3/AAAI/wAAAQ%218%UDy0ClA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKM%165%+AcGAfgGBwP5BwdU+AcH7fgGB//5Bgf/+AcH//kHB//5Bgb/+QYG//kFBv/6BQX/+wUF//oFBP/7BAT/+wQE5fwDBIr8AwPM/AMD//0DA//9AgL//QIC//0BAv/+AQH//gEA//8BAP//AAD//wAA9f8AAGb/AAAV/wAABQ%223%FA8tAFQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ7%160%+QcGAvkHB2D5Bgfx+AYH//kGBv/4Bwf/+QYH//kHBv/4Bgb/+QYG//oGBv/6Bgb/+gUF//sEBP/7BATp+wQEbPwDBD78AwM6/AMDuP0DA/79AgL//gIC//0CAf/+AQL//gEB//8AAP//AAD//wAA//8AAOX/AAA8/wAAEP8AAAQ%229%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLQRUDy0MVA8tFJQPLRvUDy0lVA8tMdQPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%149%PgGBgH4BwYE+AYGcvgHB/r4Bwb/+QcG//kHB//5Bwb/+AcG//gHB//4Bwb/+QYG//kGBv/6BgX/+gUF//oEBev7BARy+wQENvsEBBz8AwQU/AMDKP0DA6b8AgL//QIC//4CAv/+AgH//gAB//4AAP//AAD//wAA//8AAP//AAC8/wAAJv8AAAz/AAAB%229%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%48%UDy0LFA8tGFQPLSgUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%138%+QcHAfkGBgT4Bgd5+QcG/PkHB//5Bwb/+AYH//gGB//5Bwf/+AcH//kGBv/5Bwf/+QYG//oGBv/5Bgb/+gUF8/oFBX/6BQU6+wQEGvwEBAj7AwQD/AMDDP0DAx39AgKV/QIC+f4CAv/9AQH//gEB//8AAf//AAD//wAA//8AAP//AAD7/wAAe/8AABj/AAAH/wAAAQ%228%BQPLQ7UDy051A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%69%FA8tClQPLSAUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rg%132%D4BgcB+QcGA/gGB3/5Bgf8+QcH//kHB//4Bwf/+QYH//gGBv/5Bgf/+AcG//gHBv/5Bwb/+AYG//kGBv/5Bgb8+gYGlfoFBT37BQQe+wUECfsEBAE%5%/AMDAvwCAwr8AwIb/QICi/4CAvn+AgH//gEB//4BAP/+AAD//wAA//8AAP//AAD//wAA7v8AAEz/AAAS/wAAAw%234%UDy0IlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%85%FA8tCdQPLSEUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tBU%122%PkHBgH5BQcG+QcHfPgHB/75Bgb/+AYH//kGB//4Bwf/+QcG//gHB//5Bwf/+QcH//gHBv/5Bgf/+AcG//kGB/75Bgax+gUGRPkFBSL6BQQK+wQFAg%15%PwDAwL8AgIJ/QMCGP4CAYD+AQL2/gEB//4BAP//AQH//wAB//8AAP//AAD//wAA//8AAML/AAAp/wAADP8AAAI%234%FA8tBRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0CFA8tFpQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tF4%117%+QcGAfkHBwP5Bwd8+QcG+/gHB//4Bwf/+QcH//kGB//5Bwf/+AcH//kHBv/5Bwf/+AcH//kHB//5Bwf/+QcH//kGBtD6BgZR+gYGKPoFBg36BQUC%26%D9AwMB/QIDCP0CAhf9AgJ5/gIB9/4BAf//AQH//wAA//8AAP//AAD//wAA//8AAPv/AAB7/wAAF/8AAAc%239%BQPLQJUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%112%UDy0UVA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%+QcGBPkHBm34Bwf7+QYH//gGB//4Bwf/+AcH//kHB//5Bwf/+AcH//kHB//4Bwb/+AcH//gHB//4Bgf/+AcG5/gGB2D5BgYv+gUFEvoFBgM%37%/QICAf0CAgj+AgEW/gEBgP4BAfn+AQH//wAB//8AAP//AAD//wAA//8AAP//AADt/wAARP8AABH/AAAD%245%FA8tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLRoUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMw%111%D5BwcB+QcHXPgHB/T4Bwb/+QcG//kHB//5Bwf/+AcH//kHBv/5Bwf/+QcG//kHBv/4Bgb/+QcH//kHBv/5Bgf7+AcHhPkGBjj5BgYX+QYGBQ%47%P0DAgH9AgII/QECGP4BAYP+AQD7/wEA//4AAP//AAD//wAA//8AAP//AAD//wAAsv8AACP/AAAK/wAAAQ%244%BQPLRmUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%128%UDy0HFA8tMBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO4%106%PkJBQH5BgdD+AcG7/gHBv/5Bgf/+QcG//gHB//4Bgf/+AcG//kHB//5Bwf/+AcH//gHB//4Bwf/+QcG//gGB/75Bwen+QcHPvkHBh75BgYI+QYGAQ%52%D+AgIB/QEBCf4BARj+AQGX/gEB/v8AAf//AAD//wAA//8AAP//AAD//wAA9/8AAGL/AAAV/wAABg%250%UDy0RFA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2%133%FA8tARQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%101%+QcGAfkHByv4Bgfg+QcG//kHB//4Bwb/+QYG//kHB//4Bgb/+QcG//gHBv/5Bwf/+AcH//gGBv/5Bwf/+QcG//kHB9D4BwZP+QcGJ/gHBgv5BwcC%64%/QICAf0BAgn+AQEc/gEBo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AANv/AAAx/wAADv8AAAI%250%FA8tCtQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTd%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%95%D6BwcB+AcHFPgGB8j4Bwf/+AcG//gHB//4Bgf/+QcG//kHB//4Bwb/+QcG//kHB//4Bwf/+AYH//gHB//4Bgf/+QcH7vgHBmr5BwYw+AYHEfgHBgM%74%P4CAQH+AQEK/gEBJP8BALz/AAD//wAA//8AAP//AAD//wAA//8AAP3/AACQ/wAAHP8AAAc%255%BQPLQRUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLSb%149%FA8tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%PkHBwH4BgcJ+AYHp/kHBv/4Bgf/+QYG//gHB//4Bgb/+AcH//kHBv/4Bwf/+QYH//kHB//4Bwf/+QYH//kHB//4Bgf7+QcHjPkGBzn5BwcY+QYGBQ%84%D9AQEC/gEBC/4AASv/AQDT/wAA//8AAP//AAD//wAA//8AAP//AADq/wAAQ/8AABL/AAAD%256%UDy0B1A8tIlQPLT8UDy0+1A8tKFQPLQK%154%BQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPs%95%D5Bwdk+QcH+fgGB//4Bwf/+QcH//kHBv/4Bgf/+QcG//kHBv/4Bwf/+QcH//gHB//4Bwf/+AcH//kGB//5BwbA+QcHR/gHByL5BgcJ+AcHAQ%90%/gEBA/8BAAz/AABD/wAA5v8AAP//AAD//wAA//8AAP//AAD//wAAt/8AACP/AAAK/wAAAQ%436%BQPLQLUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN0%85%+AcGAfkGBy35Bgbw+QcH//kHB//5Bwf/+QYH//gGB//5Bgf/+AcG//kHB//4Bwb/+AcH//gGB//4Bgf/+QcH//kHBuf5Bwdb+AcGK/gHBg75BwcC%101%P4AAAT/AQEO/wAAZP8AAPn/AAD//wAA//8AAP//AAD//wAA9v8AAGP/AAAW/wAAB%443%UDy0UFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL%80%D4BwYB+AcHC/gHBrb4Bwf/+QcH//gHB//5Bwf/+QcG//gGB//4Bgf/+QcH//gHB//4Bwf/+AYH//kHB//4Bwb/+AYH9/kHB4H4Bwc2+QcHFfgHBgU%111%D+AQEF/wAAEv8AAIb/AAD7/wAA//8AAP//AAD//wAA//8AAMb/AAAp/wAADf8AAAE%442%FA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHk%85%+AcGWfkHBvz5Bwb/+QYG//kHBv/4Bwb/+QYG//gHBv/4Bgf/+AcH//gHB//5Bgf/+QcH//gHB//4Bwf/+AcHu/gHBkT5BwYf+AYHB/gGBwE%111%D/AAAB/wEAB/8AAB3/AAC8/wAA//8AAP//AAD//wAA//8AAP//AABu/wAAFv8AAAU%442%FA8tHZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCo%74%PgHBwH5BwcV+AcH4PgHB//4Bgf/+QcH//kGB//5Bwb/+QcH//kHB//5Bwb/+QcH//gHB//5Bwb/+QYH//gHB//5Bwfh+QcHV/gHByn4BwcN+AcHAg%122%/wEAAf8AAAn/AAAu/wAA2/8AAP//AAD//wAA//8AAP//AADW/wAAMP8AAA3/AAAC%437%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01%80%PgHBwL5BgZ2+AYG/fgGB//5Bwf/+AYH//gHB//4Bwf/+AcG//gHB//4Bwf/+AcG//kHB//4Bwf/+AcH//gHB/j4BwaB+QcHNfkGBxT5BwcD%133%P8AAAP/AAAN/wAAWf8AAPT/AAD//wAA//8AAP//AAD4/wAAcf8AABn/AAAF%442%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ag%79%PgHBw/4BwbO+QYH//kHBv/5Bwb/+AYH//kHBv/5Bwf/+QcG//gGB//4Bgb/+QYH//gHB//5Bgf/+QYH//gHB7r5BwdD+QcGHvkHBgf5BwcB%138%D/AAAE/wAAEf8AAJP/AAD//wAA//8AAP//AAD//wAAyP8AACn/AAAN/wAAAQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Cg%79%PkHBkb4Bgf9+QcH//gGBv/5Bwb/+AYH//gHB//4Bwb/+AcG//kHB//4Bwf/+AcG//kHBv/4Bwb/+QcG4/kHB1j4BwYp+AcGDfkGBwE%143%D/AAAB/wAAB/8AAB7/AADO/wAA//8AAP//AAD//wAA/v8AAGT/AAAX/wAABQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRs%85%PkHB6H4Bgb/+QYH//kHBv/4Bwf/+QYH//kHBv/4Bwb/+AYH//kHBv/4Bgb/+QYH//gHBv/4Bwf5+QYGifkGBzj5BwYV+QcHB%155%/wAAAf8AAAv/AABW/wAA9v8AAP//AAD//wAA//8AAMH/AAAp/wAACv8AAAE%426%FA8tBdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQE%80%+QcHGPgGB+j4Bgb/+AcH//gHB//4Bgf/+AcG//kGBv/5Bwb/+QYH//kGBv/5Bwf/+AcH//gGB//5Bwbw+AcHWPgGByT5BwYJ%165%P8AAAT/AAAP/wAAnv8AAP//AAD//wAA//8AAO7/AABN/wAAFP8AAAM%426%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDU%79%D5BgcB+AcHQ/gGBvj4Bwf/+AcH//gHB//5Bwb/+QcH//kHB//5Bwf/+QcH//kHB//4Bwf/+QcH//kHBv/5Bwfs+QcGS/kHBhn5BwcE%170%D/AAAH/wAAJf8AANj/AAD//wAA//8AAP7/AACL/wAAHv8AAAc%426%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%84%D4BwcC+QcHZ/kHB/v5Bwf/+AcH//gGBv/4Bwb/+AcH//kHBv/5Bwf/+AYH//kHB//4Bgf/+QcG//gHB//5Bwfs+AYHR/gGBhb5BgYD%170%D/AAAC/wAADP8AAGf/AAD8/wAA//8AAP//AADR/wAALf8AAA7/AAAC%416%UDy0FlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSq%90%D4BgYC+AcHe/gHB/35Bwf/+QYH//kHBv/4Bgb/+QcH//kHBv/5Bgf/+AcG//kGB//4Bwb/+AcH//gGB//4Bwfs+AcGR/kHBhb5BwcD%176%/wAABP8AABL/AACz/wAA//8AAP//AAD8/wAAVP8AABX/AAAD%416%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQJ%90%D5BwcD+AcHgPkGB/35Bwf/+QcH//gHB//4Bgb/+QcG//gGB//5Bwf/+QcH//gGBv/5Bwb/+QYH//kHB//4Bwbs+QcHR/kHBxX4BwcD%176%/wAAAf8AAAj/AAAy/wAA4/8AAP//AAD//wAAjf8AAB//AAAG%410%BQPLQ0UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tAs%95%D5BgcE+AYHePkGBvz5Bwf/+AcH//kGB//5Bwb/+QcH//gHB//4Bgf/+QcH//kGBv/4Bwf/+QYH//gGB//5Bwbm+QYHQPgGBxX4BwYD%181%P8AAAP/AAAO/wAAfP8AAP3/AAD//wAAvP8AACr/AAAL%405%FA8tBBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0EQ%100%D4BwcD+AcHXfgGB/r4Bwb/+QcH//kGB//4Bwf/+QcH//kHB//5Bwf/+AYH//gHB//4Bwb/+AcH//kHB//4BwfQ+QYHOPkHBhL5BwYC%186%D/AAAF/wAAF/8AALz/AAD//wAA1v8AADb/AAAP/wAAAQ%394%UDy0ClA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQK%106%D4BgcC+QYGNfkGB/b4Bwf/+QcH//gHBv/4Bwb/+QcH//gGB//5Bwf/+QcH//gGB//4Bwf/+AYG//kGB//4Bwem+AcGLfgHBw75BgYB%186%D/AAAB/wAACf8AADr/AADp/wAA3v8AADz/AAAS/wAAAg%388%BQPLQKUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hVA8tAI%111%D4BwcC+AYGEPgHB9P5Bgf/+AcG//gHBv/4Bwf/+AcG//gHB//5Bgf/+AcH//gGB//5Bwb/+QcH//kHB/34BwZt+AcHJvkHBgn4BwcB%192%/wAAA/8AAA7/AAB2/wAA0v8AADH/AAAR/wAAAg%383%FA8tBxQPLTKUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRL%128%9wgHA/kGB275Bwf/+QYG//kHBv/4Bgf/+AcH//kHB//5Bwf/+QcH//gHB//4Bwb/+AcH//kHB9H5BwdF+QcHG/gHBgU%202%P8AAAb/AAAT/wAAOv8AABz/AAAK/wAAAQ%378%UDy0PlA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tBc%133%+QYHBPkGBxv5BwfO+AYG//gHB//5Bwf/+QcH//kGB//4Bwf/+QcG//kHB//5Bwf/+AcH+fkHB4T5Bwcx+AcHD/kHBwI%202%P8AAAH/AAAG/wAACv8AAAr/AAAE%373%FA8tA9QPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRS%144%+QcGAfgHBgr5BwZS+QYH8/kHBv/5Bwf/+QcH//gHBv/5Bwb/+QYH//gGB//4Bwf/+AcHs/gHB0H4Bwcd+QYHBw%212%D/AAAB/wAAAf8AAAH/AAAB%368%UDy0W1A8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0ilA8tAs%154%PkHBgT5BgYO+QYHYvgHB+n5Bgb/+AYH//gHBv/4Bgb/+AYG//kHB/n5Bwa5+AcHSvkHBif5BgcN+QcHAQ%591%FA8tFFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tJZQPLQb%165%PkHBwH5BwcG+QcGEvkHBkj5Bweq+QcG5fgHB/v4Bwbx+AYHzfgGB4b5BwdE+AcHJ/gGBxD4BgcD%592%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSNUDy0Gw%186%+AcHBfkGBxH4Bwce+QcGOPgHBkz5BwdL+AcHPPkHBy/5Bwce+QYHDfgGBwM%597%UDy0mFA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0clA8tA4%202%PkHBwP5BwcJ+QYHEPgGBxb4BgcY+AcGFfgHBg75BwYH+QcHAg%602%UDy0PlA8tOtQPLTtUDy0nlA8tERQPLQB%10133%FA8tEFQPLTPUDy0/1A8tOhQPLR3%128%UDy0Z1A8tOhQPLT/UDy01lA8tEQ%709%UDy0LFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0ag%116%BQPLRiUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%704%UDy0kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA9tAM%106%FI+tQFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFg%106%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL0%106%FA8tLNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR3%704%UDy0D1A8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%709%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSU%96%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKg%714%FA8tDRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE%720%BQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0a%85%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00g%84%BQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0aw%724%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Dg%730%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%74%FA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSa%736%UDy0JFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQV%64%UDy0DVA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQt%741%FA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR9%64%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%746%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUj+1AQ%58%UDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%746%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0U%53%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tAc%751%BQPLR6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tQ%52%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0h%757%BQPLQTUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%762%UDy0olA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSv%768%UDy0O1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%506%BRPrQBUDy0IVE9tAM%111%BQPLQsUDy0kFA8tJ5QPLR/UDy0GQ%111%FA8tJhQPLT/UDy0/1A8tP9QPLT+UDy0Xw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tJs%111%BQPLQUUDy0eFA8tJ5QPLSYUDy0N%357%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tJ1QPLQD%101%FA8tEFQPLT4UDy0/1A8tP9QPLT/UDy0/FA8tKhQPLRB%106%BQPLRQUDy0mFA8tI9QPLQ2%64%UDy0MFA8tI9QPLSYUDy0Ww%106%UDy0PVA8tKdQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%335%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%95%FA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01lA8tGtQPLQR%288%UDy0DlA8tGpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%319%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0mlA8tC8%266%FA8tCxQPLSTUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%303%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%85%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0XFA8tAc%234%FA8tAdQPLRUUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOg%287%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%79%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSIUDy0Hg%212%BQPLQYUDy0glA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGc%271%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%79%BQPLRZUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK9QPLRH%192%UDy0PVA8tK9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Yg%260%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%80%Uj61AVA8tEVQPLSzUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qw%74%UDy0EFA8tEBQPLRkUDy0ZFA8tEJQPLQT%74%BQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tVA8tE9SP7UB%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%90%UDy0HFA8tIZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGI%58%FA8tEpQPLS6UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tFY%58%FA8tFtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tI5QPLQk%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVA8tAM%95%BQPLQHUDy0W1A8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%47%BQPLQYUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Hw%47%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMlQPLReUDy0CQ%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%106%BQPLQwUDy0mlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%42%FA8tCFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tD%43%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSdUDy0Mg%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%111%FA8tA1QPLRuUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tDY%37%UDy0EVA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQf%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaUDy0cFA8tBQ%245%UDy0HVA8tGxQPLTHUDy091A8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0mFI+tQE%122%FA8tD9QPLSrUDy0/FA8tP9QPLTuUDy0Xw%42%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%42%BQPLRVUDy051A8tP9QPLT9UDy0rVA8tEc%261%UT20A1A8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tDhQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRiUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BQ%138%UDy0ClA8tC1RPrUB%42%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0V%43%UkC1AVA8tCpQPLQO%352%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI8%287%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x%400%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVE9tAM%282%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBM%389%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTNUDy0Ew%287%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEo%383%BQPLQTUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQj%293%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%378%FA8tDJQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDQ%298%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%373%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0Yg%303%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%362%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR/%309%FA8tClQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDo%357%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ5RPbQD%309%FJAtQFQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tAo%351%BQPLQUUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tBE%261%UDy0E1A8tDJQPLQJ%42%BQPLSPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0og%42%UDy0CFA8tDJQPLQZ%293%FA8tDJQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0F%251%Uj+1AVA8tEdQPLS0UDy0/VA8tP9QPLTyUDy0Yw%36%BQPLQfUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Kw%36%BQPLRfUDy07lA8tP9QPLT/UDy0tFA8tFBSP7UB%272%UDy0YVA8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQy%245%FA8tBRQPLR0UDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD0%37%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSO%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0d1A8tBU%250%FA8tANQPLR/UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tGE%239%BQPLQ3UDy0oFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%37%UT60AVA8tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQJ%37%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSkUDy0O%235%UDy0EVA8tJ5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0fw%228%BQPLQMUDy0Y1A8tMpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%42%FA8tAlQPLSyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%42%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLRmUDy0D%213%BQPLQ0UDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%218%UDy0JFA8tI5QPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%53%UDy0dlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR7UT20Aw%47%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tJNQPLQo%85%FA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tGJQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQJUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVRPrUB%96%UD20A1A8tE9QPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mw%63%FA8tA9QPLRyUDy0vlA8tPlQPLT/UDy0/1A8tPxQPLTFUDy0fVA8tBQ%63%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tFhQPbQD%64%UT60AVA8tJhQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT0UDy0q1A8tFpQPLQP%90%BQPLRiUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tKpQPLQ9%90%BRPbQBUDy0Bg%90%UDy0O1A8tKdQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ag%63%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%101%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLSCUDy0G%213%BQPLQTUDy0elA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHs%63%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%117%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0VFE+tQE%234%FE+tAFQPLRMUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOo%69%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%133%FA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0klA8tCw%266%FA8tCRQPLSMUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%74%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%149%FA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00FA8tGRQPLQM%288%UDy0CFA8tGNQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%79%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%165%FA8tDlQPLT1UDy0/1A8tP9QPLT/UDy0+FA8tKJQPLQ5%106%BQPLRbUDy0oVA8tJ1QPLQ9%64%UDy0NlA8tJNQPLShUDy0Yg%106%UDy0NVA8tKBQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%85%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%186%BQPLQkUDy0jlA8tJ5QPLR4UDy0FQ%111%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0Yw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tKs%111%BQPLQPUDy0c1A8tJ1QPLSQUDy0L%96%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%336%UDy0PFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRH%234%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%352%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3%240%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%362%BQPLQWUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%239%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%378%BQPLR5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0t%53%BQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ig%244%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%389%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0T%53%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tAc%245%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%405%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUj+1AQ%58%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFw%250%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%421%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR0%64%UDy0bFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%255%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%432%UDy0JlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQV%64%UDy0DVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQv%256%UT20A1A8tJ1QPLT6UDy0sVA8tGBQPLQU%448%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%74%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%261%FE9tANQPLQT%458%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0EQ%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%84%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%724%BQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%84%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%719%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEE%714%FA8tKFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%96%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0%709%UDy0EFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0HFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%106%FA8tLJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFQ%106%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA9tAM%106%FI+tQFQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0JFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0Yw%116%BQPLRZUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%709%FA8tDlQPLTIUDy0/lA8tOhQPLRn%128%UDy0YVA8tOVQPLT/UDy0z1A8tEE%7914%FA8tAJQPLQNUDy0RVA8tG9QPLSFUDy0vFA8tMFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tMFQPLS3UDy0g1A8tG1QPLRFUDy0DVA8tAI%762%FA8tBlQPLRaUDy0nFA8tNdQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tNZQPLSdUDy0W1A8tBk%730%FA8tBpQPLRtUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS8UDy0bVA8tBo%485%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%170%FA8tAJQPLREUDy0rFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLSrUDy0Q1A8tAI%458%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%148%BQPLQCUDy0SlA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMdQPLRKUDy0Ag%442%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%138%FA8tD9QPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tLFQPLSUUDy0XVA8tFlQPLQjUDy0HFA8tBxQPLQcUDy0HFA8tBxQPLQcUDy0JFA8tFhQPLRdUDy0lFA8tLBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tD4%437%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%127%BQPLQWUDy0plA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0nFA8tFVQPLQXUDy0Ag%84%BQPLQCUDy0FlA8tFRQPLScUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSlUDy0Fw%420%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%117%FA8tExQPLTmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0j1A8tDFQPLQE%128%UDy0BFA8tDFQPLSPUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tEw%415%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%106%BQPLQEUDy0j1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tFpQPLQJ%160%UDy0CVA8tFlQPLTPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLSPUDy0Aw%404%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%101%FA8tA1QPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLRRUDy0Ag%180%BQPLQCUDy0UVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tA0%399%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%96%UDy0EFA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0a1A8tAQ%202%FA8tAVQPLRsUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQQ%394%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%90%BQPLQOUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLlQPLQf%224%UDy0HVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTHUDy0Dg%388%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%85%FA8tA9QPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0ew%244%BQPLR7UDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xVA8tA8%383%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%80%UDy0AlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRN%256%UDy0TVA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKtQPLQC%378%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%80%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEs%266%FA8tEtQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRx%384%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%79%BQPLQsUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Sg%276%BQPLRKUDy091A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0LQ%378%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%74%FA8tANQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRc%288%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlA8tAM%378%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%79%FA8tE9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJpQPLUB%288%UDy1AVA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE8%389%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%85%UDy0A1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy03VA8tA0%298%FA8tA1QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQD%277%FE9tAJQPLSlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0SlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0W%309%BQPLRYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRK%282%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLTSUDy0BQ%308%BQPLQFUDy00lA8tP9QPLT/UDy0/1A8tP9QPLSp%288%UDy0BVA8tKZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLQLUDy081A8tP9QPLT/UDy0/1A8tP9QPLRe%320%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Cw%287%FA8tAVQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQM%320%UDy0DFA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0Tg%292%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tLM%330%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0hw%298%UDy0BVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tH%331%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0vg%298%UDy0fFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tEQ%330%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy01w%292%BQPLQIUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQOUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQEUDy06FA8tP9QPLT/UDy0/1A8tP5QPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%271%FNAtQJQPLRlUDy01VA8tNVQPLRlUDy0N1A8tOhQPLT+UDy0+FA8tHxQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP8%143%BQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tCU%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/g%271%FA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZVA8tARQPLQOUDy0C%11%UDy0BVA8tKZQPLT/UDy0/1A8tP8%143%BQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tFs%330%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0y%272%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%31%FA8tAVQPLSmUDy0/1A8tP8%143%BQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tI0%213%UDy0BQ%111%FA8tIBQPLT/UDy0/1A8tP9QPLT/UDy0sw%271%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%36%BQPLQFUDy0plA8tP8%143%BQPLRvUDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQC%208%UDy0n1A8tFNQPLQB%101%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0f%256%FA9tAhQPLQOUT20BFA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZQ%42%UD20BVA8tKU%143%BQPLQtUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLQ9%208%UDy0sFA8tP9QPLSTUDy0Cg%90%UDy0HFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0P%251%UDy0fFA8tPhQPLT+UDy06FA8tDdQPLRlUDy01VA8tNVQPLRlUDy0Ag%47%FE9tAI%143%BQPLQDUDy01lA8tP9QPLT/UDy0/1A8tP9QPLSx%208%UDy0sFA8tP9QPLT/UDy0y1A8tCM%85%UDy0d1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0B%245%BQPLQ1UDy0/lA8tP9QPLT/UDy0/1A8tOhRPbQE%224%UDy0b1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0T%203%UDy0sFA8tP9QPLT/UDy0/1A8tPNQPLRY%74%BQPLQLUDy06FA8tP9QPLT/UDy0/1A8tP9QPLSb%250%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQO%224%UDy0CVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAw%197%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mFA8tAo%63%BQPLR1UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQv%250%BQPLRaUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQI%229%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQD%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQk%53%FA8tCBQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tLI%239%BQPLQ1UDy0hlA8tFpQPLQIUDy0zFA8tP9QPLT/UDy0/lA8tHw%234%FA8tAVQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0XFA8tQE%37%UDy0BlA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tD%235%FA8tHxQPLT+UDy0/1A8tP9QPLTMUDy0CFA8tFpQPLSGUDy0NQ%244%BQPLQyUDy081A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0d%187%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJxQPLQJ%32%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0n%235%UDy0CFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0Wg%266%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%181%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTUUDy0Jw%20%BQPLQqUDy09lA8tP9QPLT/UDy0/1A8tP9QPLTlUDy0FQ%234%UDy0DlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0hg%266%UDy0BFA8tKBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR3%176%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tGFQPLQB%16%UDy0LlA8tNRQPLT/UDy0/1A8tPxQPLRJ%240%UDy0BFA8tOhQPLT/UDy0/1A8tP9QPLT+UDy0NQ%271%FA8tANQPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kFA8tAc%165%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLShUDy0EQ%15%FA8tBBQPLShUDy0/1A8tHw%170%FE9tAI%47%BTQLUCUDy0ZVA8tNVQPLTVUDy0ZVA8tDdQPLToUDy0/lA8tPhQPLR8%282%BQPLQRUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQV%160%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDs%15%BQPLQDUDy0PFA8tAM%170%FA8tKVQPLQF%42%BQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGVQPLQEUDy0DlA8tAg%293%UDy0ElA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0Lw%4%BQPLQRUDy0M1A8tGpQPLRzUDy0qVA8tKpQPLSqUDy0qlA8tJBQPLRsUDy0UlA8tCk%85%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLR1%197%FA8tP9QPLSmUDy0BQ%36%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%314%FA8tARQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tMlQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTnUDy0oVA8tFJQPLQF%64%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tAk%186%FA8tP9QPLT/UDy0plA8tAU%31%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%319%BQPLQCUDy0ilA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0eFA8tAY%53%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQi%181%FA8tP9QPLT/UDy0/1A8tKZQPLQF%10%BQPLQIUDy0DlA8tARQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGU%330%FA8tGZQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLQ2%48%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Qg%175%FA8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BVA8tHxQPLT4UDy0/lA8tOhQPLQ3UDy0ZVA8tNVQPLTVUDy0ZVA8tAI%325%UDy0E1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0ZQ%42%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0ig%175%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ulA8tP5QPLT/UDy0/1A8tP9QPLToUDy0B%341%BQPLQDUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tHlQPLRyUDy0clA8tHtQPLSwUDy01FA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDo%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMZQPLQs%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Dg%340%BQPLRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQc%21%FA8tBhQPLRTUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRVUDy0alA8tJNQPLSZUDy0T%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Ug%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0C%341%BQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSIUDy0SVA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Qw%31%FA8tDxQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tIJQPLQI%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR8%341%FA8tAZQPLTxUDy0/1A8tP9QPLT/UDy0/lA8tFw%10%FA8tBdQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tHI%31%BQPLQTUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0YQ%207%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQF%341%FA8tBJQPLT2UDy0/1A8tP9QPLT/UDy0+lA8tB8%15%BQPLQCUDy0g1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSKUDy0Bw%26%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tAw%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BQ%340%BQPLToUDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQh%21%FA8tExQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0slA8tAc%15%BQPLRzUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIM%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0plA8tAU%335%BQPLSUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0hFA8tBc%15%BQPLQmUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLNQPLQJUDy0SVA8tMdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLTGUDy0lVA8tIlQPLR9UDy0H%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLQ1%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKZQPLQF%330%BQPLQcUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLS8UDy0fFA8tEJQPLQoUDy0FlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0AQ%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUD20BQ%330%UDy0V1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0+lA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xlA8tAY%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLTUUDy0VVA8tDdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0d%192%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVE9tAI%330%FA8tFJQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSkUDy0Dw%42%UDy0sFA8tP9QPLT/UDy091A8tHRQPLQM%10%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tBs%122%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%442%BQPLQaUDy0sFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFxQPLQC%48%UDy0sFA8tPtQPLSfUDy0Gg%20%BQPLQeUDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQD%106%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%442%FA8tDNQPLSWUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Uw%58%UDy0glA8tDY%37%UDy0dFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRi%101%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%448%UDy0C1A8tD9QPLR9UDy0rVA8tOBQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tPVQPLTgUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tB%102%UDy0A1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0F%96%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%474%BQPLQFUDy0HFA8tBxQPLQcUDy0HFA8tBI%5%UDy0AVA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKJQPLQB%101%FA8tE1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p%91%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%511%FA8tAlQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQ7%106%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEE%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%516%BQPLQoUDy09FA8tP9QPLT/UDy0/1A8tP9QPLS/UDy0AQ%100%BQPLQrUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNhQPLQL%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%522%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Pw%106%UDy0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSR%80%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%522%UDy0CVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0sg%106%UDy0DlA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0HQ%74%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%527%FA8tGVQPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB8%106%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMZQPLQ5%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%527%FA8tAxQPLTuUDy0/1A8tP9QPLT/UDy0/1A8tG0%106%FA8tAFQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0ZFA8tAY%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%532%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tLQ%111%BQPLQ0UDy0/VA8tP9QPLT/UDy0+VA8tIxQPLQS%96%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%532%BQPLRIUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQB%106%BQPLUBUDy0qVA8tP5QPLS+UDy0Jw%111%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%538%BQPLQRUDy09lA8tP9QPLT/UDy0/1A8tP5QPLQu%112%UDy0GVA8tFo%122%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%544%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLRM%250%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%549%UDy0sVA8tP9QPLT/UDy0/1A8tP9QPLRz%261%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%560%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLRz%864%UDy0eVA8tP9QPLT/UDy0/1A8tP9QPLRz%14133%FA8tAZQPLRgUDy0r1A8tLdQPLR8UDy0Fw%308%BQPLQGUDy0MVA8tDhQPLQO%528%UDy0BlA8tK1QPLT+UDy0/1A8tP9QPLT/UDy07VA8tH9QPLQT%288%UDy0AVA8tExQPLTZUDy0/lA8tP5QPLTtUDy0a1A8tAE%517%UDy0YFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%266%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFo%517%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%245%BQPLQDUDy0TlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQC%512%UDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%224%UDy0AVA8tEFQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQF%512%UDy0fFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAM%202%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBQPLQD%512%UDy0ElA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLRBUDy0AQ%186%UDy0MlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tH4%522%FA8tBtQPLSkUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%165%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0qFA8tAk%533%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0Mg%148%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK1QPLQ+UDy0Ag%548%BQPLQkUDy0rVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%128%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0QVA8tAE%565%UDy0AVA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tCQ%106%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%586%BQPLQBUDy0QVA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSRUDy0F%85%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRBUDy0AQ%607%FA8tAFQPLRCUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIFQPLQT%64%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAQ%629%UDy0BFA8tGBQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%42%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%650%BQPLQEUDy0YFA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%21%BQPLQTUDy0kVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRgUDy0B%672%FA8tARQPLR+UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQEUDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBE%693%UDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tH9QPLQT%714%BQPLQTUDy0f1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLR/UDy0Ew%735%FA8tBRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tBQ%757%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%730%D/AAAD/wAAKP8AAE3/AABg/wAAYf8AAE3/AAAm/wAAAw%4%BQPLQnUDy0olA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSfUDy0J%16%FA8tARQPLR6UDy0fVA8tH1QPLR9UDy0Jg%682%/wAAC/8AAHH/AADZ/wAA/f8AAP//AAD//wAA//8AAP//AAD9/wAA2/8AAHX/AAAN/wAAAlA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tDI%26%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%676%D/AAAs/wAA1f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADe/wAAPQ%4%BQPLQBUDy0QVA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tL5QPLRBUDy0AQ%31%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%671%P8AACH/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9P8AAEM%10%FA8tAdQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tAE%42%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAAf8AALP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAA+/8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAOj/AAAZ%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%47%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAMP8AAPz/AAD//wAA//8AAP//AAD//wAA7P8AAGj/AAAa/wAAEv8AAEn/AADP/wAA//8AAP//AAD//wAA//8AAP//AACR%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tGhQPLRYUDy0E%16%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%15%FA8tAZQPLQ/UDy0hlA8tAU%629%/wAAiP8AAP//AAD//wAA//8AAP//AAD0/wAANQ%20%D/AAAR/wAA0v8AAP//AAD//wAA//8AAP//AADr/wAACFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0B1A8tOdQPLT/UDy08lA8tK5QPLRaUDy0ElA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0T1A8tAdQPLRCUDy0lVA8tONQPLT+UDy0/lA8tDs%623%D/AAAB/wAAx/8AAP//AAD//wAA//8AAP//AACI%32%/wAATP8AAP7/AAD//wAA//8AAP//AAD+/wAAMlA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0QVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy081A8tLRQPLT9UDy0/1A8tP9QPLT/UDy0wVA8tOVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tIo%623%D/AAAF/wAA7/8AAP//AAD//wAA//8AAP3/AAAw%32%/wAAC/8AAPf/AAD//wAA//8AAP//AAD//wAAUFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLQD%618%D/AAAS/wAA+/8AAP//AAD//wAA//8AAPr/AAAM%32%/wAABP8AAPD/AAD//wAA//8AAP//AAD//wAAVVA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%4%BQPLQBUDy0e1A8tOFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tLdQPLQP%618%D/AAAM/wAAdP8AAHb/AAB2/wAAdv8AAHP/AAAC%32%/wAAIv8AAPz/AAD//wAA//8AAP//AAD//wAAQFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tAVQPLQ9UDy0kFA8tN9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tLBQPLReUDy0FVA8tAE%687%D/AAAB/wAAlP8AAP//AAD//wAA//8AAP//AAD5/wAAGFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tARQPLQ6UDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRVUDy0Dw%708%D/AABh/wAA/P8AAP//AAD//wAA//8AAP//AAC2/wAAAVA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%36%BQPLQVUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRH%704%/wAAAv8AAHj/AAD7/wAA//8AAP//AAD//wAA//8AAPT/AAAx%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAJQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Fw%692%D/AAAG/wAAmv8AAP7/AAD//wAA//8AAP//AAD//wAA9v8AAFE%10%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tGVQPLT+UDy0/1A8tP9QPLT/UDy03FA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0rVA8tAI%682%P8AAAH/AACc/wAA//8AAP//AAD//wAA//8AAP//AADn/wAAQw%15%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0KVA8tPFQPLT/UDy0/1A8tP9QPLT5UDy0PVA8tBBQPLTaUDy0/1A8tP9QPLT/UDy0/lA8tGc%682%P8AAE//AAD+/wAA//8AAP//AAD//wAA//8AALz/AAAe%21%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQIUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLS%11%BQPLQ7UDy0+FA8tP9QPLT/UDy0/1A8tPJQPLQq%672%/wAAAv8AAMf/AAD//wAA//8AAP//AAD+/wAAkf8AAAY%26%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQdUDy001A8tP9QPLT/UDy0/1A8tMNQPLQG%16%UDy0fVA8tP9QPLT/UDy0/1A8tPBQPLRL%672%/wAAHP8AAPv/AAD//wAA//8AAP//AAC6/wAAAw%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0DlA8tJ1QPLT+UDy07lA8tCQ%21%UDy0BlA8tMBQPLT/UDy0zFA8tCk%677%/wAAQf8AAP//AAD//wAA//8AAP//AABv%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAFQPLReUDy0W%32%FA8tCJQPLSKUDy0Cw%682%/wAASv8AAPH/AADx/wAA8f8AAPH/AABU%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAAf8AAAT/AAAE/wAABP8AAAT/AAAC%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAA/8AAAX/AAAF/wAABf8AAAX/AAAE%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAqP8AAPT/AAD0/wAA9P8AAPT/AADh/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAWP8AAH//AAB//wAAf/8AAH//AAB2/wAAAg%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tARQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rw%852%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Y%853%BQPLQbUDy011A8tP9QPLT/UDy0/1A8tP5QPLStUDy0Bg%858%UDy0ElA8tHxQPLS3UDy0r1A8tGBQPLQG%19749%FA8tCxQPLTgUDy0/FA8tHk%869%UDy0K1A8tOlQPLT/UDy0/1A8tP9QPLSE%858%BQPLQqUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%847%FA8tClQPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%837%UDy0KFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%826%BQPLQnUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0e%816%FA8tCZQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tH%806%UDy0JVA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1UDy0AQ%788%BQPLQkUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bw%783%FA8tCNQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ2UDy0CFA8tKVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGtQPLQB%768%UDy0IlA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tDc%10%FA8tAZQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%762%BQPLQhUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0O%21%BQPLQFUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0bg%751%FA8tCBQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ5%32%UDy0AlA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%741%UDy0H1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tDo%42%FA8tANQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1%730%BQPLQfUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Ow%52%BQPLQDUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Yw%719%FA8tB5QPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ9%64%UDy0ClA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGI%709%UDy0HVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tD4%74%FA8tAtQPLSvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRk%698%BQPLQcUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Pw%84%BQPLQFUDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Yg%79%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%474%FA8tBxQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%97%UDy0ClA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tF0%74%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%469%UDy0G1A8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tEE%106%FA8tAVQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRc%69%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%Es8tBFQPbNQUD2zUFA9s1BQPbNQUD2zUE47tTQ%207%BQPLQaUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0Qw%116%BQPLQEUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0WQ%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%202%FA8tBpQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRE%128%UDy0BVA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%197%UDy0GVA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tEY%133%UDy0SFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0w%64%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA8tMtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%191%BQPLQYUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Rw%132%BQPLRHUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0Gw%111%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%266%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%186%FA8tBdQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRI%133%FA8tD9QPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQc%117%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%69%gACAAk0zswo%186%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%181%UDy0FlA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEo%133%UDy0PlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tB0%122%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%47%BVQLUYUDu0cFA7s71QPLToUDy0/VA8tP9QPLT5UDy00FA9tI9SPbMy%26%BgQL8ITz20pFA7tLBQO7SwUDu0sFA7tLBQO7SwUTy0q1VAqgw%26%FUrqgZQPLSmUDu0sFA7tLBQO7SwUDu0sFA7tLBQPLSpTjuxDUlJtgdSO7Y4Uju2OFA7tGNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtSO7Y4Uju2OE47tTQ%159%BQPLQWUDy01FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0Sw%132%BQPLRBUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0GQ%127%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%QEC/BFA7s3lQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1r0w5sxs%21%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tX8%26%FE8tW5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%155%FA8tBVQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRM%133%FA8tEFQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQa%133%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BJSbYHUDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtOPrU+%18%D/AVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJVPbYV%16%VUCqDFA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9AQL8E%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%150%UDy0FFA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tE0%133%UDy0OlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tC%139%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BRPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUj2zMg%15%FM+syVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SS%16%UDy1f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+04+tjE%10%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%144%BQPLQTUDy00VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tw%132%BQPLQ5UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0IQ%143%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FA8tV1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7O9UT20flA7s3lQPLSmUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UTy01GYzzAU%15%BRPbV1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5Uzy0Ig%4%BNQLMUUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0h%16%FE6uRZQO7SwUDu0sFE7tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1E8tORQO7SwUDu0sFA8s6U%143%BQPLSIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRQ%133%FA8tDhQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQi%149%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%ZjPMBU88tOdQPLT/UDy0/1A8tP9QPLT/UDy0/FE8tFU%21%Uz6zJVA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%15%BVVaoDUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDyzpQ%4%BQPLWQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVSUm2Bw%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRX%128%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCM%154%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%32%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM8%21%TTuyK1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/lA9s1BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP1PPLU3%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLQQUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0VQ%116%BQPLQ2UDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0J%160%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UkC2H%37%BQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9TObMo%21%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIw%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%143%D/AAAK/wAAC%11%UDy0EVA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tFQ%106%FA8tDVQPLTvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tORQPLQf%165%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDy06FA8tP9QPLT/UDy0/1A8tP9RPLTU%42%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVg%21%GYzzAVQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD2021U5qgk%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%133%/wAABv8AAKb/AAD//wAA+/8AAIM%10%FA8tBFQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRT%96%UDy0OVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05FA8tC%171%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSQLYcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPTz21ZE89tWRPPbVkTz21ZE89tWRPPbVkTz21ZE89tWRQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%26%BOPrYxUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+Tj61Pg%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%127%D/AAAF/wAAtf8AAP//AAD//wAA//8AAP//AACI%10%BQPLQSUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0UQ%84%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Iw%175%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BQPLQzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Sw%32%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%122%P8AAAX/AAC5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAAhg%10%UDy0E1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tEs%74%FA8tDFQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQn%181%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BPPLREUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLX%33%YEC/CFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlLPLQR%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%117%/wAABf8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAIQ%10%FA8tBRQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRP%64%UDy0MFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy051A8tCg%186%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbRLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTM%32%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%111%D/AAAF/wAAq/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACD%10%BQPLQUUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Tg%52%BQPLQzUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0KQ%191%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbY7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTLTzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRQPLRm%26%BNPrIhUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TTuyKw%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%106%P8AAAT/AACq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgQ%10%UDy0FVA8tNNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEw%42%FA8tDRQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQq%197%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BRPrQpUDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%104%/wFRPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21ylVVqgM%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%101%/wAABP8AAKj/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAH8%10%FA8tBZQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRL%32%UDy0LVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCY%202%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BVK6oGTzy091A8tP9QPLT/UDy0/1A8tP9QPLTC%101%FA9tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9s3Y%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%95%D/AAAE/wAAp/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB+%10%BQPLQXUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0SQ%20%BQPLQyUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTqUDy0Jw%207%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Tzy0xFA8tP9QPLT/UDy0/1A8tP9PPLT3Rka5Cw%36%BTPLQiTz21ZE89tWRPPbVkTz21ZE89tWRRPLMv%16%Ujq1H1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/087tWdQPLT8UDy0/1A8tP9QPLT/UDy0/088tPdTObMo%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%90%P8AAAP/AACl/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAf%11%UDy0F1A8tNZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEg%10%FA8tC9QPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQo%213%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT21dVA8tP9QPLT/UDy0/1A8tP9QPLT/Tz21cQ%34%/wFQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbM2%16%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%4%BRO7ObUDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTGgACAAg%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A7s6w%85%/wAAA/8AAKT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHo%10%FA8tBhQPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRHUDy0L1A8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tC0%218%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Szy0EVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy09lE8tUw%21%TjuxDVE8taFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMU%15%BQPLRmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UT60KQ%4%BOO7EaUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UTyzcg%31%FA9szZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNI%79%D/AAAD/wAAo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB4%10%BQPLQZUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0Lw%223%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FE9tH5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POTzy0mlA8tZBQPLStUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lI9szI%10%E8+sB1QPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%16%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lM+syU%26%FM5syhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO2UD20gk88tIQ%63%D/AACM/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAdw%10%UDy0GlA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQw%229%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FVVqgNQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTu0Xw%15%E88tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRVQLUY%16%VUS7D1A9tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMIAAP8B%21%GYzzAVQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHU%10%FA8tBpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tDI%234%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BQQK8QUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQO7VW%16%UTy0YlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tIE%26%FA7tHBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRt%26%BRPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AADW/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABz%10%BQPLQbUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTuUDy0Lw%239%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%YEC/CFA9tIJQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDu0sFA6tiM%15%BMObMbUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VVAqgw%26%FUrqgZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0Uzy0Ig%20%BVRLsPUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAAu/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAcQ%10%UDy0HFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQ0%330%BON7EXUD20aVE9tLFPPLTXUD207FA8tPBQPLTeTzy0t1A8tXxQOrYj%176%SUm2B1E8tWtQO7O9Tzy051A8tPRQPLPpUDy00E88s5E%69%/wAAL/8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAG8%10%FA8tBxQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tC8%682%P8AADD/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABu%10%BQPLQdUDy03lA8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Ng%692%D/AAAx/wAA7f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAb%11%UDy0HlA8tN9QPLT/UDy0/1A8tOxQPLQ3%704%/wAAMv8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAGo%10%FA8tB9QPLSzUDy0v1A8tC0%714%P8AADP/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABp%746%D/AAA0/wAA7/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAAZ%747%/wAANf8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA8v8AAB%747%P8AADb/AADw/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AACU%751%D/AAA4/wAA8f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAxQ%762%/wAAOf8AAPH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADW/wAAFw%767%P8AADr/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANf/AAAY%778%D/AAA7/wAA8/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2P8AABg%789%/wAAPP8AAPP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADZ/wAAGQ%799%P8AAD3/AAD0/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANr/AAAa%810%D/AAA//wAA9P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2/8AABs%821%/wAAQP8AAOT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC8/wAAGw%24986%UDy0GFA8tI5QPLTHUDy0tVA8tFFQPLQB%858%BQPLQWUDy021A8tP9QPLT/UDy0/1A8tP1QPLRz%858%BQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0K%853%BQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tD0%847%BQPLShUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ9%842%BQPLQ9UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pg%842%UDy0aVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tD4%842%FA8tIxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ/%842%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pw%431%FA8tANQPLRvUDy0cFA8tAM%229%UDy0D1A8tH9QPLRY%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tE%422%UDy0BFA8tK1QPLT/UDy0/1A8tLBQPLQG%218%BQPLQXUDy011A8tP9QPLT/UDy0Uw%143%FA8tIpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLR%411%BQPLQDUDy0pFA8tP9QPLT/UDy0/1A8tP9QPLSqUDy0BQ%207%FA8tBJQPLTQUDy0/1A8tP9QPLT/UDy0xQ%148%BQPLSJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%399%FA8tAFQPLScUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAI%197%UDy0EFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/lA8tAI%149%UDy0iFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEI%394%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%191%BQPLQMUDy0x1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAQ%154%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRC%384%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSWUDy0AQ%175%FA8tApQPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAI%159%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0HQ%372%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jQ%170%UDy0CFA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zQ%170%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tB0%362%FA8tHpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIQ%159%BQPLQGUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%175%FA8tIVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLQe%352%UDy0clA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR7%149%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%186%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Hg%340%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cg%138%UDy0AlA8tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKFQPLQC%186%BQPLQKUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tB4%330%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQSUDy0EVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGk%127%BQPLQBUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tAQ%197%UDy0CVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQf%320%UDy0W1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01FA8tBg%10%FA8tBVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRi%117%FA8tAFQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSuUDy0BQ%207%FA8tAlQPLS5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy0Hw%308%BQPLRbUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Fg%20%BQPLQYUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Wg%111%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLdQPLQD%218%BQPLQJUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tC%299%FA8tFdQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%32%UDy0GlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tFQ%101%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAc%229%UDy0CVA8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQg%288%UDy0S1A8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBw%42%FA8tCBQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRN%90%BQPLR7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%239%FA8tAhQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0I%277%BQPLRHUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0I%53%BQPLQiUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0RQ%79%FA8tHlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMVQPLQL%250%BQPLQIUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tCE%266%FA8tEVQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQl%64%UDy0JFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEI%69%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tA4%261%UDy0CFA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQh%256%UDy0QFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tCY%74%FA8tCtQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%58%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUDy0D%272%FA8tAhQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUDy0Ig%244%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%84%BQPLQtUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Nw%47%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQR%282%BQPLQHUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAk%234%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQx%96%UDy0L1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDU%37%UDy0YFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy001A8tBc%293%UDy0B1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQJ%224%UDy0MVA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDQ%106%FA8tDdQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ0%26%BQPLRdUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Fg%303%FA8tAdQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6UDy0CQ%212%BQPLQvUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Ow%116%BQPLQ4UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0L%16%FA8tFlQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%314%BQPLQeUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAo%202%FA8tCpQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%129%UDy0O1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tCo%5%UDy0TVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBs%325%UDy0HlA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtQPLQK%192%UDy0JFA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEY%138%FA8tERQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLRtUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0IQ%335%FA8tB1QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%180%BQPLQfUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tg%148%BQPLRHUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQm%346%BQPLQdUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tAo%170%FA8tANQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRV%160%UDy0TFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCk%357%UDy0HVA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL1QPLQK%165%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFw%170%FA8tFRQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Lg%367%FA8tBxQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Cw%159%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Z%181%BQPLRcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ0%378%BQPLQcUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%154%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRs%192%UDy0ZFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tDo%389%UDy0HFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQL%149%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%202%FA8tGtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0Q%400%FA8tBtQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cw%143%FA8tGxQPLT/UDy0/1A8tP9QPLT/UDy0fg%212%BQPLR0UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRG%410%BQPLQbUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wFA8tAw%138%FA8tBNQPLTvUDy0/1A8tP9QPLSG%224%UDy0fVA8tP9QPLT/UDy0+lA8tE0%421%UDy0GlA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQM%138%BQPLRBUDy0tFA8tGg%234%FA8tHNQPLS0UDy0Tg%431%FA8tBtQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSh%842%BQPLQ+UDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0PVA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI4%842%FA8tD1QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSP%842%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k%843%UDy0PFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJE%842%FA8tDtQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSHUDy0BQ%836%BQPLQ7UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0OlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tBk%842%FA8tDpQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD8%847%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB4%853%UDy0L1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0nQ%863%FA8tDxQPLTHUDy0+FA8tOlQPLSKUDy0Cg%868%BQPLQCUDy0CVA8tAY%22101%UDy0SFA8tNpQPLTsUDy0Xg%442%UDy0MlA8tLdQPLT/UDy0mFA8tCo%405%UDy04FA8tP9QPLT/UDy0/1A8tJFQPLQH%426%BQPLRGUDy0/FA8tP9QPLT/UDy0/1A8tO5QPLQO%400%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Kw%415%FA8tEZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR6%400%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tFw%405%UDy0R1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR8%405%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLRi%400%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRE%405%FA8tAZQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0lVE9tAM%389%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tItQPLQB%410%BQPLQYUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQV%384%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0i1A8tAE%421%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0Mw%378%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLSLUDy0AQ%431%FA8tGJQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tF8%378%FA8tDhQPLSyUDy0vVA8tERQPLQB%37%FA8tBdQPLSxUDy051A8tOVQPLRd%378%BQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSRUDy0BQ%426%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0Uw%372%BRPbQDUDy0w1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tBc%415%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0q%379%UDy0FVA8tORQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQ1%405%FA8tBdQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0r%384%FA8tDNQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Y%395%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cw%388%BQPLRfUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tJRQPLQE%378%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%400%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Fg%367%FA8tAFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIU%405%UDy0BVA8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDQ%362%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hQ%42%UDy0AlA8tAhQPLQIUDy0AQ%351%FA8tBdQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%357%FA8tC1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%42%BQPLQgUDy0qVA8tP9QPLT/UDy0sFA8tAw%351%BQPLQ1UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAU%351%BQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tIU%42%FA8tCBQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tLw%357%UDy0YFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQX%346%BQPLQMUDy0oVA8tP5QPLT0UDy0cg%42%UDy0IFA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQT%357%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0N%405%BQPLQhUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQS%357%FA8tARQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tF8%394%FA8tCFQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ4%367%BQPLQWUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0Bg%378%UDy0IFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAo%373%UDy0NFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tBc%367%BQPLQgUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0CQ%383%FA8tF9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQ1%357%FA8tB9QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%42%BQPLQ1UDy0R1A8tBQ%335%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Xw%346%UDy0AlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tAg%37%UDy0A1A8tK1QPLT9UDy0/1A8tPhQPLR%331%BQPLQFUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJFQPLQF%336%UDy0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0C%37%BQPLQDUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT5UDy0F%331%UDy0F1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Fg%330%UDy0WlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%37%FA8tARQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0WQ%335%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDM%325%UDy0B1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAk%37%UDy0BFA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0S%341%BQPLRfUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRdUj+1AQ%319%FA8tD1QPLTpUDy0/1A8tP9QPLS3UDy0Cg%36%BQPLQEUDy0q1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%353%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAc%319%BQPLQLUDy0HVA8tB0%42%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQJ%352%UDy0BlA8tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQY%368%UDy0BFA8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAk%362%FA8tBdQPLTiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0NQ%356%BQPLQEUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cg%42%UDy0LlA8tH1QPLQgUDy0Ag%308%BQPLQ1UDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tF8%346%FA8tANQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQK%37%FA8tARQPLSMUDy0/lA8tP9QPLT/UDy0mFA8tAI%309%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSRUDy0BQ%330%UDy0A1A8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%37%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGo%314%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tBU%325%UDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0Cw%36%BQPLQDUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%314%FA8tAVQPLS/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQy%314%BQPLQ1UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQK%37%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHo%319%BQPLQWUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0XFE+tAE%303%BQPLR8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAo%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tA8%325%UDy0M1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI9QPLQJ%298%BQPLRGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0CQ%36%BQPLQCUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Kw%335%FA8tF1QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0GQ%298%UDy0klA8tP9QPLT/UDy0/1A8tMBQPLQJ%37%FA8tAJQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQs%341%FI/tQFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDY%298%FA8tFRQPLSdUDy0X1A8tAg%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC0%42%FA8tClQPLSSUDy0dFA8tB8%287%BQPLQHUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRf%346%BQPLQDUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%42%UDy0aVA8tP9QPLT/UDy0/1A8tNpQPLQe%288%UDy0GFA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA8tAQ%330%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%293%FA8tDVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQU%320%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tC8%42%FA8tGpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLRfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0MQ%308%BQPLQEUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lw%42%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJ%304%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tFtRPbQB%298%BQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQp%304%UDy0BVA8tL9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSE%293%FA8tE5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC4%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%314%FA8tBVQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8%293%FA8tHxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0LQ%42%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%324%BQPLQyUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTo%293%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQs%42%BQPLRrUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRm%336%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%293%FA8tAtQPLTbUDy0/1A8tP9QPLT/UDy07FA8tCs%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%341%UT60AVA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%303%BQPLQVUDy0q1A8tNxQPLSzUDy0L%43%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%351%FA8tAlQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRn%362%BQPLQZUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGpQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tGc%373%UDy0NlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Zw%383%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRn%394%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%399%BQPLQEUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0SFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%410%UDy0FFA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%378%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRm%421%FA8tDFQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%384%UDy0pVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%431%BQPLRbUDy0/1A8tP9QPLT/UDy09FA8tEE%389%UDy0OVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%436%BRPbQBUDy0hFA8tPxQPLToUDy0QQ%399%FA8tFFQPLT+UDy0/1A8tOVQPLRE%32549%FA8tAlQPLQ2UDy0K%421%BQPLQOUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0Cg%282%UDy0E1A8tNpQPLT/UDy0/lA8tK1QPLQj%405%FA8tDFQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCE%277%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLT7UDy0g1A8tAs%394%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRbUT20Ag%383%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ylA8tDM%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSjUDy0H%368%FA8tKlQPLT/UDy0/1A8tP9QPLT0UDy0QFA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy03lA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tHpQPLQG%357%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpQPLQ8UDy001A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0UFJAtQE%346%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUD20A1A8tG9QPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMJQPLQq%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQWUDy0jVA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0j1A8tBY%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tCpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLRwUT20Ag%319%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BRPrQBUDy0UFA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01VA8tD0%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tAdQPLR5UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSvUDy0J%304%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0HFA8tKJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tIVQPLQS%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%58%BQPLQzUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0X%288%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UT60AVA8tFxQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLQ5%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQNUDy0g1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%80%Uj+1AVA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0Bw%271%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQnUDy0sVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS0%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UDy0C1A8tIlQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ5QPLQN%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%53%FE9tAJQPLRfUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Lg%287%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0N1A8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrUB%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tB5QPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLR+UDy0Dw%303%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BQPLQGUDy0f1A8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tB8%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tFZQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRC%325%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQvUDy0vFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0a1A9tAM%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUDy0GFA8tJRQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tIhQPLQT%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPtQPLR3UDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS8UDy0Jw%351%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tE0%362%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR1UDy0Bw%367%FA8tKlQPLT/UDy0/1A8tP9QPLT3UDy0d1A8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR3UDy06FA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0nlA8tBg%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMJQPLQx%389%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLTiUDy0WQ%399%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0DFA8tL5QPLT/UDy091A8tH9QPLQO%405%FA8tCZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tCE%282%FE9tAJQPLQQUDy0Cw%420%BQPLQHUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUT20Ag%33967%FA8tBhQPLQd%874%BQPLQYUDy0n1A8tPxQPLT/UDy0xlA8tC4%853%UT20AlA8tHZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0G%837%BQPLRNUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tHRRPbQC%816%UDy0KlA8tLFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTXUDy0QQ%420%BQPLQlUDy0TFA8tCU%362%FA8tBRQPLSKUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLJQPLQn%394%BQPLQjUDy0d1A8tMpQPLT+UDy0/1A8tPhQPLRM%346%BRPbQDUDy0a1A8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0wVA8tDJQPLQaUDy0n1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0iFA8tBQ%362%FNAtQFQPLQgUDy0elA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTlUDy0Gw%335%FA8tDtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLRZ%21%FA8tDFQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRgUj+1AQ%340%BQPLQ2UDy0hFA8tNNQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlE9tAM%319%BQPLQmUDy0plA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0gFA8tA0%31%BSP7UBUDy0WVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tDg%319%BQPLQ0UDy0hlA8tNxQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%309%UDy0CFA8tH9QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tKtQPLQb%53%FA8tA9QPLSAUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSnUDy0Iw%287%FA8tAZQPLQuUDy0ilA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQ+%293%FE9tANQPLRUUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0Ow%74%UDy0HlA8tKtQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tH9QPLQG%261%FA9tANQPLRFUDy0lVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLS+UDy0bVA8tBhRPbQCUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Cw%282%UDy0NVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tGI%95%BQPLQ8UDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0VVE9tAE%234%FE9tAJQPLRGUDy0llA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLSxUDy0V1A8tA8%21%UDy0HVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0qlI/tQE%266%FA8tBVQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSLUDy0E%107%UDy0B1A8tGdQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMRQPLQy%213%FA8tAxQPLRLUDy0mFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSyUDy0WVA8tA4%42%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%255%BQPLQHUDy0c1A8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tFA8tC%128%BQPLQSUDy0jFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0k1A8tBc%186%FA8tAZQPLRUUDy0pVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLSnUDy0XVA8tAw%63%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQo%240%UT60AVA8tElQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNVQPLRD%149%FA8tCFQPLS2UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRzUDy0BQ%175%FA8tK9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLSgUDy0RVA8tAg%79%BQPLQOUDy00lA8tP9QPLT/UDy0/1A8tP9QPLTTUDy0Bw%228%BQPLQeUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0a1A8tAk%165%UDy0UFA8tNRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tEg%165%UDy0HFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLShUDy0R1A8tAg%101%UDy0NVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0kQ%228%BQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tJRQPLQU%181%FA8tApQPLRsUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQY%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLSLUDy0TVA8tAQ%122%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tE4%223%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Jw%202%UDy0FVA8tJZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLS3UDy0NlA9tAM%143%BQPLS0UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%218%BQPLT2UDy0/1A8tP9QPLT/UDy03FA8tFhSP7UB%218%BQPLQzUDy0xFA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%154%BQPLQZUDy05lA8tP9QPLT/UDy0/1A8tP9QPLS8UDy0BQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0QlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0dw%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tIlQPLT/UDy0/1A8tP9QPLT/UDy0+FA8tDc%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tAlQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQQ%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLQlUDy09FA8tP9QPLT/UDy0/1A8tP9QPLSj%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0WlA8tP5QPLT/UDy0/1A8tP9QPLT+UDy0YQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tKRQPLT/UDy0/1A8tP9QPLT/UDy09FA8tCI%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tA9QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQM%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLQxUDy091A8tP9QPLT/UDy0/1A8tP9QPLSI%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT9UDy0SQ%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0BVA8tLZQPLT/UDy0/1A8tP9QPLT/UDy07VA8tBs%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tBlQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tJ4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%202%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tLg%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tFJQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tF4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0HlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0rVA9tAM%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BSPrUBUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Ew%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLSBUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLR%187%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tDpQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tIk%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0FlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tAU%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0plA8tP9QPLT/UDy0/1A8tP9QPLTtUDy0HQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLRnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRa%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tChQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tJk%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0BVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAo%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0l1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0MQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR3%154%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR1%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0rlA8tFlQPLQQ%133%FA8tB9QPLTnUDy0/1A8tP9QPLT/UDy0/1A8tLJSP7UB%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0q1A8tFtQPLQO%112%UD20A1A8tLpQPLT/UDy0/1A8tP9QPLT/UDy05lA8tBI%223%BQPLT2UDy0/1A8tP9QPLT/UDy08VA8tHRQPLQI%213%FA9tANQPLRRUDy03VA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0CVA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0ulA8tGhQPLQa%96%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0RQ%228%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0T%203%UDy0KVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRY%165%FA8tElQPLTdUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0wVA8tGpQPLQa%74%BQPLQ2UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSE%234%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQq%181%FA8tBFQPLSVUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%176%UDy0NFA8tIRQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0u1A8tGxQPLQY%53%FA8tAxQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQE%234%BQPLQWUDy0mlA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0lFA8tA8%159%BQPLQGUDy0alA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tCk%191%BRPbQCUDy0MFA8tIpQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy01FA8tHhQPLQp%32%UT20AlA8tK1QPLT/UDy0/1A8tP9QPLT/UDy07FA8tCY%250%FA8tDZQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLRpUDy0Bw%143%FA8tEVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRMUT20AQ%218%UDy0I1A8tHRQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy001A8tHhQPLQo%16%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%260%BQPbQDUDy0TlA8tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tEU%127%BQPLQgUDy0sVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0dVA8tAY%245%UDy0JVA8tHJQPLTQUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tIRQPLRZUDy08FA8tP9QPLT/UDy0/1A8tP9QPLSd%277%FA8tAhQPLR2UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLStUDy0IQ%106%UDy0DlA8tIlQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ1QPLQe%272%UDy0I1A8tHhQPLS2UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQL%288%UDy0HlA8tJ5QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tIlQPLQN%85%FE9tAJQPLRhUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Og%298%UDy0FlA8tGVQPLS7UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDI%303%BQPLQ8UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0XFA9tAQ%69%UDy0OlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tFdSPrUB%320%UDy0FlA8tGNQPLTAUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%314%UD20A1A8tFdQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQ7%53%FA8tBhQPLSoUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSLUDy0CQ%346%UDy0FlA8tFtQPLSnUDy09lA8tP9QPLT/UDy0/1A8tP9QPLS4UT20Ag%324%BQPLQKUDy0i1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0qFA8tBg%31%BQPLQJUDy0dFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qVA8tCQ%373%UDy0DVA8tFRQPLSpUDy0w1A8tKtQPLQa%341%FA8tCRQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLRzUDy0CQ%15%FA8tFdQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRD%768%UDy0RFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tFZQPLQxUDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0a1A9tAM%778%FA9tANQPLRtUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tJVQPLQO%800%UDy0DlA8tJZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSxUDy0L%821%BQPLQrUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tEtRPrUB%837%FA8tE5QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tO5QPLR1UDy0Bw%852%BQPLQGUDy0dlA8tOhQPLT4UDy0p1A8tBU%874%FA8tARQPLQI%13829%FE9tANQPbQD%880%UDy0ZlA8tOVQPLTrUDy0u1A8tH5QPLRAUDy0EQ%847%FA8tAZQPLSMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tM1QPLSaUDy0V1A8tCE%821%UDy0FlA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0pFA8tHBQPLQxUDy0Cw%788%BQPLQxUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tMFQPLSDUDy0T1A8tA4%383%BQPLQvUDy0VlA8tBM%362%FA8tFhQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTUUDy0llA8tGRQPLQmUT20AQ%346%UDy0JFA8tKlQPLT9UDy0/1A8tPNQPLRtUD20Aw%340%BQPLQIUDy0ilA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQeUT20AlA8tDpQPLR6UDy0rVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy05FA8tLJQPLR0UDy0QlA8tAs%314%FA8tAZQPLSBUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy00VA8tEU%330%FA8tBpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lFA8tAo%26%FA9tARQPLQpUDy0XVA8tJxQPLTPUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLTEUDy0kFA8tCk%287%BRPbQBUDy0WFA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0IQ%314%UDy0N1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRiUT20AQ%58%UDy0EVA8tEpQPLSDUDy0u1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQl%277%FA8tDRQPLTHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIJQPLQR%293%FI+tQFQPLRgUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDY%90%FA8tAZQPLQ3UDy0alA8tKhQPLTnUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%266%BQPLQZUDy0nVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Yw%282%UDy0ClA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0Gg%122%UDy0HlA8tFlQPLSMUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Fg%250%UDy0BlA8tHZQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLRQPLQgUT20AlA8tF1QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQx%266%BQPLQdUDy0vVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJdQPLQH%149%FA8tAdQPLRFUDy0hFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0hw%239%FE9tAJQPLRMUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTRUDy0Qw%20%BQPLQMUDy0g1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tBw%250%FA8tDpQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0ZVI/tQE%170%FA8tB1QPLT3UDy0/1A8tP9QPLT/UDy09FA8tBU%229%UDy0LlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tGpQPLQK%37%FA8tCVQPLSuUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR4UDy0Dg%234%UDy0YlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLQ2%186%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tIk%218%FA8tBFQPLSQUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSUUDy0F%21%BQPLQ8UDy0vlA8tMlQPLRuUDy0BQ%10%UDy0P1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tF%219%FE9tAJQPLSTUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tBY%191%BQPLQeUDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQU%202%BQPLQFUDy0alA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tDI%26%FA8tA5QPLTzUDy0/1A8tP9QPLT/UDy021A8tEU%10%FE9tANQPLRpUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTBUDy0Kw%202%UDy0FlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSPUDy0BQ%202%UDy0rlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%Uj+1AVA8tD9QPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpQPLRW%37%FA8tD9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3UDy0Jw%10%UDy0F1A8tJBQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJdQPLQV%186%BQPLQ0UDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tFw%213%UDy0M1A8tP5QPLT/UDy0/1A8tP9QPLTlUDy0C%181%BQPLQmUDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0dFA8tAs%42%FA8tAZQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tI9QPLQL%10%BQPLQpUDy0u1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0b1E9tAI%170%FA8tF5QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Lw%223%FA8tLBQPLT/UDy0/1A8tP9QPLT/UDy0bg%170%UDy0ClA8tIpQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKhQPLQY%58%BQPLQrUDy0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZVE+tAE%10%FA8tEtQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNNQPLRG%154%BRPbQCUDy0kVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQS%229%FA8tDJQPLT9UDy0/1A8tP9QPLT/UDy041A8tAc%154%FE9tAJQPLRVUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTFUDy0OQ%74%Uj61AVA8tF1QPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQ9%10%BQPLQMUDy0dlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tB8%138%FA8tBBQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA9tAQ%239%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tG8%149%UDy0I1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrQB%90%BQPLQMUDy0elA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0olA8tC%11%FA8tBtQPLSdUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSIUD20Aw%127%FA8tI1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%250%BQPLRCUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQI%144%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSJUDy0Dg%111%FA8tBxQPLSuUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSEUDy0Bg%10%UDy0LlA8tMVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Sw%127%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy05VA8tDQ%255%BRPrQBUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLRQ%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0sVA8tB8%133%UDy0QFA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tFFSP7UB%10%BQPLRgUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTwUDy0F%267%UDy0S1A8tP9QPLT/UDy0/1A8tP9QPLTPUT61AQ%138%UDy09VA8tP9QPLT/UDy0/1A8tN1QPLRC%149%FA9tARQPLRlUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0NQ%10%UDy0D1A8tH5QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%272%UT20A1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0Ug%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%165%UDy0EVA8tJBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0zQ%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tC9QPLTTUDy06VA8tK1QPLQL%138%BQPLQlUDy0tlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FE9tAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tFI%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tNNQPLT/UDy0/1A8tP9QPLR1%149%FA8tEtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tLM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tMM%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%154%BQPLQJUDy0cFA8tPFQPLT/UDy06lA8tDc%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQIUDy04lA8tP9QPLT/UDy0/1A8tP9QPLQ3%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%165%FA8tAhQPLQ6UD20Aw%15%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLSz%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0CVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0Ng%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0tQ%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tAdQPLTsUDy0/1A8tP9QPLT/UDy0/VA8tDU%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLQUUDy08lA8tP9QPLT/UDy0/1A8tPpQPLQg%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0hFA8tP9QPLT/UDy0/1A8tP9QPLSX%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0GFA8tP5QPLT/UDy0/1A8tP9QPLTI%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLS8%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BRPbQCUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLRT%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLRKUDy0/1A8tP9QPLT/UDy0/1A8tM9SP7UB%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FE9tAJQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tFE%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy00FE9tAM%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tMpQPLT/UDy0/1A8tP9QPLT/UDy0Zg%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0OlA8tP9QPLT/UDy0/1A8tP9QPLTjUDy0Bw%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLRv%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQyUDy0/lA8tP9QPLT/UDy0/1A8tOVQPLQI%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%160%UDy0BlA8tGVQPLSaUDy0blI/tQE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tGw%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0CVA8tPNQPLT/UDy0/1A8tP9QPLSI%154%BQPLRMUDy04FA8tP9QPLT/UDy0/1A8tHE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tDJQPLT/UDy0/1A8tP9QPLT/UDy05lA8tAo%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tJ9QPLT/UDy0/1A8tP5QPLQ4%144%UDy0K1A8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tK5QPLT/UDy0/1A8tP9QPLT/UDy0ig%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tAdQPLRnUDy0iFA8tDg%138%FA8tA1QPLSVUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJQ%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTrUT61AQ%266%UDy0HFA8tPZQPLT/UDy0/1A8tP9QPLT0UDy0FQ%138%UDy09VA8tP9QPLT/UDy0/1A8tK9SP7UB%154%BRPbQCUDy0a1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sVA8tB0%10%FA8tBNQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0mlA8tAw%261%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLSI%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLS1UDy0Lw%143%FA8tENQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLRY%10%BQPLQEUDy0YVA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQi%250%BQPLQdUDy0+FA8tP9QPLT/UDy0/1A8tPRQPLQX%144%UDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tI1QPLQL%122%BQPLQjUDy0p1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0dFA8tAk%10%FA8tD1QPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tDpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0QQ%244%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tIg%149%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZFA9tAQ%101%UDy0CVA8tIpQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ5QPLQY%10%BQPLQaUDy0qlA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Iw%132%BQPLQvUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tGs%234%FA8tBxQPLT4UDy0/1A8tP9QPLT/UDy0+1A8tBk%149%UD20BFA8tFhQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLQ/%85%FE9tAJQPLRhUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Ow%10%UDy0ClA8tHZQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKVQPLQi%144%UDy0E1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSdUDy0Bg%223%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0pQ%164%BQPLQMUDy0e1A8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tB8%69%UDy0OlA8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tF9QPbQD%5%FI/tQFQPLRYUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMUDy0Qg%159%FA8tARQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tCc%213%UDy0DlA8tOtQPLT/UDy0/1A8tP9QPLT9UDy0KQ%175%FA8tBhQPLSmUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLSDUDy0Cg%52%BQPLSDUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSKUDy0Dg%10%UDy0M1A8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061A8tGpRPbQC%176%UDy0VFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRI%208%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLSj%192%UDy0QlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFhQPbQE%37%FA8tBtQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0sFA8tCE%10%FA8tBNQPLSUUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSTUDy0D%192%FA8tChQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0cw%196%BQPLQNUDy061A8tP9QPLT/UDy0/1A8tP1QPLQr%197%FA8tAZQPLRdUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0O%32%FA8tChQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLRG%10%BQPLQGUDy0bFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sFA8tCk%207%BQPLQPUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKZQPLQJ%186%BQPLR4UDy0/1A8tP9QPLT/UDy0/1A8tKU%213%UDy0DlA8tIZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tJ5QPLQX%21%FE9tAJQPLS7UDy0/1A8tP9QPLTvUDy0alA8tAc%10%FA8tE9QPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRL%224%UD20A1A8tIhQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0I%176%FA8tAxQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tDw%223%BQPLQoUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0eFA8tAg%15%BQPLQMUDy0VVA8tGVQPLQR%10%BQPLQgUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0dFA8tAU%239%BQPLRWUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tEM%159%BRPbQCUDy0H1A8tIhQPLT/UDy0/1A8tP9QPLT/UDy0w%240%FA8tEpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLRMUT20AQ%26%UDy0DlA8tIpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tJ5QPLQS%256%UDy0LVA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRw%133%FA8tAZQPLQ6UDy0eFA8tKtQPLTnUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Qg%244%BQPLQHUDy0clA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tC4%10%FA8tAVQPLRhUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTEUDy0Mg%271%FA8tA5QPLSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAY%101%UDy0FVA8tFFQPLSJUDy0yVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%262%FA8tBFQPLSaUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSNUDy0RVA8tM5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFRRPbQC%282%BRPbQCUDy0f1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQZ%69%FA8tAVQPLQrUDy0YFA8tJ9QPLTdUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRB%272%UDy0L1A8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR+UDy0CQ%303%FA8tE5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0Pw%42%UDy0C1A8tD9QPLR+UDy0u1A8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy041A8tHxRPrQB%282%BQPLRUUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVA8tCU%319%BQPLQnUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tG4%15%BQPLQiUDy0U1A8tJBQPLTCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTPUDy0lFA8tFVQPLQk%304%UDy0CFA8tHxQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQ/Uj+1AQ%330%UDy0C1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0oVA8tOBQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tL5QPLSAUDy0QVA8tA4%335%BQPLQWUDy0pVA8tPxQPLT/UDy0/1A8tP9QPLToUDy0XlA8tAQ%346%FE+tQFQPLSCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLTgUDy0oVA8tG5QPLQuUDy0Bg%367%FA8tDdQPLS1UDy0yVA8tJBQPLQQ%368%UDy0UlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tMxQPLSMUDy0V1A8tBY%794%FA8tC1QPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTqUDy0rVA8tHpQPLQ9UDy0C%821%BQPLQSUDy0tFA8tP9QPLT/UDy0/1A8tNFQPLSdUDy0X1A8tCxRPbQC%848%UT20A1A8tDpQPLRBUDy0Fg%31375%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%789%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%41162%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%357%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%415%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%325%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%63%BQPbVTUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy01Q%282%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%303%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%52%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%272%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%288%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%47%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%276%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%266%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%261%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%37%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%256%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%31%BQPbM2UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUDy0j%251%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%256%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%325%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%245%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%319%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%244%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%31%BJSbYHTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUVTm4Eg%244%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%244%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%239%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%239%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%138%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%372%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%133%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%379%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%117%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%378%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%90%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%378%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%63%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%389%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%394%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%400%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%410%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%432%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%452%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%474%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%484%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%359%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%239%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%239%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%21%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%245%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%244%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%244%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%256%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%256%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%266%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%272%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%282%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%277%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%293%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%283%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%308%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%293%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%330%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%421%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%378%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%40704%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhRPbNl%74%BQPLS4UDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06%293%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToTzy051A8tN1QPLTLUDy0uFA9tYZSPbRLVUCqD%315%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTsSzy0EQ%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071E8tIhVPbYV%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0kg%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTnUDyzQ%299%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+007sis%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE8tUw%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFTObMo%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7RS%58%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWy%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7TfYEC/C%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhQPLScUTy0rlA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTyzLw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BPPrUtUTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VJAthw%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%QEC/BFE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%E49sS5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08g%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLM8%42%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1UrqgY%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POgACAAg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VAtRg%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQO7SjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRPbSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E2rhM%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPROO7EaUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061BArx%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/oAAgAI%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%UDuzeVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%ElJtgdQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06w%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%SUm2B1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtPPbYq%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20tQ%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%10%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UTyzPFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT21Tw%20%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09EBAvwRAQL8EQEC/BEBAvwRAQL8EQEC/BEBAvwRgQL8IUj24GVE8tUhQO7SfUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDq2Iw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BPPbYqUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03UlJtgc%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSt%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UDy1kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZPPbYq%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UECvEFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRMObMb%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%FA8tGZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSk%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1fw%298%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%IAAgAJQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%4%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5PPLNe%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%31%BPO7Q9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zIAAgAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUTy0iEs8tBE%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tzy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tWRQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFE8tHtPPLRqTz2zVE07sis%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tz6wHVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%GBAvwhQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%47%BQPbVTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%UTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%Tz61LVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%FU5uBJQPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BPPLRqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BVVaoDUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%69%UDyzQFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FE8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FI6tR9QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%39872%EBAvwRQOrUwUTy0VVE8s3JRPbR+Tzy0hFA7s3lRO7NoUDqzRkw5sxs%389%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%378%FU5qglPPLVaUDyzs1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeTzyzkVI6sjU%357%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%351%BmM8wFUTyzclA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7TBTzu0PQ%335%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%335%FI9szJQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lE7s5tNM7MK%320%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%325%UDy1WVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLXRUjq1Hw%308%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%314%BPPLNhUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04E0+siE%298%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%303%FE8tUxQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tNtLPLQR%288%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%299%UDq2I1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0jFE9tU9QPbM2Tju3J1E9sj9QPLVdUDy0qVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4%288%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%290%P8BUTu0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07k89tWQAAP8B%37%FVEuw9PPLSaUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu1Zw%282%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%287%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaTDmzGw%58%TzyzUVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lBArx%272%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%282%FVVqgNQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBSQLYc%69%FE8tFVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4M%271%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%282%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%79%BPPLSaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpVK6oG%266%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%282%FE9tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%84%BQQK8QUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVT%266%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%277%VTmqCVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz22Kg%90%Tzyzh1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%266%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%384%UTu1RVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTE%96%TjmxJFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTm%266%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%379%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7N5%101%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxGg%266%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%363%UDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbND%101%FA8s6JQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz20Rw%266%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%336%Tzy0xFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9LPLQR%101%FA8s29QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT2zZQ%266%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%309%UDy02lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPw%106%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20fg%271%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%299%UTy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%106%FA7tklQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1iQ%276%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%288%UDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tOQ%106%FE8szxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzyzkQ%282%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%282%UDy14lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPI%106%FE8tUhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%292%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%277%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5VVaoD%101%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyzg%315%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%272%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9NPLMe%101%FA8tHNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%340%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%272%Tzy0mlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbNU%101%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDqzRg%362%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%272%Tzy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%101%FA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%372%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%266%Uj2zMlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLXigACAAg%90%Tz60OlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTe%386%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%268%D/AVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzuzSg%90%UDu0o1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLOU%266%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%271%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFVVqgM%79%BOPbEuUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLN%267%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%272%FE8sy9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tHQ%74%FVVqgNQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%271%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%276%BQPbW5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpPPLNN%64%gACAAlA7tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%271%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%276%BOO7U0UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTuzWw%52%BOO7ENUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy01FVVqgM%271%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%288%UDu0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVSOrI1%32%VTmqCVE7s1tQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9Uju2O%283%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%288%TTOzClA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8s6JRPLSIUTy0e088s5FRPbSxUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO%289%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%293%E0+siFQPLPpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0AAP8B%293%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%303%BNO7IrUDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFUrqgY%298%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%309%TT6yIVE8tdFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbWXZjPMBQ%308%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%319%FU5qglRPbSLUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy051A9tVM%325%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%336%Tju3J1A9tKBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZRPLV4TjuxDQ%340%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%357%BQQK8QTzyzYU89tKRQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tMxQPLWQUDqzRlVVqgM%362%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%389%ZjPMBVI6tR9NO7IrTj62MU47tydON7EX%410%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%39354%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%831%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%69%TzyzkVA8tOhQPLToUDy06FA8tOhQPLToUDy06FE8tJg%255%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA9tLU%293%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%282%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%277%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%42%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%271%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFA9s3Y%261%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%155%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRQPLRz%261%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xPPLNe%261%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%368%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%43%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%379%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%389%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%53%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%405%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%837%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%40650%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tONQPLPYUDy0v1E7s5tRPLRiVUC1G%443%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/U88tLRROrM5%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UTy0mFUrqgY%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVVVaoD%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTy1Jg%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzy0mlA9tahQPLTNUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UkC2HFA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09mBAvwg%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%67%/wFQPbS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7RBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%31%BVQKoMTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUTjuxDQ%20%BAQL8EUD2zQ1A9s3ZPPLOHUTq0L%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BVPbYVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%16%E88s2FRPLTkUDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7EaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tE4%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BVK6oGUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRO7RSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE6uRY%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BRPLWhUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FVAqgxRPLXRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDuzr%37%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21qFE9tFhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BGRrkLUD21U1A8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUzy0Ig%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVA8teJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUDy01VA8tONQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdQOrNG%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VE8szw%47%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxRPLXRUDy0ulA9tLVQPLTJUTy1T%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4VUC1G%53%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDu0cEk3tg4%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLTkTzyzTQ%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFNO7Ir%320%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIyAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLOlVVWqAw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+U0zswo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7tLBRO7TBUD207FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%61%D/AVA9s0NQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tD0%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BJN7YOUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMI%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tz2zVFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9TPLQi%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%UECvEFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLNe%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%80%FA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%YEC/CFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbR+%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tju0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRp%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%CAAIACUDuzvVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9ROrM5%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FI9uBlRPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBAQL8E%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4NQPbSTUDy1wFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tIs%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08k47sRo%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0Yw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSd%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+087tIGAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSmTz22Kg%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLT1UDy041A8tMVPPbWXUD20XEs8tBE%63%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%41055%BLPLQRUD21U1A8s4BQPLSdUDy0qlA8s6VPPLORUTy0e1E7tUVNM7MK%448%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%74%Ek3tg5QPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUD20tQ%218%Tj61PlA7tLBQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDu0sFI7tjg%437%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%208%FE6uRZQPbWoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SwVTm4Eg%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%203%Uzy0IlA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VI9szI%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BRNq4TUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQOrYj%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BQO7SfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTZYEC/C%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE8tSZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS7UTu0hVE9tH5PPLSnUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE7tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tDM%21%VT22FVA8tbJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08UZGuQs%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUkC2H%32%FVVqgNQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tU8%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UkC2HFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PO7NX%42%BNPLMeUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJk%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8teKAAIAC%48%Tzy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tL4%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tZ4%53%UDyzgFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UTu0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tXg%53%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOM%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UDu0n1A8tPxQPLT8UDy0/FA8tPxQPLT8UDy0/E87tWc%53%UD20k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%CAAIACUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%BPPLNeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4%406%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%272%E8+tS1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6tCw%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%267%Tju1NFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0s%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%261%BRPLVMUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLPpUj24GQ%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%256%FA9tG1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QOrUw%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%251%Tzy0d1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VE6tCw%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%245%BRPbVPUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS7TjexFw%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FU5qglQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7tH2AAIAC%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA9tG1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUD2zQw%442%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQz%448%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Rka5C1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%454%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tVM%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UTyzPFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6szk%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tIxQPLSMUDy0jFA8tIxQPLSMUDy0jEw5sxs%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UD2zdlE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJiAAIAC%69%E87tD1RPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzu0PQ%20%BPO7Q9UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mE87tD0%21%Tzu0PVE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhPO7Q9%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%20656%\")):e1(e,nE)?new iU(xv(t,84,252,\"%2549%P8AAO7/AAD/%432%/wAA3P8AAP//AAD//wAA/w%420%D/AACt/wAA//8AAP//AAD//wAA//8AAP8%163%D/%250%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%158%D/%4%/w%239%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%152%D/%4%/wAAAP8%229%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%147%D/%4%/wAAAP8AAAD/%218%D/AAC9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%142%D/%4%/wAAAP8AAAD/%4%/w%207%P8AAI//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%202%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%192%/wAA7P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%180%D/AADN/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%170%P8AAJ7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%165%P8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%154%/wAA7v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%143%D/AADc/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%128%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%127%D/AADr/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAL3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA6w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%133%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP7/AACt%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%132%D/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%89%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAM3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPw%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%138%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%105%D/%4%/wAAAP8AAAD/%4%/w%138%/wAA/v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%115%D/%4%/wAAAP8AAAD/%138%D/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAzQ%120%D/%4%/wAAAP8%138%P8AANz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%131%D/%4%/w%138%/wAArf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvg%136%D/%144%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO4%287%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvQ%287%P8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%293%/wAAvf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+%304%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%303%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8%309%P8AAOz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANw%309%/wAAzf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%320%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAM0%319%D/AAD+/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%325%P8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL4%325%/wAA3P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADu%336%/wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL0%335%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADr%341%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA/g%346%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AADr%352%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA/%357%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AADc%357%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%15%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADNUDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%111%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA7g%10%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA//8AAP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA7%27%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%D/AAAD/wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%208%/wAAA/8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%116%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%31%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%101%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%111%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6208%D/AP8A/wD/%433%P8A/wD/AP8A/wD/AP8A/w%422%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%163%D/%252%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%158%D/%4%/w%240%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%152%D/%4%/wAAAP8%230%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%147%D/%4%/wAAAP8AAAD/%220%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%142%D/%4%/wAAAP8AAAD/%4%/w%208%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%203%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%171%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%166%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%155%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%145%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%129%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%129%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%134%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%134%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%140%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%145%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%289%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%288%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%294%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%305%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%305%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%310%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%310%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%321%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%321%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%326%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%326%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%337%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%241%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%64%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%224%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%69%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%79%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%4%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%204%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%80%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%198%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%106%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%117%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%10%UDy0/1A8tP9QPLT/UDy0/1A8tP8%187%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%187%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%154%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%193%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%159%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%203%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%159%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%150%D/AP8A/wD/AP8A/wD/AP8%165%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%156%/wD/AP8A/w%164%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%36%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%335%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%351%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6242%//8AAP//%434%D//wAA//8AAP//AAD//w%423%P//AAD//wAA//8AAP//AAD//wAA//8%163%D/%253%P//AAD//wAA//8AAP//AAD//wAA//8AAP//%158%D/%4%/w%242%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%152%D/%4%/wAAAP8%231%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%147%D/%4%/wAAAP8AAAD/%221%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%142%D/%4%/wAAAP8AAAD/%4%/w%210%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%205%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%194%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%183%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%173%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%168%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%156%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%146%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%130%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%130%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%135%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%141%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%146%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%290%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%290%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%295%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%306%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%306%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%312%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%311%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%322%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%322%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%328%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%327%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%338%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%338%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%344%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%348%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%354%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%359%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%360%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%364%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%48%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%63%FA8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%42%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%146%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%167%D//wAA//8AAP//AAD//wAA//8AAP//AAD//w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%178%//8AAP//AAD//wAA//8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%189%P//AAD//w%84%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%293%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%304%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%320%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%3754%\")):null}var ly=\"object\",nn=`\n`,m2=\"boolean\",s9=\"number\",Mf=\"string\",Et=2147483647,b2='For input string: \"',y9=\"null\",c0={4:1,9:1,5:1,8:1},oM=\"__noinit__\",A0={4:1,5:1,8:1},Tn={4:1,19:1,33:1,27:1},Dt={4:1,9:1,14:1,5:1,11:1,8:1,13:1},o0=65536,d1=65535,fP=1e4,to=\"fromIndex: \",UM=\" > toIndex: \",H6=\", toIndex: \",LM=\", length: \",V6=\"Index: \",E6=\", Size: \",Tt={15:1,4:1,5:1},Cf={4:1},m={7:1,4:1,5:1},yi=16777215,DP=65280,Hf=.30000001192092896,l9=545460846592,w8=4294967296,h9=8589934592,T9=17179869184,c9=34359738368,w9=68719476736,g9=137438953472,Vf=274877906944,it={12:1,4:1,5:1},Pe=536870912,je=8192,S6=2.617993878,I6=3.665191429,m0=6.283185307179586,l1=3.141592653589793,HA=1.5707963267948966,Gn=16384,hy=-8355712,S0=4096,eo={l:0,m:0,h:1},Ao={l:0,m:0,h:2},no={l:0,m:0,h:4},uP=1920,Qe=1024,yr=234881024,Po=167772160,Ef=100663296,Sf=201326592,li=114688,hi=4063232,ro=3801088,j2=3538944,R2=3014656,io=3145728,KA=2097152,Ti=393216,NP=917504,If=1966080,xf=0xf8000000000,Ty=0xf0000000000,cy=0xe8000000000,wy=0xd8000000000,gy=0xb8000000000,x6=0xe0000000000,N6=0xc0000000000,fo=8796093022208,p2=549755813888,dy=1649267441664,By=3848290697216,Do=8246337208320,G6=0xc8000000000,O6=9345848836096,q6=0x98000000000,lr=29360128,M2={l:0,m:0,h:120},d9=268435456,O1=2048,g8=32768,uo=-1.5707963267948966,d8=130560,Qo=6291456,z6=-2.0943951023931953,fA=1.0471975511965976,C2=.5235987755982988,b1=786432,B8=524288,v8=262144,On=-16777216,GP=-65536,QP=16711680,vy=-32768,K6='<DrawingObject type=\"',J6=\"></DrawingObject>\",t1={4:1,5:1,16:1},re={4:1,5:1},Y6=\"unsupported atomicNo:\",sM=2.8415926535897933,u0={29:1,4:1,9:1,5:1,8:1},H2={4:1,5:1,11:1,8:1},I={10:1,4:1,5:1},DA={4:1,9:1,5:1,8:1,30:1},q0=131072,Fy=196608,ky={l:6,m:0,h:4},F8=1048576,k8=3221225472,X6={l:0,m:0,h:3},Nf=8388608,my={35:1,41:1,37:1},_e={4:1,9:1,5:1,11:1,8:1},Z6={35:1,41:1,74:1,37:1,70:1},by={4:1,5:1,35:1,41:1,74:1,20:1,37:1,70:1,125:1},Ge=17976931348623157e292,W6=-17976931348623157e292,B9={89:1,77:1,78:1,4:1,9:1,5:1,8:1},t0=\"??\",m8={58:1,4:1,9:1,5:1,8:1},b8=2013265920,VA=32505856,cn=31744,jy=122880,V2={127:1,4:1,9:1,5:1,11:1,8:1},oo=33554432,wn=67108864,Ry=-131073,py=-33554433,My=-33292289,_6=-3.141592653589793,z0=4194303,gn=3072,uA={46:1,4:1,5:1},$6=.7853981633974483,yM=3.061592653589793,dn=1073741824,lM=541165879296,Vt={17:1,4:1,5:1,8:1},Cy=281.17,Hy=289.19,Vy=294.21,Ey=\"0.0000\",Sy=\"NOSEARCH_OCL_CUSTOM_LABEL\",hr=\"M  END\",f1=-2147483648,E2=\"ATOMS\",Uo=\"$$$$\",Lo=\"M  V30 \",hM=\"M  V30 COUNTS \",TM=\"M  V30 MDLV30/STEREL\",cM=\"M  V30 MDLV30/STERAC\",a6=\"M  V30 END CTAB\",wM=34028234663852886e22,t4={l:2,m:0,h:4},oP=4194304,e4={l:4179966,m:4063288,h:7},gM={l:4194302,m:4193343,h:127},I0='\" ',A4='stroke=\"',n4='stroke-width=\"',Iy='\" />',dM='class=\"event\" ',BM='opacity=\"0\" />',vM=\"' position:\",FM=\"'. Position:\",kM=1099511627776,mM=2199023255552,bM=4398046511104,P4=\"', position:\",jM=\"Assignment of aromatic double bonds failed\",so=2147483646,RM={102:1,4:1},r4=\"Members of ESR groups must only be stereo centers with known configuration.\",i4=\"Over- or under-specified stereo feature or more than one racemic type bond\",f4=\"Ambiguous configuration at stereo center because of 2 parallel bonds\",pM={114:1,90:1,26:1,4:1},xy=1e5,yo=1.399999976158142,S2=3.1415927410125732,D4=1.5707963705062866,MM=.029999999329447746,CM=6.2831854820251465,HM=1.9106119871139526,VM=2.2639999389648438,u4=2.16759991645813,EM=2.0662999153137207,SM=2.3561999797821045,IM=2.2844998836517334,xM=1.9106120066311025,NM=2.094395160675049,lo=.6000000238418579,Ny=1.7999999523162842,Q4=.05000000074505806,ie={4:1,9:1,5:1,8:1,38:1},Gy=.2617993950843811,I2=2.0943951023931953,ho=1.2000000476837158,o4=1.4299999475479126,Oy=1.659999966621399,U4=1.4600000381469727,L4=1.899999976158142,GM=1.8200000524520874,OM=2.4600000381469727,qM=2.4200000762939453,qy=2.450000047683716,s4=2.440000057220459,zM=2.4000000953674316,y4=2.319999933242798,l4=2.2899999618530273,KM=1.8600000143051147,JM=2.5299999713897705,YM=2.490000009536743,XM=2.4700000286102295,ZM=2.880000114440918,WM=2.9200000762939453,_M=2.869999885559082,h4=2.8299999237060547,$M=2.7899999618530273,aM=2.809999942779541,tC=2.799999952316284,eC=3.049999952316284,T4=.3199999928474426,AC=1.3300000429153442,To=.8500000238418579,nC=1.600000023841858,PC=1.3899999856948853,c4=1.159999966621399,rC=1.1100000143051147,iC=1.0700000524520874,fC=1.9600000381469727,DC=1.7100000381469727,w4=1.3600000143051147,uC=1.340000033378601,QC=1.2200000286102295,oC=1.2400000095367432,zy=1.2100000381469727,UC=2.0999999046325684,g4=1.850000023841858,d4=1.6299999952316284,LC=1.4700000286102295,sC=1.2799999713897705,yC=1.440000057220459,lC=1.7599999904632568,hC=1.7300000190734863,TC=1.7200000286102295,Ky=1.6799999475479126,cC=1.690000057220459,wC=1.6699999570846558,B4=1.649999976158142,co=1.7000000476837158,gC=1.6200000047683716,dC=1.3700000047683716,BC=1.2899999618530273,vC=1.4500000476837158,FC=1.5700000524520874,v4=-.5235987755982988,wo=-1.0471975511965976,kC=-.7853981633974483,mC=.017453292519943295,bC=.17453292519943295,go=1e-4,Gf={150:1},Of=57.29577951308232,jC=.021922173386725217,Bo=1e-8,OP=2.5120960256267386,vo=1e-5,Jy=\"MMFF94s+\",RC=\"nonbonded cutoff\",pC=\"dielectric constant\",MC=\"dielectric model\",CC=\"angle bend\",HC=\"bond stretch\",VC=\"electrostatic\",EC=\"out of plane\",SC=\"stretch bend\",IC=\"torsion angle\",xC=\"van der waals\",NC=.07000000000000006,GC=.1200000000000001,OC=-7.840000000000001,Yy=\"OCL_RXN_V1.0:\",qC=\"$RXN V3000\",zC=\"'$MOL' tag not found\",KC=\"'M  END' not found\",JC=\"M  V30 BEGIN REACTANT\",YC=`\nActelion Java MolfileCreator 2.0\n\n  0  0  0  0  0  0              0 V3000\n`,XC=\"M  V30 BEGIN PRODUCT\",ZC=2475109711874,WC=2475109711875,_C=2887426572290,$C=2887426572291,aC=2887627898882,tH=2887627898883,eH=2887627997186,AH=3437182386178,nH=3437182386179,PH=3437383712770,rH=3437383811074,iH=3437652148226,fH=3437652377602,DH=4674132967426,uH=4674334294018,QH=4674334392322,oH=4674602729474,UH=4674602958850,LH=5086449827842,sH=5086449827848,yH=5086651154434,lH=5086651252738,hH=5086651252743,TH=5086919589890,cH=5086919688194,wH=5636406968322,gH=5636407066626,dH=5636675502082,BH={l:589826,m:590112,h:4},vH={l:589827,m:590112,h:4},FH={l:589826,m:590160,h:4},kH={l:589827,m:590160,h:4},mH={l:688130,m:590160,h:4},bH={l:589826,m:590224,h:4},jH={l:589827,m:590224,h:4},RH={l:819203,m:590224,h:4},pH={l:589826,m:590368,h:4},MH={l:688130,m:590368,h:4},CH={l:819202,m:590368,h:4},HH={l:819208,m:590368,h:4},VH={l:589826,m:590416,h:4},EH={l:589832,m:590416,h:4},SH={l:688130,m:590416,h:4},IH={l:819202,m:590416,h:4},xH={l:589826,m:598304,h:4},NH={l:589827,m:598304,h:4},GH={l:688130,m:598304,h:4},OH={l:1114114,m:598304,h:4},qH={l:1212418,m:598304,h:4},zH={l:589826,m:598308,h:4},KH={l:589826,m:688416,h:4},JH={l:589826,m:688464,h:4},YH={l:589826,m:688720,h:4},XH={l:688130,m:688720,h:4},ZH={l:589826,m:590112,h:288},WH={l:589826,m:590112,h:336},_H={l:589826,m:688416,h:336},$H={l:589826,m:688464,h:336},aH={l:688130,m:688464,h:336},tV={l:589826,m:590112,h:400},eV={l:589826,m:688416,h:400},AV={l:589826,m:688464,h:400},nV={l:688130,m:688464,h:400},PV={l:589826,m:819488,h:400},rV={l:589826,m:819536,h:400},iV={l:589826,m:819600,h:400},fV={l:688130,m:819600,h:400},DV={l:819202,m:819600,h:400},uV={l:589831,m:688416,h:592},QV={l:589831,m:688464,h:592},oV={l:688135,m:688464,h:592},UV={l:589831,m:819536,h:592},LV={l:688135,m:819536,h:592},sV={l:688135,m:819600,h:592},yV={l:589832,m:1212704,h:592},lV={l:589832,m:1212752,h:592},hV={l:688136,m:1212752,h:592},TV={l:589831,m:688464,h:656},cV={l:589826,m:590112,h:8480},wV={l:589826,m:688416,h:8480},gV={l:589826,m:688464,h:8480},dV={l:688130,m:688464,h:8480},BV={l:819202,m:819600,h:8480},vV={l:688135,m:1212752,h:8480},FV={l:589832,m:1213008,h:8480},kV={l:688136,m:1213008,h:8480},mV={l:589826,m:590112,h:8484},bV={l:589826,m:590160,h:8484},jV={l:688130,m:598304,h:8484},RV=.6262000203132629,pV=-1.3825000524520874,Xy=.33169999718666077,MV=-1.4915000200271606,CV=.3540000021457672,HV=.38179999589920044,VV=-.6019999980926514,EV=.07999999821186066,SV=-.7379999756813049,IV=\"Atom-types are 64-bit numbers describing atoms and their near surrounding.\",F4=\"Recognized atom types and their contributions are:\",xV=\"Druglikeness predictor not properly initialized.\",NV=3.009999990463257,GV=-.17000000178813934,OV=-.1809999942779541,qV=-.2029999941587448,Fo=2147483648,zV=\"ene-Metathesis\",KV=\"Halogenation ring closure\",JV=\" (rootPairSets:\",Zy=-1e10,Wy={208:1,4:1,9:1,5:1,8:1,30:1},_y=-99999,j8=\"any\",YV=\"is not in a ring\",k4=\"Excluded atoms:\",$y=\"exactly 1\",ay=\"exactly 2\",m4=\"less than 3\",XV=\"less than 4\",tl=\"at least 1\",b4=\"at least 2\",j4=\"at least 3\",ZV=\"at least 4\",R4=\"1 or 2\",WV=\"less than 2\",_V=\"Allowed atoms:\",qf={138:1},$V=\"Atom Properties\",el=-8346432,aV=\"/html/editor/editor.html\",tE=\"Structure Editor Help\",Al=\"Dummy look and feel\",nl=\"Substance Graphite\",Pl=\"Radiance Graphite\",rl=\"Radiance Night\",eE=.6499999761581421,AE=.3499999940395355,zf=.800000011920929,p4=\"editorButtons.png\",nE=\"esrButtons.png\",M4=-1774190527,C4=-1438646166,x2=-1433403286,il=-1431655766,fl=-1448432982,Tr=1073741866,Kf=1073741930,H4=\"MMFF94\",V4=\"MMFF94s\",PE=\"/resources/forcefield/mmff94/94s/outofplane.csv\",rE=\"cleaveRings\",Dl={152:1,4:1,5:1,8:1},ko=\"undefined\",iE=.08726646502812703,fE=\"overlapping\",E4=.003921568859368563,S4=\"anonymous\",I4=\"Unknown\",Pn=1048575,UP=17592186044416,Jf=1e9,N2=-17592186044416,FA=5.56,oe=11.12,cr=13.34,Yf=14.44,mo=.3010299956639812,DE=\"BigInteger divide by zero\",g1=4294967295,uE={l:0,m:0,h:524288},ul={32:1,115:1},x4={107:1,111:1},G2={35:1,41:1,37:1,87:1},Ql=16777619,QE={35:1,37:1,87:1},ol=15525485,oE=5960464477539063e-23,N4=16777216,Ul={4:1,32:1,55:1,83:1},G4=\"Invalid UTF8 sequence\",O4=.20000000298023224,UE=\" distance:\",LE={4:1,5:1,11:1,8:1,475:1},O2={50:1},U,bo,Ll,m1t=-1;w.goog=w.goog||{},w.goog.global=w.goog.global||w,bo={},p(1,null,{},u1),U.mb=function(e){return zg(this,e)},U.nb=function(){return this.wd},U.ob=function(){return jD(this)},U.pb=function(){var e;return yu(Qs(this))+\"@\"+(e=fr(this)>>>0,e.toString(16))},U.equals=function(t){return this.mb(t)},U.hashCode=function(){return this.ob()},U.toString=function(){return this.pb()};var sE,yE,lE;sE={4:1,315:1,32:1};var jo;p(211,1,{},jT),U.Tc=function(e){var A;return A=new jT,A.f=4,e>1?A.c=uv(this,e-1):A.c=this,A},U.Uc=function(){return qU(this),this.b},U.Vc=function(){return yu(this)},U.Wc=function(){return qU(this),this.j},U.Xc=function(){return(this.f&4)!=0},U.Yc=function(){return(this.f&1)!=0},U.pb=function(){return((this.f&2)!=0?\"interface \":(this.f&1)!=0?\"\":\"class \")+(qU(this),this.n)},U.f=0,U.i=0;var b1t=1;p(121,1,{4:1,121:1});var q4;yE={4:1,32:1,316:1,121:1},p(27,1,{4:1,27:1}),U.fc=function(e){return new Error(e)},U.gc=function(){return this.backingJsObject},U.hc=function(){var e,A,n;for(n=(this.i==null&&(this.i=c(cE,c0,27,0,0,1)),this.i),A=c(qn,A0,1,n.length,5,1),e=0;e<n.length;e++)A[e]=n[e].backingJsObject;return A},U.ic=function(){return this.e},U.jc=function(){return this.f},U.kc=function(){RN(this,pO(this.fc(_B(this,this.f))))},U.pb=function(){return _B(this,this.jc())},U.backingJsObject=oM,U.j=!0,p(19,27,{4:1,19:1,27:1},H1),p(33,19,Tn),p(65,33,Tn,sh,XP),p(128,33,Tn,ts),p(71,128,Tn,Rr,X7,Y7),U.fc=function(e){return new TypeError(e)},lE={4:1,210:1,32:1,2:1},p(236,65,Tn,vh),p(527,1,{}),p(458,1,{},vw);var hE=0;p(459,1,{});var qn=M(1),TE=M(0),j1t=M(315),rrt=M(211),irt=M(121),R1t=M(316),cE=M(27),frt=M(19),Drt=M(33),urt=M(65),Qrt=M(128),ort=M(71),ft=M(2),Urt=M(236),Lrt=M(458),srt=M(459);p(204,1,Cf,sy),U.c=0,U.d=0;var yrt=M(204);p(122,1,{122:1}),U.xb=function(){Jk(this)},U.yb=function(e,A,n,P){},U.zb=function(e,A,n,P,r){},U.Db=function(e,A){return cb(this,e,A)},U.r=0,U.t=0,U.u=0,U.A=0,U.C=0,U.D=0,U.F=0,U.G=0,U.H=0,U.I=0,U.J=0,U.K=!1,U.M=0,U.N=0,U.O=0,U.P=0,U.Q=0,U.S=0,U.T=0,U.V=0,U.W=0,U.X=0,U.Y=0,U.Z=0;var sl,p1t=.15,M1t=.06,C1t=.6,lrt=M(122);p(144,1,{144:1},Vu),U.a=0,U.b=0,U.c=0;var hrt=M(144);p(69,1,{},h1),U.a=0,U.b=0,U.c=0,U.d=0;var Trt=M(69);p(197,1,{197:1}),U.Jb=function(e){var A,n;if(this.i==null)return null;for(A=new lA(this.i[0].a,this.i[0].b,0,0),n=1;n<this.i.length;n++)A.c>this.i[n].a?(A.b+=A.c-this.i[n].a,A.c=this.i[n].a):A.b<this.i[n].a-A.c&&(A.b=this.i[n].a-A.c),A.d>this.i[n].b?(A.a+=A.d-this.i[n].b,A.d=this.i[n].b):A.a<this.i[n].b-A.d&&(A.a=this.i[n].b-A.d);return A},U.Nb=function(e){pF(this,e)},U.pb=function(){var e;return e=new gD,Ni(e,K6+this.Lb()+'\"'+this.Kb()+J6),e.a},U.Ob=function(e,A){bk(this,e,A)},U.Pb=function(e,A){$m(this,e,A)},U.Qb=function(e,A){nj(this,e,A)},U.g=!1,U.j=!1,U.k=0,U.n=0;var crt=M(197);p(91,1,{},p9),U.a=!1,U.b=0,U.c=0,U.k=0;var wrt=M(91),Ro,z4;p(34,1,{},bA,qA),U.b=!1,U.c=0,U.d=!1,U.r=!1,U.t=0,U.v=0,U.w=0,U.G=!1,U.I=0,U.K=!1,U.L=!1,U.O=0,U.Q=0,U.T=0,U.U=0,U.Z=!1,U.jb=!1;var grt=M(34);p(273,1,{},s1),U.Rb=function(e,A){return Uj(e,A)},U.mb=function(e){return this===e};var drt=M(273);p(176,1,{176:1},r0),U.b=0,U.c=0,U.d=0;var H1t=M(176);p(274,1,{},K0),U.Rb=function(e,A){return KB(e,A)},U.mb=function(e){return this===e};var Brt=M(274);p(177,1,{177:1},x0),U.a=0,U.b=0,U.c=0;var V1t=M(177);p(101,1,{101:1,32:1},xU),U.Sb=function(e){return gs(this,e)},U.a=0,U.b=0,U.c=0;var K4=M(101);p(175,1,{175:1,32:1},oF),U.Sb=function(e){return NF(this,e)},U.a=0,U.b=0,U.c=0;var E1t=M(175);p(212,1,{212:1},Gk);var vrt=M(212);p(272,1,{},dm);var Frt=M(272);p(373,1,{},Zp),U.a=0,U.b=0,U.f=0,U.g=0,U.i=0;var krt=M(373);p(374,1,{},qe),U.Rb=function(e,A){return m5(e,A)},U.mb=function(e){return this===e};var mrt=M(374);p(28,1,{28:1,4:1,32:1},N0,Ke,pu),U.Sb=function(e){return mK(this,e)},U.mb=function(e){return hs(this,e)},U.pb=function(){var e;return e=new sD(\"0.00\"),\"[\"+Bu(e,this.a)+\", \"+Bu(e,this.b)+\", \"+Bu(e,this.c)+\"]\"},U.a=0,U.b=0,U.c=0;var q2=M(28);p(82,1,{},Qu,P3,ry),U.pb=function(){return\"DepictorTransformation Offset: \"+this.a+\",\"+this.b+\" Scaling: \"+this.c},U.a=0,U.b=0,U.c=0;var brt=M(82);p(41,1,my),U.Ub=function(){return new x8(this)},U.Vb=function(){return new dh(this.Ub())},U.add=function(e){throw At(new cD(\"Add not supported on this collection\"))},U.addAll=function(e){return cT(this,e)},U.clear=function(){var e;for(e=this.Tb();e.cd();)e.dd(),e.ed()},U.contains=function(e){return sm(this,e,!1)},U.containsAll=function(e){return oQ(this,e)},U.isEmpty=function(){return this.size()==0},U.remove=function(e){return sm(this,e,!0)},U.removeAll=function(e){return Ds(this,e)},U.retainAll=function(e){return Ok(this,e)},U.toArray=function(){return this.Wb(c(qn,A0,1,this.size(),5,1))},U.Wb=function(e){return JT(this,e)},U.pb=function(){return Rb(this)};var jrt=M(41);p(74,41,Z6),U.Ub=function(){return new x8(this)},U.addAtIndex=function(e,A){throw At(new cD(\"Add not supported on this list\"))},U.add=function(e){return this.addAtIndex(this.size(),e),!0},U.addAllAtIndex=function(e,A){var n,P,r;for(y1(A),n=!1,r=A.Tb();r.cd();)P=r.dd(),this.addAtIndex(e++,P),n=!0;return n},U.clear=function(){this.Yb(0,this.size())},U.mb=function(e){var A,n,P,r,i;if(e===this)return!0;if(!Yt(e,70)||(i=e,this.size()!=i.size()))return!1;for(r=i.Tb(),n=this.Tb();n.cd();)if(A=n.dd(),P=r.dd(),!(z1(A)===z1(P)||A!=null&&SP(A,P)))return!1;return!0},U.ob=function(){return cz(this)},U.indexOf=function(e){return Pk(this,e)},U.Tb=function(){return new rh(this)},U.lastIndexOf=function(e){var A;for(A=this.size()-1;A>-1;--A)if($8(e,this.getAtIndex(A)))return A;return-1},U.Xb=function(e){return new J3(this,e)},U.removeAtIndex=function(e){throw At(new cD(\"Remove not supported on this list\"))},U.Yb=function(e,A){var n,P;for(P=this.Xb(e),n=e;n<A;++n)P.dd(),P.ed()},U.setAtIndex=function(e,A){throw At(new cD(\"Set not supported on this list\"))},U.subList=function(e,A){return new JD(this,e,A)};var Rrt=M(74);p(20,74,by,n1,pL,Wu),U.addAtIndex=function(e,A){f8(this,e,A)},U.add=function(e){return Ft(this,e)},U.addAllAtIndex=function(e,A){return Kk(this,e,A)},U.addAll=function(e){return MP(this,e)},U.clear=function(){this.a.length=0},U.contains=function(e){return $r(this,e,0)!=-1},U.getAtIndex=function(e){return G(this,e)},U.indexOf=function(e){return $r(this,e,0)},U.isEmpty=function(){return this.a.length==0},U.Tb=function(){return new Zt(this)},U.lastIndexOf=function(e){return Vd(this,e)},U.removeAtIndex=function(e){return cA(this,e)},U.remove=function(e){return er(this,e)},U.Yb=function(e,A){gv(this,e,A)},U.setAtIndex=function(e,A){return Zr(this,e,A)},U.size=function(){return this.a.length},U.toArray=function(){return U3(this.a)},U.Wb=function(e){return Qf(this,e)};var J4=M(20);p(103,20,by,QU,Ts,Ib),U.pb=function(){return Tm(this)};var prt=M(103);p(109,1,{109:1},Zi),U.a=0,U.b=0,U.c=0,U.d=0;var Mrt=M(109);p(117,1,{},Ff),U.a=0,U.b=0,U.c=!1,U.d=0,U.f=!1,U.g=0,U.i=!1,U.j=0;var Crt=M(117);p(18,1,{18:1},It),U.pb=function(){return this.d},U.a=0,U.c=0;var wE=M(18);p(161,1,{},HF,zj,Qv,kB),U.c=0,U.d=0,U.f=0,U.i=0,U.j=0,U.n=0,U.o=!1;var Hrt=M(161);p(371,1,{},S8),U.Rb=function(e,A){return y1(e),e>(y1(A),A)?-1:(y1(e),e<(y1(A),A)?1:0)},U.mb=function(e){return this===e};var Vrt=M(371);p(90,1,{90:1,4:1},i3),U.Zb=function(e){gL(this,e)},U.$b=function(e){return this.I[e]==8},U.r=0,U.s=0,U.J=0,U.L=!1,U.M=!1,U.N=0,U.O=0,U.P=0,U.T=!1,U.U=0,U.V=0,U.W=0;var gE,a0,v9,Y4,dE,wr,Bn=24,Ert=M(90);p(114,90,{114:1,90:1,4:1}),U._b=function(e){Fp(this,e)},U.$b=function(e){return Z8(this,e)},U.f=0,U.g=0,U.i=0;var Srt=M(114);p(340,1,{},JP),U.ac=function(){return!1},U.bc=function(e){throw At(new H1(\"Unexpected request to invent coordinates. Check source code logic!\"))},U.d=0,U.e=0,U.f=0,U.i=!1;var Irt=M(340);p(52,340,{},WA),U.ac=function(){return this.b},U.bc=function(e){var A;A=new a8(this.a),A.g=new $i(78187493520),U9(A,e)},U.a=2,U.b=!1;var xrt=M(52);p(112,1,{},tg,dD),U.j=0;var Nrt=M(112);p(3,1,{3:1},u),U.a=0,U.b=0;var Ht=M(3),yl;p(245,1,{245:1,32:1},Md),U.Sb=function(e){return eY(this,e)};var Grt=M(245);p(155,1,{155:1}),U.mb=function(e){var A;if(e===this)return!0;if(!Yt(e,155))return!1;for(A=0;A<this.b.length;A++)if(this.b[A]!=e.b[A])return!1;return!0},U.a=0,U.d=0;var X4,z2,Z4,Ort=M(155);p(113,1,{},zh,j6);var qrt=M(113);p(126,1,{},Du,o7),U.a=!1,U.d=!1,U.e=!1,U.g=!1,U.i=0,U.k=!1;var zrt=M(126);p(230,1,{230:1},tu),U.a=0,U.b=!1;var Krt=M(230);p(151,1,{},M7,Qd),U.c=1;var Jrt=M(151),W4,ll=null;p(411,1,{},rM),U.pb=function(){return\"\"};var _4,$4,Yrt=M(411);p(153,1,{},gU),U.g=0;var Xrt=M(153);p(59,1,{},Gr,VD),U.c=0,U.d=0,U.p=0,U.q=0,U.r=!1,U.w=0,U.A=0,U.L=!1,U.N=0,U.P=!1;var Zrt=M(59);p(220,1,{220:1},eU),U.a=0,U.b=0,U.c=0,U.d=0;var Wrt=M(220);p(182,1,{},MU);var F9,K2,_rt=M(182);p(264,122,{122:1},vb),U.qb=function(e){var A;A='<line x1=\"'+Te(He(iA(new xe(e.a),(Qr(),ce))))+I0+'y1=\"'+Te(He(iA(new xe(e.c),ce)))+I0+'x2=\"'+Te(He(iA(new xe(e.b),ce)))+I0+'y2=\"'+Te(He(iA(new xe(e.d),ce)))+I0+A4+this.d+I0+n4+this.j+Iy,J9(this,A)},U.rb=function(e){var A,n;A=Te(He(iA(new xe(3*this.j),(Qr(),ce)))),n='<line stroke-dasharray=\"'+A+\",\"+A+I0+'x1=\"'+Te(He(iA(new xe(e.a),ce)))+I0+'y1=\"'+Te(He(iA(new xe(e.c),ce)))+I0+'x2=\"'+Te(He(iA(new xe(e.b),ce)))+I0+'y2=\"'+Te(He(iA(new xe(e.d),ce)))+I0+A4+this.d+I0+\"stroke-width:\"+this.j+Iy,J9(this,n)},U.sb=function(e){var A,n;for(n=new bn('<polygon points=\"'),A=0;A<e.a;A++)rd(n,E1(w.Math.round(e.b[A]))),n.a+=\",\",rd(n,E1(w.Math.round(e.c[A]))),n.a+=\" \";q(n,'\" fill=\"'+this.d+I0+A4+this.d+I0+n4+this.j+Iy),J9(this,n.a)},U.tb=function(e,A,n){var P,r,i,f;i=(P=(f=Hb(this.e,e),new w3(f)).b,P),r='<text x=\"'+Te(He(iA(new xe(A-i/2),(Qr(),ce))))+I0+'y=\"'+Te(He(iA(new xe(n+this.k/3),ce)))+I0+'stroke=\"none\" font-size=\"'+this.e.b+I0+'fill=\"'+df(this.d)+'\">'+df(e)+\"</text>\",J9(this,r)},U.ub=function(e,A,n){var P;P='<circle cx=\"'+Te(He(iA(new xe(e+n/2),(Qr(),ce))))+I0+'cy=\"'+Te(He(iA(new xe(A+n/2),ce)))+I0+'r=\"'+Te(He(iA(new xe(n/2),ce)))+I0+'fill=\"'+this.d+Iy,J9(this,P)},U.vb=function(e){var A;return(A=Hb(this.e,e),new w3(A)).b},U.wb=function(){return this.k},U.yb=function(e,A,n,P){var r,i;r=M1(this.L,e),i='<circle id=\"'+df(this.g!=null?this.g:\"mol\"+J2)+\":Atom:\"+e+I0+dM+(r==0?\"\":'data-atom-map-no=\"'+r+I0)+'cx=\"'+Te(He(iA(new xe(n),(Qr(),ce))))+I0+'cy=\"'+Te(He(iA(new xe(P),ce)))+I0+'r=\"8'+I0+BM,Ft(this.a,i)},U.zb=function(e,A,n,P,r){var i;i='<line id=\"'+df(this.g!=null?this.g:\"mol\"+J2)+\":Bond:\"+e+I0+dM+'x1=\"'+Te(He(iA(new xe(A),(Qr(),ce))))+I0+'y1=\"'+Te(He(iA(new xe(n),ce)))+I0+'x2=\"'+Te(He(iA(new xe(P),ce)))+I0+'y2=\"'+Te(He(iA(new xe(r),ce)))+I0+n4+8+I0+BM,Ft(this.b,i)},U.Ab=function(e){this.j=$9(E1(w.Math.round(100*w.Math.max(e,1))))/100},U.Bb=function(e){this.d=\"rgb(\"+((e&QP)>>16)+\",\"+((e&DP)>>8)+\",\"+(e&255)+\")\"},U.Cb=function(e){this.k!=e&&(this.k=e,this.e=new h3(e))},U.Db=function(e,A){return this.n=Ot(E1(w.Math.round(e.b))),this.f=Ot(E1(w.Math.round(e.a))),cb(this,e,A)},U.pb=function(){return pp(this)},U.f=0,U.i=!1,U.j=0,U.k=0,U.n=0;var J2=0,$rt=M(264);p(186,1,{186:1},K3),U.a=0,U.b=0,U.e=!1,U.f=!1,U.g=0;var art=M(186);p(291,1,{},Ck),U.a=0,U.c=0,U.d=0,U.e=0,U.g=0,U.i=!1,U.j=!1,U.k=0,U.o=0,U.p=!1,U.r=!1;var t9t=M(291);p(384,1,{},U7),U.a=0,U.b=0,U.c=!1,U.d=!1;var e9t=M(384);p(385,1,{},aw),U.pb=function(){return\"{\"+this.c+\"-\"+this.b+\"}\"},U.a=!1,U.b=0,U.c=0,U.d=0;var A9t=M(385);p(132,1,{},p7,dQ),U.b=0,U.c=0,U.d=0,U.e=!1,U.i=!1,U.j=0,U.n=0,U.o=!1,U.p=!1,U.q=0;var n9t=M(132);p(221,1,{221:1,32:1},eg),U.Sb=function(e){return Zh(e.b,this.b)},U.a=0,U.b=0;var P9t=M(221);p(222,1,{222:1},Ab),U.a=0,U.b=0,U.c=!1,U.d=!1;var r9t=M(222);p(184,1,{184:1},f3),U.pb=function(){return\"[\"+(this.a==so?\"h\":this.a==Et?\"lp\":Vi(this.c.f.k,this.a))+this.b+\"]\"},U.a=0,U.b=0;var i9t=M(184);p(102,1,RM,ou),U.cc=function(e){return T5(this,e)};var S1t=M(102);p(26,114,pM,_A,SA,Wr),U.Zb=function(e){EU(this,e)},U._b=function(e){ut(this,e)},U.c=!1;var gr=M(26);p(246,1,{},k5),U.j=0;var I1t=xy,f9t=M(246);p(170,1,{170:1,32:1},ls),U.Sb=function(e){return ms(this.a,e.a)};var D9t=M(170);p(95,197,{197:1,95:1},dU,uR),U.Eb=function(e,A){return this.a=!!this.b&&W9(this.b,e,A),this.a},U.Fb=function(){this.a=!1},U.Gb=function(){var e;return e=new dU,Ad(e,this.e,this.c,this.d),ld(e,this.i[0].a,this.i[0].b),e.g=this.g,e},U.Hb=function(e,A){return!!this.b&&W9(this.b,e,A)},U.Ib=function(e,A){var n,P,r,i;for(P=A?A.c*this.c:this.c,oL(e,Bt(w.Math.round(P)),(this.d&1)!=0,(this.d&2)!=0),nA(e,this.g?GP:(i=e.Lc(),i.isDarkBackground()?-1:On)),r=$T(this),this.b=u5(this,e,r),A&&Yu(A,this.b),n=0;n<r.a.length;n++)C3(e,this.b.c,this.b.d+1+P*5/6+P*yo*n,(ee(n,r.a.length),r.a[n]))},U.Jb=function(e){var A;return A=$T(this),u5(this,e,A)},U.Kb=function(){var e;return e=new C0,q(e,' text=\"'+mZ(this.e)+'\"'),q(e,' x=\"'+this.i[0].a+'\"'),q(e,' y=\"'+this.i[0].b+'\"'),this.c!=9&&q(e,' size=\"'+He(new mB(this.c,new hB))+'\"'),this.d!=0&&q(e,' style=\"'+this.d+'\"'),e.a},U.Lb=function(){return\"text\"},U.Mb=function(e){var A,n;A=(n=$T(this),u5(this,e,n)),nA(e,KD(e)),q3(e,A.c,A.d,A.b,A.a)},U.Nb=function(e){pF(this,e),this.c*=e},U.Pb=function(e,A){$m(this,e,A),this.c=this.f*e},U.Qb=function(e,A){nj(this,e,A),this.f=this.c},U.a=!1,U.c=0,U.d=0,U.f=0;var u9t=M(95);p(290,102,RM,qB),U.cc=function(e){var A;return A=T5(this,e),A==-1?-1:G(this.a,A).a};var Q9t=M(290);p(267,1,{},$w);var o9t=M(267);p(388,1,{},PM);var U9t=M(388);p(387,1,{},rp);var BE,po,a4,tc,Mo,ec=!1,L9t=M(387);p(67,1,{67:1,32:1},BD),U.Sb=function(e){return KF(this,e),Ym(this.q,e.q)},U.n=0;var s9t=M(67);p(376,1,{},Yg),U.a=0,U.b=0;var hl,LP,y9t=M(376);p(261,1,{261:1,32:1},lg),U.Sb=function(e){return Ym(this,e)},U.pb=function(){var e,A;for(A=new C0,e=0;e<this.b.length;e++)A.a+=e==0?\"Torsions: \":\", \",q(A,(A9(),Q9(this.b[e],3)+\"(\"+Bt(w.Math.round(this.a[e]+.5))+\")\"));return A.a};var l9t=M(261);p(259,1,{},ov,fv);var vE,Tl,h9t=M(259);p(255,1,{},YT),U.a=0;var FE,T9t=M(255);p(198,1,{198:1},t7,tp),U.e=0;var c9t=M(198);p(256,1,{},b6);var w9t=M(256),Xf,JA,Ac=0,nc=0,Pc=0,rc=0,ic=0,Co=0,fc=0,Dc=0,uc=0,Qc=0,Ho=0;p(76,1,{},a8),U.a=!1,U.e=0;var Vo,g9t=M(76);p(336,20,by,v7),U.add=function(e){return CP(this,e)};var d9t=M(336);p(338,1,{},Au),U.Rb=function(e,A){var n;return JO((n=e,n))},U.mb=function(e){return this===e};var B9t=M(338);p(339,1,{},nu),U.Rb=function(e,A){var n;return YO((n=e,n))},U.mb=function(e){return this===e};var v9t=M(339);p(337,1,{},Pu),U.Rb=function(e,A){var n,P;return n=w.Math.abs(e.b),P=w.Math.abs(A.b),n<P?-1:n>P?1:0},U.mb=function(e){return this===e};var F9t=M(337);p(106,1,{106:1},Mj,OQ);var kE=M(106);p(43,1,{43:1},$P,rQ),U.a=0,U.b=0;var ci=M(43);p(252,1,{},Z3);var k9t=M(252);p(201,1,{201:1},D3),U.a=0,U.b=0;var m9t=M(201);p(372,20,by,ub);var mE,b9t=M(372);p(48,1,{48:1},VP,f6),U.c=0,U.i=!1;var oc=M(48);p(251,1,{251:1},Gg),U.a=0,U.c=!1;var j9t=M(251);p(282,1,{}),U.d=0,U.f=!1,U.j=0,U.k=0;var R9t=M(282);p(366,1,Gf,Qm),U.dc=function(e,A,n,P){var r,i,f;return P&&(X(this.f,this.a)==1||X(this.f,this.c)==1)?0:(f=Jm(new k0(e,this.b,this.a),new k0(e,this.b,this.c)),r=f*Of-this.g,i=this.d?143.9325*this.e*(1+w.Math.cos(f)):jC*this.e*r*r*(1+-.006981317*r),i)},U.ec=function(e,A){var n,P,r,i,f,D,Q,o,L,s;Q=xn(new k0(e,this.b,this.a)),o=xn(new k0(e,this.b,this.c)),f=pn(new k0(e,this.b,this.a)),D=pn(new k0(e,this.b,this.c)),P=(Q.a*o.a+Q.b*o.b+Q.c*o.c)/(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*w.Math.sqrt(o.a*o.a+o.b*o.b+o.c*o.c)),s=1-P*P,L=Bo,s>0&&(L=w.Math.sqrt(s)),n=Of*w.Math.acos(P)-this.g,i=OP*this.e*n*(1+-.0104719755*n),this.d&&(i=-143.9325*this.e*L),r=B(d(Ut,1),Tt,6,15,[1/f*(o.a-P*Q.a),1/f*(o.b-P*Q.b),1/f*(o.c-P*Q.c),1/D*(Q.a-P*o.a),1/D*(Q.b-P*o.b),1/D*(Q.c-P*o.c)]),A[3*this.a]+=i*r[0]/-L,A[3*this.a+1]+=i*r[1]/-L,A[3*this.a+2]+=i*r[2]/-L,A[3*this.b]+=i*(-r[0]-r[3])/-L,A[3*this.b+1]+=i*(-r[1]-r[4])/-L,A[3*this.b+2]+=i*(-r[2]-r[5])/-L,A[3*this.c]+=i*r[3]/-L,A[3*this.c+1]+=i*r[4]/-L,A[3*this.c+2]+=i*r[5]/-L},U.a=0,U.b=0,U.c=0,U.d=!1,U.e=0,U.g=0;var p9t=M(366);p(188,33,{188:1,4:1,19:1,33:1,27:1},N7);var M9t=M(188);p(342,33,Tn,F7);var C9t=M(342);p(242,1,Gf,zB),U.dc=function(e,A,n,P){var r,i,f;return P&&(X(this.d,this.a)==1||X(this.d,this.b)==1)?0:(i=uk(new Wi(e,this.a),new Wi(e,this.b)),r=(i-this.e)*(i-this.e),f=71.96625*this.c*r*(1+-2*(i-this.e)+2.3333333333333335*r),f)},U.ec=function(e,A){var n,P,r,i;if(P=uk(new Wi(e,this.a),new Wi(e,this.b)),r=P-this.e,n=143.9325*this.c*r*(1+-3*r+4.666666666666667*r*r),P>0)for(i=0;i<3;i++)A[3*this.a+i]+=n*(e[3*this.a+i]-e[3*this.b+i])/P,A[3*this.b+i]-=n*(e[3*this.a+i]-e[3*this.b+i])/P},U.a=0,U.b=0,U.c=0,U.e=0;var H9t=M(242);p(367,1,Gf,VF),U.dc=function(e,A,n,P){var r,i,f;return P&&(X(this.e,this.a)==1||X(this.e,this.b)==1)?0:(i=pn(new k0(e,this.a,this.b)),r=i+.05,this.d&&(r*=r),f=332.0716*this.c/r*(this.f==(P9(),wi)?.75:1),f)},U.ec=function(e,A){var n,P,r,i,f;for(i=pn(new k0(e,this.a,this.b)),n=i+.05,n*=this.d?n*n:n,P=-332.0716*(this.d?2:1)*this.c/n*(this.f==(P9(),wi)?.75:1),f=0;f<3;f++)r=.02,i>0&&(r=P*(e[3*this.a+f]-e[3*this.b+f])/i),A[3*this.a+f]+=r,A[3*this.b+f]-=r},U.a=0,U.b=0,U.c=0,U.d=!1;var V9t=M(367);p(180,282,{},iB,y6);var cl,E9t=M(180);p(283,26,pM,zR);var S9t=M(283);p(196,1,Gf,es),U.dc=function(e,A,n,P){var r,i,f,D,Q,o;return P&&(X(this.f,this.a)==1||X(this.f,this.b)==1||X(this.f,this.c)==1)?0:(D=xn(new k0(e,this.d,this.a)),Q=xn(new k0(e,this.d,this.b)),o=xn(new k0(e,this.d,this.c)),f=xn(new BP(D.b*Q.c-D.c*Q.b,D.c*Q.a-D.a*Q.c,D.a*Q.b-D.b*Q.a)),r=Of*w.Math.asin(f.a*o.a+f.b*o.b+f.c*o.c),i=jC*this.e*r*r,i)},U.ec=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x,N;for(y=new k0(e,this.d,this.a),l=new k0(e,this.d,this.b),h=new k0(e,this.d,this.c),D=w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c),Q=w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c),o=w.Math.sqrt(h.a*h.a+h.b*h.b+h.c*h.c),y=xn(y),l=xn(l),h=xn(h),s=xn(fT(new BP(-y.a,-y.b,-y.c),l)),T=h.a*s.a+h.b*s.b+h.c*s.c,r=1-T*T,P=w.Math.max(r>0?w.Math.sqrt(r):0,Bo),n=Of*w.Math.asin(T),i=y.a*l.a+y.b*l.b+y.c*l.c,k=w.Math.max(1-i*i,Bo),g=w.Math.max(k>0?w.Math.sqrt(k):0,Bo),f=OP*this.e*n,v=new BP(h.b*l.c-h.c*l.b,h.c*l.a-h.a*l.c,h.a*l.b-h.b*l.a),b=new BP(y.b*h.c-y.c*h.b,y.c*h.a-y.a*h.c,y.a*h.b-y.b*h.a),j=new BP(l.b*y.c-l.c*y.b,l.c*y.a-l.a*y.c,l.a*y.b-l.b*y.a),R=P*g,C=T/(P*k),S=B(d(Ut,1),Tt,6,15,[(v.a/R-(y.a-l.a*i)*C)/D,(v.b/R-(y.b-l.b*i)*C)/D,(v.c/R-(y.c-l.c*i)*C)/D]),x=B(d(Ut,1),Tt,6,15,[(b.a/R-(l.a-y.a*i)*C)/Q,(b.b/R-(l.b-y.b*i)*C)/Q,(b.c/R-(l.c-y.c*i)*C)/Q]),N=B(d(Ut,1),Tt,6,15,[(j.a/R-h.a*T/P)/o,(j.b/R-h.b*T/P)/o,(j.c/R-h.c*T/P)/o]),L=0;L<3;L++)A[3*this.a+L]+=f*S[L],A[3*this.d+L]+=-f*(S[L]+x[L]+N[L]),A[3*this.b+L]+=f*x[L],A[3*this.c+L]+=f*N[L]},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0;var I9t=M(196);p(55,1,{4:1,32:1,55:1}),U.Sb=function(e){return this.b-e.b},U.compareTo=function(e){return this.b-e.b},U.equals=function(e){return this===e},U.mb=function(t){return this.equals(t)},U.hashCode=function(){return jD(this)},U.ob=function(){return this.hashCode()},U.name=function(){return this.a!=null?this.a:\"\"+this.b},U.ordinal=function(){return this.b},U.toString=function(){return this.a!=null?this.a:\"\"+this.b},U.pb=function(){return this.toString()},U.b=0;var x9t=M(55),bE=Yr(null,DG);p(284,1,{},rR);var N9t=M(284);p(108,55,{108:1,4:1,32:1,55:1},vD);var wi,Uc,Lc,sc,Y2,x1t=Yr(108,bO);p(99,1,{99:1,32:1},zi),U.Sb=function(e){return Xz(this,e)},U.mb=function(e){var A;return e===this?!0:Yt(e,99)?(A=e,this.a==A.a&&this.b==A.b):!1},U.ob=function(){return this.a^this.b},U.pb=function(){return this.a+\",\"+this.b},U.a=0,U.b=0;var G9t=M(99);p(368,1,Gf,ob),U.dc=function(e,A,n,P){var r,i,f,D,Q;return P&&(X(this.f,this.a)==1||X(this.f,this.c)==1)?0:(r=pn(new k0(e,this.b,this.a)),i=pn(new k0(e,this.b,this.c)),Q=Jm(new k0(e,this.b,this.a),new k0(e,this.b,this.c)),D=OP*(Q*Of-this.j),f=D*(r-this.g)*this.d+D*(i-this.i)*this.e,f)},U.ec=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;L=pn(new k0(e,this.b,this.a)),s=pn(new k0(e,this.b,this.c)),l=xn(new k0(e,this.b,this.a)),h=xn(new k0(e,this.b,this.c)),P=l.a*h.a+l.b*h.b+l.c*h.c,g=1-P*P,T=w.Math.max(g>0?w.Math.sqrt(g):0,Bo),n=Of*w.Math.acos(P)-this.j,y=Of*(this.d*(L-this.g)+this.e*(s-this.i)),r=1/L*(h.a-P*l.a),i=1/L*(h.b-P*l.b),f=1/L*(h.c-P*l.c),D=1/s*(l.a-P*h.a),Q=1/s*(l.b-P*h.b),o=1/s*(l.c-P*h.c),A[3*this.a]+=OP*(l.a*this.d*n+r/-T*y),A[3*this.a+1]+=OP*(l.b*this.d*n+i/-T*y),A[3*this.a+2]+=OP*(l.c*this.d*n+f/-T*y),A[3*this.b]+=OP*((-l.a*this.d-h.a*this.e)*n+(-r-D)/-T*y),A[3*this.b+1]+=OP*((-l.b*this.d-h.b*this.e)*n+(-i-Q)/-T*y),A[3*this.b+2]+=OP*((-l.c*this.d-h.c*this.e)*n+(-f-o)/-T*y),A[3*this.c]+=OP*(h.a*this.e*n+D/-T*y),A[3*this.c+1]+=OP*(h.b*this.e*n+Q/-T*y),A[3*this.c+2]+=OP*(h.c*this.e*n+o/-T*y)},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.g=0,U.i=0,U.j=0;var O9t=M(368);p(157,1,{157:1},Ss);var q9t=M(157);p(369,1,Gf,Zk),U.dc=function(e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;return Q=new k0(e,this.a,this.b),o=new k0(e,this.c,this.b),L=new k0(e,this.b,this.c),s=new k0(e,this.d,this.c),y=new BP(Q.b*o.c-Q.c*o.b,Q.c*o.a-Q.a*o.c,Q.a*o.b-Q.b*o.a),l=new BP(L.b*s.c-L.c*s.b,L.c*s.a-L.a*s.c,L.a*s.b-L.b*s.a),f=(y.a*l.a+y.b*l.b+y.c*l.c)/(w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c)*w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c)),r=2*f*f-1,i=f*(2*r-1),D=.5*(this.e*(1+f)+this.f*(1-r)+this.g*(1+i)),D},U.ec=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y;f=B(d(jE,1),A0,22,0,[new k0(e,this.b,this.a),new k0(e,this.b,this.c),new k0(e,this.c,this.b),new k0(e,this.c,this.d)]),y=B(d(jE,1),A0,22,0,[fT(f[0],f[1]),fT(f[2],f[3])]),P=B(d(Ut,1),Tt,6,15,[pn(y[0]),pn(y[1])]),!(w.Math.abs(P[0])<vo||w.Math.abs(P[1])<vo)&&(y[0]=xn(y[0]),y[1]=xn(y[1]),n=y[0].a*y[1].a+y[0].b*y[1].b+y[0].c*y[1].c,L=1-n*n,o=L>0?w.Math.sqrt(L):0,D=2*o*n,Q=3*o-4*o*L,i=.5*(-this.e*o+2*this.f*D-3*this.g*Q),s=-i*(w.Math.abs(o)<vo?1/n:1/o),r=B(d(Ut,1),Tt,6,15,[1/P[0]*(y[1].a-n*y[0].a),1/P[0]*(y[1].b-n*y[0].b),1/P[0]*(y[1].c-n*y[0].c),1/P[1]*(y[0].a-n*y[1].a),1/P[1]*(y[0].b-n*y[1].b),1/P[1]*(y[0].c-n*y[1].c)]),A[3*this.a]+=s*(r[2]*f[1].b-r[1]*f[1].c),A[3*this.a+1]+=s*(r[0]*f[1].c-r[2]*f[1].a),A[3*this.a+2]+=s*(r[1]*f[1].a-r[0]*f[1].b),A[3*this.b]+=s*(r[1]*(f[1].c-f[0].c)+r[2]*(f[0].b-f[1].b)+r[4]*-f[3].c+r[5]*f[3].b),A[3*this.b+1]+=s*(r[0]*(f[0].c-f[1].c)+r[2]*(f[1].a-f[0].a)+r[3]*f[3].c+r[5]*-f[3].a),A[3*this.b+2]+=s*(r[0]*(f[1].b-f[0].b)+r[1]*(f[0].a-f[1].a)+r[3]*-f[3].b+r[4]*f[3].a),A[3*this.c]+=s*(r[1]*f[0].c+r[2]*-f[0].b+r[4]*(f[3].c-f[2].c)+r[5]*(f[2].b-f[3].b)),A[3*this.c+1]+=s*(r[0]*-f[0].c+r[2]*f[0].a+r[3]*(f[2].c-f[3].c)+r[5]*(f[3].a-f[2].a)),A[3*this.c+2]+=s*(r[0]*f[0].b+r[1]*-f[0].a+r[3]*(f[3].b-f[2].b)+r[4]*(f[2].a-f[3].a)),A[3*this.d]+=s*(r[4]*f[2].c-r[5]*f[2].b),A[3*this.d+1]+=s*(r[5]*f[2].a-r[3]*f[2].c),A[3*this.d+2]+=s*(r[3]*f[2].b-r[4]*f[2].a))},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0;var z9t=M(369);p(370,1,Gf,ZR),U.dc=function(e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;return P&&(X(this.g,this.a)==1||X(this.g,this.c)==1)?0:(Q=pn(new k0(e,this.a,this.c)),o=Q*Q,L=o*o*o*Q,r=1.07*this.i/(Q+NC*this.i),i=r*r,f=i*i*i*r,y=this.i*this.i,l=y*y*y*this.i,D=1.12*l/(L+GC*l)-2,s=f*D*this.j,s)},U.ec=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(r=pn(new k0(e,this.a,this.c)),f=r/this.i,D=f*f,Q=D*D*D,o=Q*f,L=o+GC,s=1.07/(f+1.07-1),y=s*s,l=y*y*y*s,n=this.j/this.i*l*(OC*Q/(L*L)+(OC/L+14)/(f+NC)),i=0;i<3;i++)P=.01*this.i,r>0&&(P=n*(e[3*this.a+i]-e[3*this.c+i])/r),A[3*this.a+i]+=P,A[3*this.c+i]-=P},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.i=0,U.j=0;var K9t=M(370);p(22,1,{22:1},BP,I3,p3,Wi,k0),U.mb=function(e){var A;return e===this?!0:Yt(e,22)?(A=e,w.Math.abs(this.a-A.a)<.01&&w.Math.abs(this.b-A.b)<.01&&w.Math.abs(this.c-A.c)<.01):!1},U.ob=function(){return Bt(this.a)+Bt(this.b)+Bt(this.c)},U.a=0,U.b=0,U.c=0;var jE=M(22);p(391,1,{},AF),U.lc=function(e,A){return _n(this.b[e][A])},U.mc=function(){return this.b.length};var J9t=M(391);p(383,1,{},Lv),U.lc=function(e,A){return this.a[e][A]},U.mc=function(){return this.a.length};var Y9t=M(383);p(398,1,{},sv),U.lc=function(e,A){return _n(this.a[e][A])},U.mc=function(){return this.a.length};var X9t=M(398);p(394,1,{},eF),U.lc=function(e,A){return _n(this.b[e][A])},U.mc=function(){return this.b.length};var Z9t=M(394);p(392,1,{},Pm);var W9t=M(392);p(200,1,{},rU),U.lc=function(e,A){return _n(this.a.a[e][A])},U.mc=function(){return this.a.a.length};var _9t=M(200);p(399,1,{},bv),U.lc=function(e,A){return _n(this.a[e][A])},U.mc=function(){return this.a.length};var $9t=M(399);p(401,1,{},Uv);var a9t=M(401);p(400,1,{},yv),U.lc=function(e,A){return _n(this.a[e][A])},U.mc=function(){return this.a.length};var tit=M(400);p(402,1,{},vF),U.lc=function(e,A){return _n(this.a[e][A])},U.mc=function(){return this.a.length};var eit=M(402);p(393,1,{},nd),U.lc=function(e,A){return _n(this.b[e][A])},U.mc=function(){return this.b.length};var Ait=M(393);p(395,1,{},tF),U.lc=function(e,A){return _n(this.b[e][A])},U.mc=function(){return this.b.length};var nit=M(395);p(396,1,{},Pd),U.lc=function(e,A){return _n(this.b[e][A])},U.mc=function(){return this.b.length};var Pit=M(396);p(51,1,{},IU,Xn,gF),U.pb=function(){return this.a+\",\"+this.b+\",\"+this.c},U.a=0,U.b=0,U.c=0;var rit=M(51);p(397,1,{},Gv),U.lc=function(e,A){return _n(this.a[e][A])},U.mc=function(){return this.a.length};var iit=M(397);p(439,1,{});var fit=M(439);p(287,1,{},vR),U.a=null;var Zf,Dit=M(287);p(288,1,{},JR),U.a=null;var R8,uit=M(288);p(289,439,{},uF),U.a=!1,U.e=0;var RE,Qit=M(289);p(217,1,{},G7),U.b=!1,U.c=!1;var oit=M(217);p(285,1,{},ru),U.Rb=function(e,A){return Nq(e,A)},U.mb=function(e){return this===e};var Uit=M(285);p(218,1,{},pT);var pE,yc,Wf,Lit=M(218);p(280,1,{},nm);var gi,wl=!1,sit=M(280);p(281,1,{},$j);var yit=M(281);p(241,1,{241:1},hg),U.b=0;var lit=M(241);p(45,1,{45:1},ae),U.b=0;var hit=M(45);p(131,1,{},LD);var Tit=M(131),ME,qP;p(286,1,{});var cit=M(286),gl,_f;p(292,1,{},lp);var CE,Eo,dr,dl=!1,Br,$f,wit=M(292);p(49,1,Cf,U8,Ks,qh,OT),U.c=!1,U.d=0;var git=M(49);p(64,197,{197:1,64:1,4:1},_D,np),U.Eb=function(e,A){return this.a=Zj(this,e,A),this.a!=0},U.Fb=function(){this.a=0},U.Gb=function(){var e;return e=new _D,e.i[0].a=this.i[0].a,e.i[0].b=this.i[0].b,e.i[1].a=this.i[1].a,e.i[1].b=this.i[1].b,e.g=this.g,e},U.Hb=function(e,A){return Zj(this,e,A)!=0},U.Ib=function(e,A){var n,P,r,i,f,D,Q;nA(e,this.g?$s(QP,v3(e)):xB(e)),i=A?W1(A,this.i[0].a):this.i[0].a,D=A?Z1(A,this.i[0].b):this.i[0].b,f=A?W1(A,this.i[1].a):this.i[1].a,Q=A?Z1(A,this.i[1].b):this.i[1].b,n=f-i,P=Q-D,nL(e,w.Math.max(1,.019999999552965164*w.Math.sqrt(n*n+P*P))),Z9(e,i,D,f,Q),r=new WD(4),Ie(r,f+n/40,Q+P/40),Ie(r,f-n/5+P/10,Q-P/5-n/10),Ie(r,f-n/20,Q-P/20),Ie(r,f-n/5-P/10,Q-P/5+n/10),AL(e,new uD(r))},U.Jb=function(e){var A,n,P,r,i,f;return f=FT(this),i=w.Math.max(f/8,3),A=pA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),P=w.Math.abs(i*w.Math.cos(A)),r=w.Math.abs(i*w.Math.sin(A)),n=new iD,this.i[0].a<this.i[1].a?(n.c=this.i[0].a-P,n.b=this.i[1].a-this.i[0].a+2*P):(n.c=this.i[1].a-P,n.b=this.i[0].a-this.i[1].a+2*P),this.i[0].b<this.i[1].b?(n.d=this.i[0].b-r,n.a=this.i[1].b-this.i[0].b+2*r):(n.d=this.i[1].b-r,n.a=this.i[0].b-this.i[1].b+2*r),n},U.Kb=function(){var e;return e=new C0,q(e,' x1=\"'+this.i[0].a+'\"'),q(e,' y1=\"'+this.i[0].b+'\"'),q(e,' x2=\"'+this.i[1].a+'\"'),q(e,' y2=\"'+this.i[1].b+'\"'),e.a},U.Lb=function(){return\"arrow\"},U.Mb=function(e){var A,n,P,r,i,f;switch(nA(e,KD(e)),this.a){case 1:yL(e,this.i[0].a-8,this.i[0].b-8,16);break;case 2:yL(e,this.i[1].a-8,this.i[1].b-8,16);break;case 3:i=FT(this),r=w.Math.max(i/8,3),A=pA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),n=r*w.Math.cos(A),P=-r*w.Math.sin(A),f=new WD(4),Ie(f,this.i[0].a+n,this.i[0].b+P),Ie(f,this.i[1].a+n,this.i[1].b+P),Ie(f,this.i[1].a-n,this.i[1].b-P),Ie(f,this.i[0].a-n,this.i[0].b-P),AL(e,new uD(f))}},U.Ob=function(e,A){switch(this.a){case 1:this.i[0].a=this.o[0]+e-this.k,this.i[0].b=this.p[0]+A-this.n;break;case 2:this.i[1].a=this.o[1]+e-this.k,this.i[1].b=this.p[1]+A-this.n;break;default:bk(this,e,A)}},U.a=0;var dit=M(64);p(219,1,{},O7),U.a=!1,U.b=!1,U.i=0,U.j=0,U.q=0,U.r=!1,U.t=!1;var Bit=M(219);p(293,1,{},ep);var vit=M(293);p(185,1,{185:1,32:1},p5),U.Sb=function(e){return Kq(this,e)},U.mb=function(e){return this.d==e.d&&this.e==e.e},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0;var Fit=M(185);p(98,55,{98:1,4:1,32:1,55:1},Ei);var Bl,vl,Fl,So,kl,ml,N1t=Yr(98,jO);p(203,1,{203:1},$p),U.b=!1,U.e=0;var G1t=M(203);p(149,1,{149:1,32:1},os),U.Sb=function(e){return Zz(this,e)},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0;var O1t=M(149);p(307,1,{},V7),U.b=0,U.c=0;var Io,bl,kit=M(307);p(206,1,{},BU);var mit=M(206);p(422,1,{},YR),U.b=0,U.g=0;var bit=M(422);p(205,1,{205:1},nT),U.a=0;var jit=M(205);p(124,1,{124:1,32:1},FD),U.Sb=function(e){return this.b<e.b?-1:this.b>e.b?1:this.a<e.a?-1:this.a>e.a?1:0},U.a=0,U.b=0;var Rit=M(124);p(421,1,{},Fd);var pit=M(421);p(173,1,{173:1},eh),U.b=0,U.c=0,U.d=!1;var q1t=M(173);p(420,1,{},_R),U.a=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0,U.n=0,U.o=0,U.p=!1,U.q=0,U.r=0,U.s=0,U.K=0;var Mit=M(420);p(418,1,{},lj);var Cit=M(418);p(417,1,{},eu),U.a=0,U.b=0,U.c=0,U.q=0;var Hit=M(417);p(300,1,qf,gm),U.nc=function(e){OZ(this,e)},U.a=0,U.B=!1,U.C=0;var HE,VE,di,Vit=M(300);p(386,1,{},Tg),U.oc=function(){VI(this.a,this.b)};var Eit=M(386);p(302,1,qf,pm),U.nc=function(e){RZ(this,e)},U.a=0,U.t=0,U.v=!1;var Sit=M(302);p(412,1,{},cg),U.oc=function(){EI(this.a,this.b)};var Iit=M(412);p(225,1,qf,om,Bb),U.nc=function(e){WJ(this,e)},U.a=0,U.f=!1,U.g=0,U.i=0,U.j=0,U.k=0;var EE,xit=M(225);p(413,1,{},wg),U.oc=function(){SI(this.a,this.b)};var Nit=M(413);p(346,1,{});var Git=M(346);p(165,346,{}),U.j=0;var Oit=M(165);p(24,165,{24:1},x1),U.a=!1;var qit=M(24);p(294,1,qf,pR),U.nc=function(e){var A;Yt(e,140)?Dtt((A=this,A)):Yt(e,159)?c1t(this,e):Yt(e,137)&&o1t(this,e)},U.a=!1,U.b=!1,U.c=0,U.d=!1,U.e=0,U.f=0,U.g=!1,U.q=0,U.s=0,U.t=0,U.u=0,U.w=0,U.B=0,U.C=0,U.D=0,U.F=0,U.H=0,U.J=0,U.K=0,U.N=0,U.O=!1,U.T=0,U.U=0,U.W=!1,U.X=0,U.Y=0,U.Z=!1,U.$=0,U.ab=0,U.eb=0,U.fb=0,U.hb=0,U.ib=0,U.kb=0,U.lb=0;var xo=!0,zit=M(294);p(301,1,{},e7);var Kit=M(301);p(303,1,{},A7);var Jit=M(303);p(304,1,{},Kd),U.b=0;var Yit=M(304);p(305,1,{},AU),U.oc=function(){};var Xit=M(305);p(306,1,{},n7),U.oc=function(){NB(this.a)};var Zit=M(306);p(309,1,{},Jd);var Wit=M(309);p(310,1,{268:1},Yd),U.pc=function(){Xq(this.a,this.c,this.b)},U.c=0;var _it=M(310);p(311,1,{},gg),U.Rb=function(e,A){return pK(this.a,this.b,e,A)},U.mb=function(e){return this===e};var $it=M(311);p(312,1,qf,Hj),U.nc=function(e){s6(this,e)},U.b=0,U.d=0,U.e=0,U.f=0,U.j=0,U.k=0,U.o=0;var p8=0,vn=0,ait=M(312);p(314,1,{},dg),U.oc=function(){NI(this.a,this.b)},U.b=0;var tft=M(314);p(308,1,qf,Ev),U.nc=function(e){VX(this,e)};var SE,jl,IE,eft=M(308);p(419,1,{},P7),U.oc=function(){ox(this.a)};var Aft=M(419);p(140,165,{140:1},KU),U.a=0;var nft=M(140),xE,NE,af,GE;p(105,122,{122:1,105:1},mu),U.qb=function(e){Z9(this.B,e.a,e.c,e.b,e.d)},U.rb=function(e){mO(this.B,e.a,e.c,e.b,e.d)},U.sb=function(e){AL(this.B,new uD(e))},U.tb=function(e,A,n){z3(this.B,A,n,e)},U.ub=function(e,A,n){yL(this.B,e,A,n)},U.vb=function(e){return aL(this.B,e).b},U.wb=function(){return this.b},U.xb=function(){Jk(this),this.a=1},U.Ab=function(e){this.a=e,nL(this.B,this.a)},U.Bb=function(e){nA(this.B,e)},U.Cb=function(e){this.b=e,this.B&&oL(this.B,e,!1,!1)},U.a=0,U.b=0;var OE=M(105);p(226,1,{});var Pft=M(226);p(159,165,{159:1},OB),U.a=!1,U.b=0;var rft=M(159);p(137,165,{137:1},ST),U.pb=function(){return qE[this.j]+\" x:\"+this.g+\" y:\"+this.i+\" button:\"+this.b+\" clicks:\"+this.c+(this.f?\" shift\":\"\")+(this.d?\" ctrl\":\"\")+(this.a?\" alt\":\"\")+\" isPopup:\"+(this.e?\"y\":\"n\")},U.a=!1,U.b=0,U.c=0,U.d=!1,U.e=!1,U.f=!1,U.g=0,U.i=0;var qE,ift=M(137);p(56,1,{56:1},we,Hh),U.pb=function(){return\"x:\"+this.a+\" y:\"+this.b},U.a=0,U.b=0;var lc=M(56);p(119,1,{427:1},QF,WD),U.Hb=function(e,A){var n,P,r;for(r=!1,P=this.a-1,n=0;n<this.a;n++)this.c[n]>A!=this.c[P]>A&&e<(this.b[P]-this.b[n])*(A-this.c[n])/(this.c[P]-this.c[n])+this.b[n]&&(r=!r),P=n;return r},U.a=0;var fft=M(119);p(36,1,{36:1,427:1},iD,lA),U.Hb=function(e,A){return W9(this,e,A)},U.pb=function(){return\"x:\"+this.c+\" y:\"+this.d+\" w:\"+this.b+\" h:\"+this.a},U.a=0,U.b=0,U.c=0,U.d=0;var Rl=M(36),Re=-1,zE,hc;p(424,1,{},cd),U.getCanMolecule=function(e){var A;return A=wa(this.a,e),new sA(A)},U.getEncodedCoordinates=function(e){return zu(this.a,e)},U.getEncodedMapping=function(){return cB(this.a)},U.getFinalRank=function(){return this.a.f},U.getGraphAtoms=function(){return sx(this.a)},U.getGraphIndexes=function(){return yx(this.a)},U.getIDCode=function(){return Me(this.a)},U.getSymmetryRank=function(e){return zU(this.a,e)},U.getSymmetryRanks=function(){return this.a.g},U.hasCIPParityDistinctionProblem=function(){return this.a.d},U.invalidateCoordinates=function(){this.a.s=null},U.normalizeEnantiomer=function(){return WR(this.a)},U.setParities=function(){l6(this.a)};var Dft=M(424);p(428,1,{},Tw);var z1t=2,K1t=0,J1t=1,Y1t=4,X1t=3,uft=M(428);p(429,1,{},gd),U.getConformerCount=function(){return this.a.p},U.getNextConformerAsMolecule=function(e){var A,n;return A=e?e.a:null,n=CG(this.a,A),n?n==A?e:new sA(n):null},U.getOneConformerAsMolecule=function(e){var A;return A=xG(this.a,e.a),A?e:null},U.getPotentialConformerCount=function(){return zx(this.a)},U.rc=function(e,A,n,P){return cW(this.a,e.a,A,n,P)},U.initializeConformers=function(e,A){A===void 0&&(A={});var n=A.strategy;n===void 0&&(n=3);var P=A.maxTorsionSets;P===void 0&&(P=xy);var r=A.use60degreeSteps;return r===void 0&&(r=!1),this.rc(e,n,P,r)};var Z1t=4,W1t=3,_1t=1,$1t=2,Qft=M(429);p(430,1,{},cw);var oft=M(430);p(431,1,{},Og),U.assessDruglikeness=function(e){var A;return O$(this.a,(A=e.a,!Ml&&(Ml=new Wl),A))},U.getDetail=function(){var e;return e=this.a.a,!e&&MO(),lQ(e)},U.getDruglikenessString=function(e){return uZ(e.a)};var a1t=-999,Uft=M(431);p(432,1,{},Dv),U._minimise=function(e,A,n){return Fj(this.a,e,A)},U.getTotalEnergy=function(){return lx(this.a)},U.size=function(){return this.a.b.r};var t0t=H4,e0t=V4,A0t=Jy,KE=!1,JE=!1,YE=!1,Lft=M(432);p(433,1,{},Wd),U.getAllCommonSubstructures=function(){var e,A,n,P,r;if(A=NY(this.a),!A)return null;for(n=c(pl,Dl,39,A.b,0,1),e=0,r=BQ(A,0);r.b!=r.d.c;)P=dL(r),n[e++]=new sA(P);return n},U.getMCS=function(){var e;return e=Sz(this.a),e?new sA(e):null},U.getScore=function(){return jq(this.a)},U.set=function(e,A){WK(this.a,e.a,A.a)};var sft=M(433);p(39,1,{39:1},Zd,UL,sA),U.addAtom=function(e){return i9(this.a,e)},U.addBond=function(e,A){return uL(this.a,e,A)},U.addFragment=function(e,A,n){mR(this.a,e.a,A,n)},U.sc=function(){FO(this.a)},U.tc=function(e){AM(this.a,e)},U.addImplicitHydrogens=function(e){e===void 0?this.sc():this.tc(e)},U.uc=function(){CU(),x5(this.a,1)},U.vc=function(e){x5(this.a,e)},U.addMissingChirality=function(e){e===void 0?this.uc():this.vc(e)},U.addMolecule=function(e){return CD(this.a,e.a)},U.addOrChangeAtom=function(e,A,n,P,r,i,f){return o5(this.a,e,A,n,P,r,i,f)},U.addOrChangeBond=function(e,A,n){return rj(this.a,e,A,n)},U.addRing=function(e,A,n,P,r){return wf(this.a,e,A,n,P,r)},U.addRingToAtom=function(e,A,n,P){return UR(this.a,e,A,n,P)},U.addRingToBond=function(e,A,n,P){return _Q(this.a,e,A,n,P)},U.addSubstituent=function(e,A){return as(this.a,e.a,A)},U.calculateTorsion=function(e){return JQ(this.a,e)},U.canonizeCharge=function(e){return Kp(this.a,e,!1)},U.center=function(){Yz(this.a)},U.changeAtom=function(e,A,n,P,r){return mf(this.a,e,A,n,P,r)},U.changeAtomCharge=function(e,A){return RT(this.a,e,A)},U.changeBond=function(e,A){return h8(this.a,e,A)},U.clear=function(){Ri(this.a)},U.convertStereoBondsToSingleBonds=function(e){Y5(this.a,e)},U.copyAtom=function(e,A,n,P){return Nn(this.a,e.a,A,n,P)},U.copyBond=function(e,A,n,P,r,i){return yQ(this.a,e.a,A,n,P,r,i)},U.copyMolecule=function(e){Uf(this.a,e.a)},U.copyMoleculeByAtoms=function(e,A,n,P){L9(this.a,e.a,A,n,P)},U.copyMoleculeByBonds=function(e,A,n,P){return wp(this.a,e.a,A,n,P)},U.copyMoleculeProperties=function(e){EU(this.a,e.a)},U.deleteAtom=function(e){jQ(this.a,e)},U.deleteAtomOrBond=function(e,A){return xb(this.a,e,A)},U.deleteAtoms=function(e){return wK(this.a,e)},U.deleteBond=function(e){fN(this.a,e)},U.deleteBondAndSurrounding=function(e){l5(this.a,e)},U.deleteMarkedAtomsAndBonds=function(){return ui(this.a)},U.deleteMolecule=function(){Ri(this.a)},U.deleteSelectedAtoms=function(){return UQ(this.a)},U.ensureHelperArrays=function(e){ut(this.a,e)},U.findAlleneCenterAtom=function(e){return Ob(this.a,e)},U.findAlleneEndAtom=function(e,A){return tm(this.a,e,A)},U.findAtom=function(e,A){return tn(this.a,e,A)},U.findBINAPChiralityBond=function(e){return ws(this.a,e)},U.findBond=function(e,A){return kf(this.a,e,A)},U.findRingSystem=function(e,A,n,P){Oj(this.a,e,A,n,P)},U.getAbsoluteAtomParity=function(e){return Rh(this.a,e)},U.getAbsoluteBondParity=function(e){return jx(this.a,e)},U.getAllAtoms=function(){return this.a.r},U.getAllBonds=function(){return this.a.s},U.getAllConnAtoms=function(e){return Ct(this.a,e)},U.getAllConnAtomsPlusMetalBonds=function(e){return Le(this.a,e)},U.getAllHydrogens=function(e){return $d(this.a,e)},U.getAromaticRingCount=function(){return pq(this.a)},U.getAtomAbnormalValence=function(e){return G9(this.a,e)},U.getAtomCIPParity=function(e){return OU(this.a,e)},U.getAtomCharge=function(e){return R1(this.a,e)},U.getAtomColor=function(e){return wu(this.a,e)},U.getAtomCustomLabel=function(e){return eP(this.a,e)},U.getAtomESRGroup=function(e){return OA(this.a,e)},U.getAtomESRType=function(e){return De(this.a,e)},U.getAtomLabel=function(e){return Vi(this.a,e)},U.getAtomList=function(e){return IA(this.a,e)},U.getAtomListString=function(e){return L5(this.a,e)},U.getAtomMapNo=function(e){return M1(this.a,e)},U.getAtomMass=function(e){return ge(this.a,e)},U.getAtomParity=function(e){return v0(this.a,e)},U.getAtomPi=function(e){return e0(this.a,e)},U.getAtomPreferredStereoBond=function(e){return lF(this.a,e)},U.getAtomQueryFeaturesObject=function(e){return Ott(this.a,e)},U.getAtomRadical=function(e){return jA(this.a,e)},U.getAtomRingBondCount=function(e){return X3(this.a,e)},U.getAtomRingCount=function(e,A){return P6(this.a,e,A)},U.getAtomRingSize=function(e){return Or(this.a,e)},U.getAtomX=function(e){return mt(this.a,e)},U.getAtomY=function(e){return Rt(this.a,e)},U.getAtomZ=function(e){return oA(this.a,e)},U.getAtomicNo=function(e){return X(this.a,e)},U.getAtoms=function(){return this.a.g},U.getAverageBondLength=function(e){return KL(this.a,e)},U.getAverageTopologicalAtomDistance=function(){return XZ(this.a)},U.getBond=function(e,A){return o1(this.a,e,A)},U.getBondAngle=function(e,A){return _0(this.a,e,A)},U.getBondAtom=function(e,A){return K(this.a,e,A)},U.getBondBridgeMaxSize=function(e){return M3(this.a,e)},U.getBondBridgeMinSize=function(e){return $h(this.a,e)},U.getBondCIPParity=function(e){return bu(this.a,e)},U.getBondESRGroup=function(e){return ef(this.a,e)},U.getBondESRType=function(e){return gP(this.a,e)},U.getBondLength=function(e){return ET(this.a,e)},U.getBondOrder=function(e){return dt(this.a,e)},U.getBondParity=function(e){return ze(this.a,e)},U.getBondPreferredStereoBond=function(e){return bY(this.a,e)},U.getBondQueryFeatures=function(e){return fe(this.a,e)},U.getBondQueryFeaturesObject=function(e){return C$(this.a,e)},U.getBondRingSize=function(e){return z9(this.a,e)},U.getBondType=function(e){return c1(this.a,e)},U.getBondTypeSimple=function(e){return cu(this.a,e)},U.getBonds=function(){return this.a.i},U.getBounds=function(){var e;return e=vj(this.a,aE),e?RG(e.c,e.d,e.b,e.a):null},U.getCanonizedIDCode=function(e){var A;return A=new qA(this.a,e),Me(A)},U.getCenterOfGravity=function(){var e;return e=jz(this.a),e?Wh(e.a,e.b,e.c):Wh(0,0,0)},U.getChiralText=function(){return QR(this.a)},U.getChirality=function(){return this.a.J},U.getCompactCopy=function(){return new sA($n(this.a))},U.getConnAtom=function(e,A){return _(this.a,e,A)},U.getConnAtoms=function(e){return O(this.a,e)},U.getConnBond=function(e,A){return Nt(this.a,e,A)},U.getConnBondOrder=function(e,A){return EA(this.a,e,A)},U.getCoordinates=function(e){return Wh(mt(this.a,e),Rt(this.a,e),oA(this.a,e))},U.getDefaultMaxValenceUncharged=function(e){return Eq(this.a,e)},U.getDiastereotopicAtomIDs=function(){return eX(this.a)},U.getElectronValenceCorrection=function(e,A){return Cu(this.a,e,A)},U.getExcludedNeighbourCount=function(e){return JL(this.a,e)},U.getExplicitHydrogens=function(e){return Gh(this.a,e)},U.getFinalRanks=function(e){var A;return A=new qA(this.a,e),A.f},U.getFisherProjectionParity=function(e,A,n,P){return W5(this.a,e,A,n,P)},U.getFragmentAtoms=function(e,A){return xm(this.a,e,A)},U.getFragmentNumbers=function(e,A,n){return Ur(this.a,e,A,n)},U.getFragments=function(){var e,A,n;for(e=Fq(this.a),n=c(pl,Dl,39,e.length,0,1),A=0;A<e.length;A++)n[A]=new sA(e[A]);return n},U.getFreeValence=function(e){return _i(this.a,e)},U.getHandleHydrogenMap=function(){return Tu(this.a)},U.getHelperArrayStatus=function(){return this.a.U},U.getHoseCodes=function(e){e=e||{};var A=(typeof e.maxSphereSize===ko?5:e.maxSphereSize)|0,n=(typeof e.type===ko?0:e.type)|0;return vK(this.a,A,n)},U.getIDCode=function(){var e;return e=ik(this.a),e==null&&(e=Me(new bA(this.a))),e},U.getIDCodeAndCoordinates=function(){return{idCode:this.getIDCode(),coordinates:this.getIDCoordinates()}},U.getIDCoordinates=function(){var e;return e=yz(this.a),e==null&&(e=a7(new bA(this.a))),e},U.getImplicitHigherValence=function(e,A){return sf(this.a,e,A)},U.getImplicitHydrogens=function(e){return xt(this.a,e)},U.getIndex=function(){return _N(this.a)},U.getLowestFreeValence=function(e){return yf(this.a,e)},U.getMaxAtoms=function(){return this.a.N},U.getMaxBonds=function(){return this.a.O},U.getMaxValence=function(e){return j3(this.a,e)},U.getMaxValenceUncharged=function(e){return En(this.a,e)},U.getMetalBondedConnAtoms=function(e){return qi(this.a,e)},U.getMolecularFormula=function(){return new Mg(this.a)},U.getMoleculeColor=function(){return this.a.P},U.getMolweight=function(){return mY(this.a)},U.getName=function(){return this.a.Q},U.getNonHydrogenNeighbourCount=function(e){return P0(this.a,e)},U.getNumberOfHydrogens=function(){return $z(this.a)},U.getOccupiedValence=function(e){return G1(this.a,e)},U.getPath=function(e,A,n,P,r){return B2(this.a,e,A,n,P,null,r)},U.getPathBonds=function(e,A,n){cm(this.a,e,A,n)},U.getPathLength=function(e,A){return C5(this.a,e,A)},U.getRingSet=function(){return new r7(kn(this.a))},U.getRotatableBondCount=function(){return nR(this.a)},U.getStereoBond=function(e){return xQ(this.a,e)},U.getStereoCenterCount=function(){return WF(this.a)},U.wc=function(){return this.a},U.getStereoProblem=function(e){return Ud(this.a,e)},U.getSubstituent=function(e,A,n,P,r){return KQ(this.a,e,A,n,P.a,r)},U.getSubstituentSize=function(e,A){return H5(this.a,e,A)},U.getSymmetryRank=function(e){return H0(this.a,e)},U.getZNeighbour=function(e,A){return ER(this.a,e,A)},U.invalidateHelperArrays=function(e){CI(this.a,e)},U.xc=function(e,A){var n;n=new a8(e),A>=0&&Z7(n,A),U9(n,this.a),hf(this.a)},U.inventCoordinates=function(e){e=e||{};var A=0;e.skipDefaultTemplates&&(A|=1),e.keepHydrogens!==!0&&(A|=2),e.keepMarkedAtomCoordinates&&(A|=4),e.preferMarkedAtomCoordinates&&(A|=8);var n=e.seed||0;this.xc(A,n)},U.is3D=function(){return rT(this.a)},U.isAlkaliMetal=function(e){return eq(this.a,e)},U.isAllylicAtom=function(e){return AN(this.a,e)},U.isAmideTypeBond=function(e){return OX(this.a,e)},U.isAromaticAtom=function(e){return mn(this.a,e)},U.isAromaticBond=function(e){return eA(this.a,e)},U.isAtomConfigurationUnknown=function(e){return E9(this.a,e)},U.isAtomMarkedForDeletion=function(e){return Hx(this.a,e)},U.isAtomParityPseudo=function(e){return xi(this.a,e)},U.isAtomStereoCenter=function(e){return O8(this.a,e)},U.isAutoMappedAtom=function(e){return Fn(this.a,e)},U.isBINAPChiralityBond=function(e){return oi(this.a,e)},U.isBondBackgroundHilited=function(e){return Jh(this.a,e)},U.isBondBridge=function(e){return Ru(this.a,e)},U.isBondForegroundHilited=function(e){return V9(this.a,e)},U.isBondMarkedForDeletion=function(e){return Nx(this.a,e)},U.isBondParityPseudo=function(e){return RU(this.a,e)},U.isBondParityUnknownOrNone=function(e){return Yh(this.a,e)},U.isChalcogene=function(e){return W3(this.a,e)},U.isDelocalizedBond=function(e){return Z8(this.a,e)},U.isEarthAlkaliMetal=function(e){return Aq(this.a,e)},U.isElectronegative=function(e){return rA(this.a,e)},U.isElectropositive=function(e){return zY(this.a,e)},U.isFlatNitrogen=function(e){return xP(this.a,e,!0)},U.isFragment=function(){return this.a.L},U.isHalogene=function(e){return IO(this.a,e)},U.isMarkedAtom=function(e){return W0(this.a,e)},U.isMetalAtom=function(e){return Ae(this.a,e)},U.isNaturalAbundance=function(e){return hu(this.a,e)},U.isNitrogenFamily=function(e){return b3(this.a,e)},U.isOrganicAtom=function(e){return Lj(this.a,e)},U.isPseudoRotatableBond=function(e){return Sj(this.a,e)},U.isPurelyOrganic=function(){return pX(this.a)},U.isRingAtom=function(e){return Gi(this.a,e)},U.isRingBond=function(e){return LA(this.a,e)},U.isSelectedAtom=function(e){return i0(this.a,e)},U.isSelectedBond=function(e){return bP(this.a,e)},U.isSimpleHydrogen=function(e){return Lz(this.a,e)},U.isSmallRingAtom=function(e){return pU(this.a,e)},U.isSmallRingBond=function(e){return A8(this.a,e)},U.isStabilizedAtom=function(e){return nN(this.a,e)},U.isStereoBond=function(e){return q9(this.a,e)},U.markAtomForDeletion=function(e){B7(this.a,e)},U.markBondForDeletion=function(e){KI(this.a,e)},U.normalizeAmbiguousBonds=function(){return Li(this.a)},U.removeAtomColors=function(){dB(this.a)},U.removeAtomCustomLabels=function(){this.a.u=null},U.removeAtomMarkers=function(){s3(this.a)},U.removeAtomSelection=function(){LG(this.a)},U.removeBondHiliting=function(){VB(this.a)},U.removeExplicitHydrogens=function(){O5(this.a,!0)},U.removeQueryFeatures=function(){return pj(this.a)},U.renumberESRGroups=function(e){return ne(this.a,e)},U.rotate=function(e){bG(new $w(e),this.a)},U.scaleCoords=function(e){wv(this.a,e)},U.setAllAtoms=function(e){YI(this.a,e)},U.setAllBonds=function(e){XI(this.a,e)},U.setAssignParitiesToNitrogen=function(e){vx(this.a,e)},U.setAtomAbnormalValence=function(e,A){aA(this.a,e,A)},U.setAtomCIPParity=function(e,A){eB(this.a,e,A)},U.setAtomCharge=function(e,A){b0(this.a,e,A)},U.setAtomColor=function(e,A){RD(this.a,e,A)},U.setAtomConfigurationUnknown=function(e,A){rL(this.a,e,A)},U.setAtomCustomLabel=function(e,A){IP(this.a,e,A)},U.setAtomESR=function(e,A,n){Ne(this.a,e,A,n)},U.setAtomList=function(e,A,n){gf(this.a,e,A,n)},U.setAtomMapNo=function(e,A,n){tA(this.a,e,A,n)},U.setAtomMarker=function(e,A){Wn(this.a,e,A)},U.setAtomMass=function(e,A){O9(this.a,e,A)},U.setAtomParity=function(e,A,n){me(this.a,e,A,n)},U.setAtomQueryFeature=function(e,A,n){w1(this.a,e,A,n)},U.setAtomRadical=function(e,A){Je(this.a,e,A)},U.setAtomSelection=function(e,A){vP(this.a,e,A)},U.setAtomX=function(e,A){de(this.a,e,A)},U.setAtomY=function(e,A){Ve(this.a,e,A)},U.setAtomZ=function(e,A){Yn(this.a,e,A)},U.setAtomicNo=function(e,A){$0(this.a,e,A)},U.setBondAtom=function(e,A,n){mD(this.a,e,A,n)},U.setBondBackgroundHiliting=function(e,A){oG(this.a,e,A)},U.setBondCIPParity=function(e,A){Gd(this.a,e,A)},U.setBondESR=function(e,A,n){T8(this.a,e,A,n)},U.setBondForegroundHiliting=function(e,A){UG(this.a,e,A)},U.setBondOrder=function(e,A){B3(this.a,e,A)},U.setBondParity=function(e,A,n){Q8(this.a,e,A,n)},U.setBondParityUnknownOrNone=function(e){yh(this.a,e)},U.setBondQueryFeature=function(e,A,n){Xe(this.a,e,A,n)},U.setBondType=function(e,A){g0(this.a,e,A)},U.setChirality=function(e){th(this.a,e)},U.setCoordinates=function(e,A){de(this.a,e,A.x),Ve(this.a,e,A.y),Yn(this.a,e,A.z)},U.setFragment=function(e){ve(this.a,e)},U.setHelperValidity=function(e){wI(this.a,e)},U.setHydrogenProtection=function(e){gI(this.a,e)},U.setMaxAtoms=function(e){VQ(this.a,e)},U.setMaxBonds=function(e){QQ(this.a,e)},U.setMoleculeColor=function(e){dI(this.a,e)},U.setName=function(e){iu(this.a,e)},U.setParitiesValid=function(e){TD(this.a,e)},U.setStereoBondFromAtomParity=function(e){oy(this.a,e)},U.setStereoBondFromBondParity=function(e){bp(this.a,e)},U.setStereoBondsFromParity=function(){hf(this.a)},U.setToRacemate=function(){this.a.M=!0},U.setUnknownParitiesToExplicitlyUnknown=function(){Kh(this.a)},U.shareSameFragment=function(e,A){return C5(this.a,e,A)!=-1},U.stripIsotopInfo=function(){return qK(this.a)},U.stripSmallFragments=function(e){return e6(this.a,e)},U.stripStereoInformation=function(){ps(this.a)},U.suggestBondType=function(e,A){return KN(this.a,e,A)},U.supportsImplicitHydrogen=function(e){return fs(this.a,e)},U.swapAtoms=function(e,A){r6(this.a,e,A)},U.swapBonds=function(e,A){g5(this.a,e,A)},U.toIsomericSmiles=function(e){e=e||{};var A=e.createSmarts===!0,n=e.includeMapping===!0,P=e.kekulizedOutput===!0;return this.yc(A,n,P)},U.yc=function(e,A,n){return mF(this,e,A,n)},U.toMolfile=function(){var e;return e=new zh(this.a),e.a.a},U.toMolfileV3=function(){var e;return e=new Qd(this.a),e.b.a},U.toSVG=function(e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g,k,v;for(o=!0,s=0;s<this.a.r-1;s++)if(mt(this.a,s)!=mt(this.a,s+1)||Rt(this.a,s)!=Rt(this.a,s+1)){o=!1;break}return y=o?$n(this.a):this.a,o&&U9(new a8(0),y),ut(y,95),v=d$(f),L=la(f),Q=new vb(y,L,i),Q.J=n,w2(Q,null,new lA(0,0,e,A),v),D=Q.v,h6(Q,null),k=pp(Q),P?(h=Ot(E1(w.Math.round(D.b+r*2))),l=Ot(E1(w.Math.round(D.a+r*2))),T=Ot(E1(w.Math.round(D.c-r))),g=Ot(E1(w.Math.round(D.d-r))),O3(k,'width=\"\\\\d+px\" height=\"\\\\d+px\" viewBox=\"0 0 \\\\d+ \\\\d+\"','width=\"'+h+'px\" height=\"'+l+'px\" viewBox=\"'+T+\" \"+g+\" \"+h+\" \"+l+'\"')):k},U.toSmarts=function(){return Eu(new dD(this.a,1))},U.toSmiles=function(){return mF(this,!1,!1,!0)},U.translate=function(e){AO(this.a,e.x,e.y,e.z)},U.translateCoords=function(e,A){GL(this.a,e,A)},U.validate=function(){v$(this.a)},U.zoomAndRotate=function(e,A,n){sb(this.a,e,A,n)},U.zoomAndRotateInit=function(e,A){Nb(this.a,e,A)};var n0t=32,P0t=2,r0t=4,i0t=6,f0t=64,D0t=128,u0t=1,Q0t=256,o0t=8,U0t=Qe,L0t=16,s0t=O1,y0t=512,l0t=iE,h0t=24,T0t=iE,XE,c0t=f4,w0t=r4,g0t=i4,d0t=0,B0t=3,v0t=1,F0t=2,k0t=64,m0t=384,b0t=448,j0t=192,R0t=256,p0t=0,M0t=320,C0t=128,ZE,H0t=1,V0t=2,E0t=4,S0t=0,I0t=3,x0t=1,N0t=ky,G0t=2,O0t=1,q0t=2,z0t=yr,K0t=3,J0t=25,Y0t={l:4186111,m:4193407,h:127},X0t=5,Z0t=39,W0t=xf,_0t=Pe,$0t=d9,a0t=no,tet=uP,eet=4,Aet=7,net=Ao,Pet=eo,ret=je,iet=S0,fet={l:4194302,m:4193343,h:7},Det=5,uet=17,Qet=hi,oet=l9,Uet=7,Let=32,set=O1,yet=46,het=p2,Tet=128,cet=q0,wet=Gn,get=kM,det=256,Bet=v8,vet=g8,Fet=mM,ket=512,met=B8,bet=o0,jet=16,Ret=bM,pet=Qe,Met=F8,Cet=32,Het=fo,Vet=KA,Eet=64,Iet=4,xet=8,Net=wn,Get=oo,Oet=134217728,qet=3,zet=14,Ket=li,Jet=w8,Yet=h9,Xet=T9,Zet=c9,Wet=w9,_et=g9,$et=Vf,aet=120,tAt=4,eAt=3,AAt=2,nAt=k8,PAt=Fo,rAt=k8,iAt=dn,fAt=30,DAt=e4,uAt=lr,QAt=3,oAt=22,UAt=X6,LAt=2,sAt=44,yAt=48,lAt=32,hAt=0,TAt=16,cAt=4,wAt=48,WE,gAt=1,dAt=0,BAt=3,vAt=2,FAt=1,kAt=0,mAt=3,bAt=2,jAt=yi,RAt=Qo,pAt=2,MAt=21,CAt=KA,HAt=31,VAt=5,EAt=0,SAt=d8,IAt=8,xAt=7680,NAt=4,GAt=9,OAt=9,qAt=jy,zAt=4,KAt=13,JAt=8,YAt=8388480,XAt=2,ZAt=Nf,WAt=F8,_At=16,$At=6291840,aAt=23,tnt=oP,ent=128,Ant=32,nnt=64,Pnt=96,rnt=2,int=5,fnt=256,Dnt=NP,unt=3,Qnt=17,ont=384,Unt=2,Lnt=7,snt=6291967,ynt=1,lnt=4,hnt=386,Tnt=512,cnt=8,wnt=2,gnt=129,dnt=511,Bnt=127,vnt=384,Fnt=16,knt=32,mnt=64,bnt=1,jnt=4,Rnt=257,pnt=458752,Mnt=Ti,Cnt=d1,Hnt=v8,Vnt=q0,Ent=o0,Snt=Fy,Int=0,xnt=327680,_E,Nnt=24,Gnt=321,Ont=6,qnt=5,znt=32,Knt=0,Jnt=1,Ynt=2,Xnt=255,Znt=16,Wnt=128,_nt=1,$nt=8,ant=4,tPt=2,ePt=32,APt=64,nPt=248,PPt=31,rPt=1,iPt=0,fPt=15,DPt=7,uPt=3,QPt=63,oPt=95,UPt=190,LPt=16,sPt=0,yPt=1,lPt=16,hPt=256,TPt=128,cPt=8,wPt=32,gPt=4,dPt=511,BPt=64,vPt=1,FPt=2,$E,aE,pl=M(39);p(434,286,{},Ag),AP(U,{acceptorCount:{get:function(){return Oq(this)}}}),AP(U,{donorCount:{get:function(){return Rz(this)}}}),AP(U,{logP:{get:function(){return eJ(this)}}}),AP(U,{logPString:{get:function(){return lQ(utt((new pT,this.a)))}}}),AP(U,{logS:{get:function(){return SX((M6(),this.a))}}}),AP(U,{logSString:{get:function(){return lQ(na((M6(),this.a)))}}}),AP(U,{polarSurfaceArea:{get:function(){return wq((B6(),this.a))}}}),AP(U,{polarSurfaceAreaString:{get:function(){return lQ(DW((B6(),this.a)))}}}),AP(U,{rotatableBondCount:{get:function(){return nR(this.a)}}}),AP(U,{stereoCenterCount:{get:function(){return WF(this.a)}}});var yft=M(434);p(68,1,{},P8,uB),U.addCatalyst=function(e){oh(this.a,e.a)},U.addCatalystAt=function(e,A){Qx(this.a,e.a,A)},U.addProduct=function(e){Ug(this.a,e.a)},U.addProductAt=function(e,A){Zx(this.a,e.a,A)},U.addReactant=function(e){Lg(this.a,e.a)},U.addReactantAt=function(e,A){Wx(this.a,e.a,A)},U.clear=function(){Sv(this.a)},U.clone=function(){return new P8(new Ks(this.a))},U.getAverageBondLength=function(){return Jb(this.a)},U.getCatalyst=function(e){return new sA(Rx(this.a,e))},U.getCatalysts=function(){return this.a.a.a.length},U.getHighestMapNo=function(){return Es(this.a)},U.getMergedCopy=function(){return new P8(QZ(this.a))},U.getMolecule=function(e){return new sA(Nv(this.a,e))},U.getMolecules=function(){return JN(this.a)},U.getName=function(){return eN(this.a)},U.getProduct=function(e){return new sA(ph(this.a,e))},U.getProducts=function(){return this.a.f.a.length},U.getReactant=function(e){return new sA(C9(this.a,e))},U.getReactants=function(){return this.a.g.a.length},U.getReactionCenterMapNos=function(){return Ctt(this.a)},U.isEmpty=function(){return lZ(this.a)},U.isFragment=function(){return Fx(this.a)},U.isPerfectlyMapped=function(){return aa(this.a)},U.isReactionLayoutRequired=function(){return S$(this.a)},U.removeCatalysts=function(){bi(this.a.a.a,0)},U.setFragment=function(e){dJ(this.a,e)},U.setName=function(e){kI(this.a,e)},U.toRxn=function(e){var A;return A=new vR(this.a,e),A.a?A.a.a:null},U.toRxnV3=function(e){var A;return A=new JR(this.a,e),A.a?A.a.a:null},U.toSmiles=function(){return TW(this.a)},U.validateMapping=function(){Oa(this.a)};var lft=M(68);p(435,1,{},ww);var kPt=\"+\",mPt=15,bPt=8,jPt=2,RPt=3,pPt=4,MPt=1,CPt=0,HPt=\" \",VPt=\"#\",EPt=\"!\",SPt=16,hft=M(435);p(436,1,{},sg),U.getProducts=function(){var e,A,n,P;if(P=xK(this.a),P.length==0)return j1(pl,[DA,Dl],[152,39],0,[0,0],2);for(n=j1(pl,[DA,Dl],[152,39],0,[P.length,P[0].length],2),e=0;e<P.length;e++)for(A=0;A<P[0].length;A++)n[e][A]=new sA(P[e][A]);return n},U.setReactant=function(e,A){return g$(this.a,e,A.a)};var Tft=M(436);p(437,1,{},gw);var No=!1,cft=M(437);p(266,1,{},r7),U.determineAromaticity=function(e,A,n,P){Py(this.a,e,A,n,P)},U.getAtomIndex=function(e,A){return qF(this.a,e,A)},U.getAtomRingSize=function(e){return UA(this.a,e)},U.getBondIndex=function(e,A){return Wq(this.a,e,A)},U.getBondRingSize=function(e){return TP(this.a,e)},U.getHeteroPosition=function(e){return fx(this.a,e)},U.getRingAtoms=function(e){return jh(this.a,e)},U.getRingBonds=function(e){return Qg(this.a,e)},U.getRingSize=function(e){return ah(this.a,e)},U.getSharedRing=function(e,A){return As(this.a,e,A)},U.getSize=function(){return this.a.j.a.length},U.isAromatic=function(e){return wh(this.a,e)},U.isAtomMember=function(e,A){return wA(this.a,e,A)},U.isBondMember=function(e,A){return Pf(this.a,e,A)},U.isDelocalized=function(e){return Dx(this.a,e)},U.qualifiesAsAmideTypeBond=function(e){return Gs(this.a,e)},U.validateMemberIndex=function(e,A){return UT(this.a,e,A)};var IPt=7,xPt=3,NPt=7,GPt=5,OPt=1,wft=M(266);p(438,1,{},zd),U.getField=function(e){var A,n;for(n=eG(this.a),A=0;A<n.length;A++)if(e1(n[A],e))return IB(this.a,A);return null},U.getFieldData=function(e){return IB(this.a,e)},U.getFieldNames=function(e){return qN(this.a,e)},U.getMolecule=function(){return new sA(WY(this.a))},U.getNextFieldData=function(){var e;return e=this.a.b.a,e},U.getNextMolFile=function(){var e;return e=this.a.g.a,e},U.next=function(){return _a(this.a)};var gft=M(438);p(440,1,{},CB),U.findFragmentInMolecule=function(e){var A;return A=dZ(e),CA(this.b,A,this.a)},U.getMatchList=function(){return yK(this.b.F)},U.isFragmentInMolecule=function(){return Rg(this.b)},U.setFragment=function(e){MA(this.b,e.a)},U.setMol=function(e,A){GA(this.b,A.a),MA(this.b,e.a)},U.setMolecule=function(e){GA(this.b,e.a)},U.a=0;var dft=M(440);p(441,1,{},m7),U.createIndex=function(e){return ks(this.a,e.a)},U.isFragmentInMolecule=function(){return qX(this.a)},U.setFragment=function(e,A){fO(this.a,e.a,A)},U.setMolecule=function(e,A){DO(this.a,e.a,A)};var Bft=M(441);p(442,1,{},Uh),U.getSmartsWarning=function(){return yO(this.a)},U.zc=function(e,A,n,P,r,i){var f;switch(f=0,e){case\"smarts\":f=2;break;case\"guess\":f=1}n&&(f|=8),A&&(f|=4),P&&(f|=16),r&&(f|=32),i&&(f|=64),this.a=new dQ(f)},U.Ac=function(e,A,n,P){var r;return zN(this.a,e.a,ln((r=A,_u(),r)),n,P),e},U.parseMolecule=function(e,A){A=A||{};var n=A.molecule||new Zd,P=!A.noCoordinates,r=!A.noStereo;return this.Ac(n,e,P,r)},U.parseReaction=function(e){return new P8(gO(this.a,e))},U.setRandomSeed=function(e){vI(this.a,e)};var vft=M(442);p(443,1,{},pg),U.assessRisk=function(e,A){var n;return IW(e.a,(n=A,!Ml&&(Ml=new Wl),n))},U.getDetail=function(e,A){return lQ(Va(e.a,A))};var qPt=3,zPt=2,tS,KPt=1,JPt=0,YPt=2,XPt=0,ZPt=3,WPt=1,Fft=M(443);p(444,1,{},wd),U.applyTransformation=function(e,A){Gz(this.a,e.a,A)},U.setMolecule=function(e,A){return hZ(this.a,e.a)};var kft=M(444);p(445,1,{},dw);var mft=M(445);p(265,155,{155:1},Mg),AP(U,{absoluteWeight:{get:function(){return Tq(this)}}}),AP(U,{formula:{get:function(){return dK(this)}}}),AP(U,{relativeWeight:{get:function(){return cq(this)}}});var bft=M(265);p(446,1,{},fj),U.addPastedOrDropped=function(e,A,n){RR(this.a,e.a)},U.clearAll=function(){ab(this.a)},U.fireKeyEvent=function(e,A,n,P,r,i){var f;f=new OB(e,A,i,this.a),DT(this.d,f)},U.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var o;o=new ST(e,A,n,P,r,i,f,D,Q,this.a),DT(this.e,o)},U.getGenericEditorArea=function(){return this.a},U.Bc=function(){return this.c},U.getMode=function(){return this.a.U},U.getMolecule=function(){return new sA(this.a.V)},U.getReaction=function(){return new P8(GT(this.a))},U.moleculeChanged=function(){qO(this.a)},U.repaint=function(){P1(this)},U.setMolecule=function(e){kK(this.a,e.a)},U.setReaction=function(e){gR(this.a,e.a)},U.toolChanged=function(e){DQ(this.a,e)},U.b=!1;var _Pt=4,$Pt=8,aPt=1,t8t=2,eS,AS,nS,PS,e8t=-2,A8t=-5,n8t=-1,P8t=-4,r8t=-8,i8t=-7,f8t=1,D8t=2,u8t=-6,Q8t=-3,o8t=8,U8t=2,L8t=1,s8t=4,y8t=3,l8t=7,h8t=4,T8t=5,c8t=6,w8t=1,g8t=2,d8t=-1,B8t=-2,v8t=0,F8t=1,k8t=4,m8t=2,b8t=3,j8t=10,R8t=5,p8t=6,M8t=13,C8t=11,H8t=7,V8t=8,E8t=12,S8t=9,jft=M(446);p(295,1,qf,i7),U.nc=function(e){kG(this.a,e.j,e.a)};var Rft=M(295);p(298,1,{268:1},f7),U.pc=function(){ON(this.a)};var pft=M(298);p(448,1,{},Um),U.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var o;o=new ST(e,A,n,P,r,i,f,D,Q,this.b),DT(this.d,o)},U.getHeight=function(){return this.b.e},U.Cc=function(){return this.c},U.getWidth=function(){return this.b.o},U.setDimensions=function(e,A){WB(this,e,A)},U.a=!1;var Mft=M(448);p(313,1,{268:1},D7),U.pc=function(){OF(this.a)};var Cft=M(313);p(447,1,{},ZB),U.build16x16CursorImage=function(e){var A;return A=Yv(this,16,16),WX(A,e),A.a},U.createDialog=function(e,A){return OD(this,e,A)},U.createImage=function(e,A){return Yv(this,e,A)},U.createNativeDialog=function(e){return HB(this,e)},U.createPopupMenu=function(e){return null},U.Dc=function(){return this.a},U.grabFocus=function(){oB(this)},U.openChemistryFile=function(e){return null},U.runLater=function(e){BL(this,e)},U.Ec=function(e){e.pc()},U.setCursor=function(e){BB(this,e)},U.setEditorArea=function(e){},U.showHelpDialog=function(e,A){H3(this,e,A)},U.showMessage=function(e){};var Hft=M(447);p(174,1,{}),U.Fc=function(e,A){Qq(this,new KU(this,e,A))},U.Gc=function(){return this.b};var Vft=M(174);p(470,174,{},q7);var Eft=M(470);p(297,1,{},u7),U.Hc=function(){return this.a};var Sft=M(297);p(471,174,{},z7);var Ift=M(471);p(299,1,{},Q7),U.Ic=function(){this.a&&this.a.nc(new KU(this,1,0))},U.Jc=function(){this.a&&this.a.nc(new KU(this,0,0))},U.Kc=function(){return this.b};var xft=M(299);p(160,1,{},fu),U.Lc=function(){return this.a};var Nft=M(160);p(224,1,{},iU),U.qc=function(){var e=this.Mc();return e},U.Mc=function(){return this.a};var Gft=M(224);p(296,226,{},b7);var Oft=M(296);p(469,174,{},K7);var qft=M(469);p(223,226,{},Lh);var zft=M(223);p(139,1,{},uD),U.getSize=function(){return this.a.a},U.getX=function(e){return I7(this.a,e)},U.getY=function(e){return x7(this.a,e)};var Kft=M(139);p(472,174,{},J7);var Jft=M(472);p(216,1,{},Wl);var Ml=null,Yft=M(216),Tc=null,p1;p(410,1,{},Td),U.a=0,U.b=0,U.c=0;var Xft=M(410);p(262,1,Cf,_l),U.Rb=function(e,A){return bs(e,A)},U.mb=function(e){return this===e};var Zft=M(262),YA,Bi;p(130,1,Cf,fD),U.Rb=function(e,A){return ms(e,A)},U.mb=function(e){return this===e};var Wft=M(130);p(94,1,{},Ci,Oh);var _ft=M(94);p(390,94,Cf,dd);var $ft=M(390);p(158,1,{158:1,32:1},T3,Nm),U.Sb=function(e){return SK(this,e)},U.mb=function(e){return Hm(this,e)},U.ob=function(){return this.b==-1&&(this.a.length==1?this.b=this.a[0]:this.b=Mu(this.a)),this.b},U.pb=function(){var e,A,n;for(n=new C0,A=new sD(\"0\"),e=0;e<this.a.length;e++)q(n,Sh(A,this.a[e])),e<this.a.length-1&&(n.a+=\" \");return n.a},U.b=0;var aft=M(158);p(352,128,Tn);var tDt=M(352);p(166,352,{166:1,4:1,19:1,33:1,27:1},dv),U.jc=function(){return LX(this),this.c},U.Nc=function(){return z1(this.b)===z1(cc)?null:this.b};var cc,eDt=M(166);p(423,1,{});var ADt=M(423),Go=0,rS=0,Oo=-1;p(404,423,{},Bw);var wc,nDt=M(404),zn,gc,iS,dc,Bc;p(57,1,{},FP,xL),U.a=0;var PDt=M(57);p(244,1,{},h3),U.b=0;var fS=null,DS,rDt=M(244);p(163,1,{163:1}),U.mb=function(e){return Ek(this,e)},U.ob=function(){var e;return e=this.Oc()+this.Pc(),Bt(e)*37};var iDt=M(163);p(171,163,{171:1,163:1},yg),U.mb=function(e){var A;return Yt(e,171)?(A=e,this.a==A.a&&this.b==A.b):Ek(this,e)},U.Oc=function(){return this.a},U.Pc=function(){return this.b},U.a=0,U.b=0;var fDt=M(171);p(162,163,{163:1,162:1,4:1},Fw,Hg),U.Oc=function(){return this.a},U.Pc=function(){return this.b},U.a=0,U.b=0;var I8t=M(162);p(467,1,{});var DDt=M(467);p(253,467,{253:1}),U.mb=function(e){var A;return e===this?!0:Yt(e,172)?(A=e,this.c==A.c&&this.d==A.d&&this.b==A.b&&this.a==A.a):!1},U.ob=function(){var e;return e=Bs(this.c),e=at(e,yn(Bs(this.d),37)),e=at(e,yn(Bs(this.b),43)),e=at(e,yn(Bs(this.a),47)),Ot(e)^Ot(O0(e,32))};var uDt=M(253);p(172,253,{253:1,172:1},w3),U.a=0,U.b=0,U.c=0,U.d=0;var QDt=M(172);p(463,1,{}),U.Qc=function(){var e;return e=c(Fr,re,6,1,15,1),this.Rc(e)==-1?-1:e[0]},U.Rc=function(e){return this.Sc(e,0,e.length)};var oDt=M(463);p(53,463,{},un),U.Qc=function(){return SL(this)},U.Sc=function(e,A,n){return this.b.Sc(e,A,n)},U.a=0;var UDt=M(53);p(426,1,{});var LDt=M(426);p(425,426,{});var sDt=M(425);p(462,1,{});var yDt=M(462);p(104,463,{},mi),U.Qc=function(){return SG(this.a)},U.Rc=function(e){return kk(this,e,0,e.length)},U.Sc=function(e,A,n){return kk(this,e,A,n)};var lDt=M(104);p(271,425,{},kw);var hDt=M(271);p(88,463,{},Sr),U.Qc=function(){return this.a==this.b.length?-1:Xi(this.b,this.a++)},U.Sc=function(e,A,n){var P;return this.a>=this.b.length?-1:(P=w.Math.min(this.b.length-this.a,n),Pq(this.b,this.a,this.a+P,e,A),this.a+=P,P)},U.a=0;var TDt=M(88);p(464,1,{});var cDt=M(464);p(243,464,{},Th),U.pb=function(){return this.a.a};var wDt=M(243);p(129,1,{210:1}),U.pb=function(){return this.a};var gDt=M(129);p(85,33,Tn,I8);var dDt=M(85);p(260,65,Tn,E7,ng);var BDt=M(260);p(141,1,{4:1,141:1,32:1},Ah),U.Sb=function(e){return this.a-e.a},U.mb=function(e){return Yt(e,141)&&e.a==this.a},U.ob=function(){return this.a},U.pb=function(){return String.fromCharCode(this.a)},U.a=0;var x8t=M(141),vc;p(63,33,Tn,lh,ZP);var vDt=M(63);p(167,33,Tn,j7,yU);var FDt=M(167);p(142,121,{4:1,32:1,142:1,121:1},nh),U.Sb=function(e){return Zh(this.a,e.a)},U.Zc=function(){return this.a},U.mb=function(e){return Yt(e,142)&&e.a==this.a},U.ob=function(){return this.a},U.$c=function(){return this.a},U.pb=function(){return\"\"+this.a},U.a=0;var N8t=M(142),Fc;p(143,121,{4:1,32:1,143:1,121:1},Ph),U.Sb=function(e){return FG(this.a,e.a)},U.Zc=function(){return $9(this.a)},U.mb=function(e){return Yt(e,143)&&n0(e.a,this.a)},U.ob=function(){return VN(this.a)},U.$c=function(){return Ot(this.a)},U.pb=function(){return\"\"+Fe(this.a)},U.a=0;var G8t=M(143),kc;p(530,1,{}),p(408,33,Tn,W7);var kDt=M(408);p(42,63,{4:1,19:1,42:1,33:1,27:1},_P);var mDt=M(42);p(116,1,{4:1,116:1},k3),U.mb=function(e){var A;return Yt(e,116)?(A=e,this.c==A.c&&this.d==A.d&&this.a==A.a&&this.b==A.b):!1},U.ob=function(){return iK(B(d(qn,1),A0,1,5,[U1(this.c),this.a,this.d,this.b]))},U.pb=function(){return this.a+\".\"+this.d+\"(\"+(this.b!=null?this.b:\"Unknown Source\")+(this.c>=0?\":\"+this.c:\"\")+\")\"},U.c=0;var uS=M(116);p(80,129,{210:1},gD,su);var bDt=M(80);p(25,129,{210:1},C0,Vr,bn);var jDt=M(25);p(532,1,{});var k9;p(40,33,Tn,mA,cD);var RDt=M(40);p(31,121,{4:1,32:1,121:1,31:1},xe,L3,mB,ff,Fg,ID),U.Sb=function(e){return BR(this,e)},U.Zc=function(){return Te(He(this))},U.mb=function(e){var A;return this===e?!0:Yt(e,31)?(A=e,this.e==A.e&&BR(this,A)==0):!1},U.ob=function(){var e;return this.b!=0?this.b:this.a<54?(e=E1(this.f),this.b=Ot(V(e,-1)),this.b=33*this.b+Ot(V(O0(e,32),-1)),this.b=17*this.b+Bt(this.e),this.b):(this.b=17*zk(this.c)+Bt(this.e),this.b)},U.$c=function(){return this.e<=-32||this.e>(this.d>0?this.d:w.Math.floor((this.a-1)*mo)+1)?0:TB(this.e==0||this.a==0&&this.f!=-1?(!this.c&&(this.c=jP(E1(this.f))),this.c):this.e<0?RP((!this.c&&(this.c=jP(E1(this.f))),this.c),Qi(-this.e)):D6((!this.c&&(this.c=jP(E1(this.f))),this.c),Qi(this.e)))},U.pb=function(){return He(this)},U.a=0,U.b=0,U.d=0,U.e=0,U.f=0;var QS,qo,mc,bc,vi,Cl,zo,jc,oS=M(31);p(23,121,{4:1,32:1,121:1,23:1},RA,lv,le,Mm,id),U.Sb=function(e){return ss(this,e)},U.Zc=function(){return Te(d6(this,0))},U.mb=function(e){return VT(this,e)},U.ob=function(){return zk(this)},U.$c=function(){return TB(this)},U.pb=function(){return d6(this,0)},U.b=-2,U.c=0,U.d=0,U.e=0;var Rc,X2,US,Ko,Jo,vr,Fi=M(23),LS,sS;p(100,1,{4:1,100:1},hB,$D),U.mb=function(e){return Yt(e,100)&&e.a==this.a&&e.b==this.b},U.ob=function(){return this.a<<3|this.b.b},U.pb=function(){return\"precision=\"+this.a+\" roundingMode=\"+this.b},U.a=0;var pDt=M(100),m9,tD,pc;p(75,55,{4:1,32:1,55:1,75:1},Ir);var yS,lS,hS,TS,ce,Hl,cS,wS,O8t=Yr(75,Vq);p(115,1,ul),U.Sb=function(e){return $G(this.a,e.a)},U.mb=function(e){var A;return e===this?!0:Yt(e,115)?(A=e,e1(this.a,A.a)):!1},U.ob=function(){return mT(this.a)},U.pb=function(){return this.a};var MDt=M(115);p(466,1,{});var CDt=M(466);p(110,466,{},sD,Fh),U.a=0;var HDt=M(110);p(107,1,x4),U.getOrDefault=function(e,A){var n;return n=this.get(e),n==null&&!this.containsKey(e)?A:n},U.putIfAbsent=function(e,A){var n;return n=this.get(e),n??this.put(e,A)},U.replace=function(e,A){return this.containsKey(e)?this.put(e,A):null},U.clear=function(){this.ad().clear()},U._c=function(e){return ib(this,e)},U.containsKey=function(e){return!!aT(this,e,!1)},U.containsValue=function(e){var A,n,P;for(n=this.ad().Tb();n.cd();)if(A=n.dd(),P=A.jd(),z1(e)===z1(P)||e!=null&&SP(e,P))return!0;return!1},U.mb=function(e){var A,n,P;if(e===this)return!0;if(!Yt(e,111)||(P=e,this.size()!=P.size()))return!1;for(n=P.ad().Tb();n.cd();)if(A=n.dd(),!this._c(A))return!1;return!0},U.get=function(e){return t8(aT(this,e,!1))},U.ob=function(){return Ak(this.ad())},U.isEmpty=function(){return this.size()==0},U.keySet=function(){return new ih(this)},U.put=function(e,A){throw At(new cD(\"Put not supported on this map\"))},U.putAll=function(e){var A,n;for(y1(e),n=e.ad().Tb();n.cd();)A=n.dd(),this.put(A.hd(),A.jd())},U.remove=function(e){return t8(aT(this,e,!0))},U.size=function(){return this.ad().size()},U.pb=function(){var e,A,n;for(n=new RL(\", \",\"{\",\"}\"),A=this.ad().Tb();A.cd();)e=A.dd(),$v(n,iv(this,e.hd())+\"=\"+iv(this,e.jd()));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c},U.values=function(){return new oD(this)};var VDt=M(107);p(187,107,x4),U.clear=function(){i8(this)},U.containsKey=function(e){return Kr(this,e)},U.containsValue=function(e){return PB(this,e)},U.ad=function(){return new QD(this)},U.get=function(e){return D8(this,e)},U.put=function(e,A){return Jr(this,e,A)},U.remove=function(e){return jL(this,e)},U.size=function(){return aP(this)},U.b=0;var EDt=M(187);p(460,41,G2),U.Ub=function(){return new x8(this)},U.mb=function(e){var A;return e===this?!0:!Yt(e,87)||(A=e,A.size()!=this.size())?!1:oQ(this,A)},U.ob=function(){return Ak(this)},U.removeAll=function(e){var A,n,P,r;if(y1(e),r=this.size(),r<e.size())for(A=this.Tb();A.cd();)n=A.dd(),e.contains(n)&&A.ed();else for(P=e.Tb();P.cd();)n=P.dd(),this.remove(n);return r!=this.size()};var SDt=M(460);p(145,460,G2,QD),U.clear=function(){i8(this.a)},U.contains=function(e){return rv(this,e)},U.Tb=function(){return new aF(this.a)},U.remove=function(e){var A;return rv(this,e)?(A=e.hd(),jL(this.a,A),!0):!1},U.size=function(){return aP(this.a)};var IDt=M(145);p(341,1,{},aF),U.bd=function(e){jn(this,e)},U.dd=function(){var e;return fB(this.f.b,this.d),MD(this.b),this.c=this.a,e=this.a.dd(),this.b=vT(this),e},U.cd=function(){return this.b},U.ed=function(){x9(!!this.c),fB(this.f.b,this.d),this.c.ed(),this.c=null,this.b=vT(this),this.d=this.f.b},U.b=!1,U.d=0;var xDt=M(341);p(231,1,{},rh),U.bd=function(e){jn(this,e)},U.cd=function(){return Nr(this)},U.dd=function(){return Cv(this)},U.ed=function(){N3(this)},U.b=0,U.c=-1;var NDt=M(231);p(232,231,{},J3),U.ed=function(){N3(this)},U.fd=function(e){this.a.addAtIndex(this.b,e),++this.b,this.c=-1},U.gd=function(e){x9(this.c!=-1),this.a.setAtIndex(this.c,e)};var GDt=M(232);p(133,74,Z6,JD),U.addAtIndex=function(e,A){Ju(e,this.b),this.c.addAtIndex(this.a+e,A),++this.b},U.getAtIndex=function(e){return ee(e,this.b),this.c.getAtIndex(this.a+e)},U.removeAtIndex=function(e){var A;return ee(e,this.b),A=this.c.removeAtIndex(this.a+e),--this.b,A},U.setAtIndex=function(e,A){return ee(e,this.b),this.c.setAtIndex(this.a+e,A)},U.size=function(){return this.b},U.a=0,U.b=0;var ODt=M(133);p(233,460,G2,ih),U.clear=function(){this.a.clear()},U.contains=function(e){return this.a.containsKey(e)},U.Tb=function(){var e;return e=this.a.ad().Tb(),new fh(e)},U.remove=function(e){return this.a.containsKey(e)?(this.a.remove(e),!0):!1},U.size=function(){return this.a.size()};var qDt=M(233);p(234,1,{},fh),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a.cd()},U.dd=function(){var e;return e=this.a.dd(),e.hd()},U.ed=function(){this.a.ed()};var zDt=M(234);p(135,41,my,oD),U.clear=function(){this.a.clear()},U.contains=function(e){return this.a.containsValue(e)},U.Tb=function(){var e;return e=this.a.ad().Tb(),new UD(e)},U.size=function(){return this.a.size()};var KDt=M(135);p(136,1,{},UD),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a.cd()},U.dd=function(){var e;return e=this.a.dd(),e.jd()},U.ed=function(){this.a.ed()};var JDt=M(136),YDt=YN();p(164,1,{164:1,86:1}),U.mb=function(e){var A;return Yt(e,86)?(A=e,$8(this.c,A.hd())&&$8(this.d,A.jd())):!1},U.hd=function(){return this.c},U.jd=function(){return this.d},U.ob=function(){return VU(this.c)^VU(this.d)},U.kd=function(e){return Sd(this,e)},U.pb=function(){return this.c+\"=\"+this.d};var XDt=M(164);p(146,164,{164:1,146:1,86:1},jU);var ZDt=M(146);p(465,1,{86:1}),U.mb=function(e){var A;return Yt(e,86)?(A=e,$8(this.b.value[0],A.hd())&&$8(NL(this),A.jd())):!1},U.ob=function(){return VU(this.b.value[0])^VU(NL(this))},U.pb=function(){return this.b.value[0]+\"=\"+NL(this)};var WDt=M(465);p(238,107,{107:1,238:1,111:1,476:1,474:1}),U._c=function(e){return Zv(this,e)},U.containsKey=function(e){return JU(this,e)},U.ad=function(){return new Dh(this)},U.get=function(e){return Be(this,e)},U.keySet=function(){return new br(this)};var _Dt=M(238);p(239,460,G2,Dh),U.contains=function(e){return Yt(e,86)&&Zv(this.b,e)},U.Tb=function(){return new J8(this.b)},U.remove=function(e){var A;return Yt(e,86)?(A=e,fF(this.b,A)):!1},U.size=function(){return this.b.c};var $Dt=M(239);p(92,460,G2,br),U.Ub=function(){return new kh(this)},U.clear=function(){Mi(this.a)},U.contains=function(e){return JU(this.a,e)},U.Tb=function(){var e;return e=new J8(new K8(this.a).b),new jr(e)},U.remove=function(e){return JU(this.a,e)?(V3(this.a,e),!0):!1},U.size=function(){return this.a.c};var aDt=M(92);p(93,1,{},jr),U.bd=function(e){jn(this,e)},U.cd=function(){return Nr(this.a.a)},U.dd=function(){var e;return e=H9(this.a),e.hd()},U.ed=function(){AB(this.a)};var t2t=M(93);p(468,41,my),U.add=function(e){return _O(Fs(this,e)),!0},U.addAll=function(e){return y1(e),SD(e!=this,\"Can't add a queue to itself\"),cT(this,e)},U.clear=function(){for(;uT(this)!=null;);};var e2t=M(468);p(461,74,Z6),U.addAtIndex=function(e,A){var n;n=this.Xb(e),n.fd(A)},U.addAllAtIndex=function(e,A){var n,P,r,i;for(y1(A),i=!1,r=this.Xb(e),P=A.Tb();P.cd();)n=P.dd(),r.fd(n),i=!0;return i},U.getAtIndex=function(e){return KT(this,e)},U.Tb=function(){return BQ(this,0)},U.removeAtIndex=function(e){return rb(this,e)},U.setAtIndex=function(e,A){var n,P;n=this.Xb(e);try{return P=n.dd(),n.gd(A),P}catch(r){throw r=_1(r),Yt(r,147)?At(new XP(\"Can't set element \"+e)):At(r)}};var A2t=M(461);p(409,41,{5:1,35:1,41:1,37:1},Bd),U.add=function(e){return TL(this,e),!0},U.clear=function(){this.b!=this.c&&(this.a=c(qn,A0,1,8,5,1),this.b=0,this.c=0)},U.contains=function(e){return ok(new fL(this),e)},U.isEmpty=function(){return $7(this)},U.Tb=function(){return new fL(this)},U.remove=function(e){return rO(new fL(this),e)},U.size=function(){return this.c-this.b&this.a.length-1},U.Ub=function(){return new x8(this)},U.Wb=function(e){var A;return A=this.c-this.b&this.a.length-1,e.length<A&&(e=lu(new Array(A),e)),SF(this,e,A),e.length>A&&(e[A]=null),e},U.b=0,U.c=0;var n2t=M(409);p(202,1,{},fL),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a!=this.b},U.dd=function(){return qk(this)},U.ed=function(){EF(this)},U.a=0,U.b=0,U.c=-1;var P2t=M(202);p(21,1,{},Zt),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a<this.c.a.length},U.dd=function(){return _t(this)},U.ed=function(){x9(this.b!=-1),cA(this.c,this.a=this.b),this.b=-1},U.a=0,U.b=-1;var r2t=M(21);p(275,w.Function,{},ki),U.ld=function(e,A){return rr(e,A)},p(482,w.Function,{},$l),U.md=function(e,A){return z(e,A)<0?-1:z(e,A)>0?1:0},p(181,74,{4:1,35:1,41:1,74:1,37:1,70:1,125:1},lU),U.contains=function(e){return Pk(this,e)!=-1},U.getAtIndex=function(e){return ee(e,this.a.length),this.a[e]},U.setAtIndex=function(e,A){var n;return n=(ee(e,this.a.length),this.a[e]),this.a[e]=A,n},U.size=function(){return this.a.length},U.toArray=function(){return jm(this,c(qn,A0,1,this.a.length,5,1))},U.Wb=function(e){return jm(this,e)};var i2t=M(181);p(47,w.Function,{},Q0),U.ld=function(e,A){return e-A},p(183,1,{183:1},vd),U.mb=function(e){var A,n,P;if(this===e)return!0;if(!Yt(e,183)||(P=e,n=vL(this.a),n!=vL(P.a)))return!1;for(A=0;A<=n;A++)if((this.a[A]|0)!=(P.a[A]|0))return!1;return!0},U.ob=function(){var e,A,n,P;for(n=vL(this.a),e=-2128831035^n,A=0;A<=n;A++)P=this.a[A]|0,e=e*Ql&-1^P&255,e=e*Ql&-1^P>>>8&255,e=e*Ql&-1^P>>>16&255,e=e*Ql&-1^P>>>24;return e},U.pb=function(){var e,A;if(Gq(this)==0)return\"{}\";for(A=new bn(\"{\"),e=Pb(this,0),A.a+=e;(e=Pb(this,e+1))!=-1;)A.a+=\", \",A.a+=e;return A.a+=\"}\",A.a};var f2t=M(183);p(190,1,{35:1,37:1},fU),U.Ub=function(){return new x8(this)},U.Vb=function(){return new dh(this.Ub())},U.add=function(e){throw At(new mA)},U.addAll=function(e){throw At(new mA)},U.clear=function(){throw At(new mA)},U.contains=function(e){return this.b.contains(e)},U.containsAll=function(e){return this.b.containsAll(e)},U.isEmpty=function(){return this.b.isEmpty()},U.Tb=function(){return new L7(this.b.Tb())},U.remove=function(e){throw At(new mA)},U.removeAll=function(e){throw At(new mA)},U.retainAll=function(e){throw At(new mA)},U.size=function(){return this.b.size()},U.toArray=function(){return this.b.toArray()},U.pb=function(){return P2(this.b)};var D2t=M(190);p(350,1,{},L7),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a.cd()},U.dd=function(){return this.a.dd()},U.ed=function(){Sx()};var u2t=M(350);p(191,190,{35:1,37:1,70:1},NU),U.Ub=function(){return new x8(this)},U.addAtIndex=function(e,A){throw At(new mA)},U.addAllAtIndex=function(e,A){throw At(new mA)},U.mb=function(e){return SP(this.a,e)},U.getAtIndex=function(e){return this.a.getAtIndex(e)},U.ob=function(){return fr(this.a)},U.indexOf=function(e){return this.a.indexOf(e)},U.isEmpty=function(){return this.a.isEmpty()},U.lastIndexOf=function(e){return this.a.lastIndexOf(e)},U.removeAtIndex=function(e){throw At(new mA)},U.setAtIndex=function(e,A){throw At(new mA)},U.subList=function(e,A){return new NU(this.a.subList(e,A))};var Q2t=M(191);p(347,1,{111:1},s7),U.getOrDefault=function(e,A){var n;return n=this.c.get(e),n==null&&!this.c.containsKey(e)?A:n},U.putIfAbsent=function(e,A){var n;return n=this.c.get(e),n??Vh()},U.replace=function(e,A){return this.c.containsKey(e)?Vh():null},U.clear=function(){throw At(new mA)},U.containsKey=function(e){return this.c.containsKey(e)},U.containsValue=function(e){return this.c.containsValue(e)},U.ad=function(){return!this.a&&(this.a=new rg(this.c.ad())),this.a},U.mb=function(e){return SP(this.c,e)},U.get=function(e){return this.c.get(e)},U.ob=function(){return fr(this.c)},U.isEmpty=function(){return this.c.isEmpty()},U.keySet=function(){return!this.b&&(this.b=new TU(this.c.keySet())),this.b},U.put=function(e,A){return Vh()},U.putAll=function(e){throw At(new mA)},U.remove=function(e){throw At(new mA)},U.size=function(){return this.c.size()},U.pb=function(){return P2(this.c)},U.values=function(){return!this.d&&(this.d=new fU(this.c.values())),this.d};var o2t=M(347);p(192,190,QE,TU),U.Ub=function(){return new x8(this)},U.mb=function(e){return SP(this.b,e)},U.ob=function(){return fr(this.b)};var U2t=M(192);p(348,192,QE,rg),U.contains=function(e){return this.b.contains(e)},U.containsAll=function(e){return this.b.containsAll(e)},U.Tb=function(){var e;return e=this.b.Tb(),new y7(e)},U.toArray=function(){var e;return e=this.b.toArray(),_G(e,e.length),e};var L2t=M(348);p(351,1,{},y7),U.bd=function(e){jn(this,e)},U.dd=function(){return new uh(this.a.dd())},U.cd=function(){return this.a.cd()},U.ed=function(){throw At(new mA)};var s2t=M(351);p(235,1,{86:1},uh),U.mb=function(e){return this.a.mb(e)},U.hd=function(){return this.a.hd()},U.jd=function(){return this.a.jd()},U.ob=function(){return this.a.ob()},U.kd=function(e){throw At(new mA)},U.pb=function(){return P2(this.a)};var y2t=M(235);p(349,191,{35:1,37:1,70:1,125:1},Pg);var l2t=M(349);p(269,1,Cf,mw),U.Rb=function(e,A){return rr(e.b,A.b)},U.mb=function(e){return this===e};var h2t=M(269),Vl;p(379,1,Cf,bw),U.Rb=function(e,A){return y1(e),Yk(e,(y1(A),A))},U.mb=function(e){return this===e};var T2t=M(379);p(263,33,Tn,hh);var c2t=M(263);p(60,187,{4:1,5:1,107:1,111:1},Jn,gk);var w2t=M(60);p(72,460,{4:1,5:1,35:1,41:1,37:1,72:1,87:1},ji,oU),U.add=function(e){return xA(this,e)},U.clear=function(){i8(this.a)},U.contains=function(e){return du(this,e)},U.isEmpty=function(){return aP(this.a)==0},U.Tb=function(){var e;return e=new ih(this.a).a.ad().Tb(),new fh(e)},U.remove=function(e){return n3(this,e)},U.size=function(){return aP(this.a)};var g2t=M(72);p(382,1,{35:1},Od),U.Tb=function(){return new PT(this)},U.c=0;var d2t=M(382);p(250,1,{},PT),U.bd=function(e){jn(this,e)},U.dd=function(){return this.d=this.a[this.c++],this.d},U.cd=function(){var e;return this.c<this.a.length?!0:(e=this.b.next(),e.done?!1:(this.a=e.value[1],this.c=0,!0))},U.ed=function(){b5(this.e,this.d.hd()),this.c!=0&&--this.c},U.c=0,U.d=null;var B2t=M(250);p(380,1,{35:1},qd),U.Tb=function(){return new $3(this)},U.c=0,U.d=0;var v2t=M(380);p(249,1,{},$3),U.bd=function(e){jn(this,e)},U.dd=function(){return this.c=this.a,this.a=this.b.next(),new ad(this.d,this.c,this.d.d)},U.cd=function(){return!this.a.done},U.ed=function(){yk(this.d,this.c.value[0])};var F2t=M(249);p(381,465,{86:1},ad),U.hd=function(){return this.b.value[0]},U.jd=function(){return NL(this)},U.kd=function(e){return ak(this.a,this.b.value[0],e)},U.c=0;var k2t=M(381);p(343,461,{4:1,5:1,35:1,41:1,74:1,37:1,70:1},Bv),U.add=function(e){return zv(this,e,this.c.b,this.c),!0},U.clear=function(){Av(this)},U.Xb=function(e){return BQ(this,e)},U.size=function(){return this.b},U.b=0;var m2t=M(343);p(344,1,{},tB),U.bd=function(e){jn(this,e)},U.fd=function(e){zv(this.d,e,this.b.b,this.b),++this.a,this.c=null},U.cd=function(){return this.b!=this.d.c},U.dd=function(){return dL(this)},U.ed=function(){jF(this)},U.gd=function(e){x9(!!this.c),this.c.c=e},U.a=0,U.c=null;var b2t=M(344);p(189,1,{},nU);var j2t=M(189);p(317,1,{},jw),U.nd=function(e){return Id(this,e)},U.od=function(e){return e.hd()};var R2t=M(317);p(318,1,{},Rw),U.nd=function(e){return xd(this,e)},U.od=function(e){return e.jd()};var p2t=M(318);p(147,33,{4:1,19:1,33:1,27:1,147:1},R7);var M2t=M(147);p(148,468,my,kg,ig),U.addAll=function(e){var A,n,P;for(y1(e),bd(e!=this),P=this.b.a.length,n=e.Tb();n.cd();)A=n.dd(),Ft(this.b,y1(A));return P!=this.b.a.length?(LQ(this,0),!0):!1},U.clear=function(){bi(this.b.a,0)},U.contains=function(e){return(e==null?-1:$r(this.b,e,0))!=-1},U.Tb=function(){return new l7(this)},U.remove=function(e){var A;return A=e==null?-1:$r(this.b,e,0),A<0?!1:(yT(this,A),!0)},U.removeAll=function(e){return Ds(this.b,e)?(LQ(this,0),!0):!1},U.retainAll=function(e){return Ok(this.b,e)?(LQ(this,0),!0):!1},U.size=function(){return this.b.a.length},U.Ub=function(){return new x8(this)},U.toArray=function(){return U3(this.b.a)},U.Wb=function(e){return Qf(this.b,e)};var C2t=M(148);p(403,1,{},l7),U.bd=function(e){jn(this,e)},U.cd=function(){return this.a<this.c.b.a.length},U.dd=function(){return MD(this.a<this.c.b.a.length),this.b=this.a++,G(this.c.b,this.b)},U.ed=function(){x9(this.b!=-1),yT(this.c,this.a=this.b),this.b=-1},U.a=0,U.b=-1;var H2t=M(403);p(66,1,{},n2,$i),U.a=0,U.b=0;var Mc,Cc,q8t=0,V2t=M(66);p(61,1,{},x8);var E2t=M(61);p(193,61,{},kh);var S2t=M(193);p(154,1,{},Ld,RL),U.pb=function(){return this.a?this.e.length==0?this.a.a:this.a.a+(\"\"+this.e):this.c};var I2t=M(154);p(44,238,{4:1,5:1,107:1,238:1,111:1,476:1,474:1,44:1},cP,Ji),U.clear=function(){Mi(this)},U.ad=function(){return new K8(this)},U.put=function(e,A){return We(this,e,A)},U.remove=function(e){return V3(this,e)},U.size=function(){return this.c},U.c=0;var gS=M(44);p(73,1,{},J8),U.bd=function(e){jn(this,e)},U.dd=function(){return H9(this)},U.cd=function(){return Nr(this.a)},U.ed=function(){AB(this)};var x2t=M(73);p(81,239,G2,K8),U.clear=function(){Mi(this.a)};var N2t=M(81);p(123,146,{164:1,146:1,86:1,123:1},IL),U.b=!1;var z8t=M(123);p(195,1,{},PU),U.pb=function(){return\"State: mv=\"+this.c+\" value=\"+this.d+\" done=\"+this.a+\" found=\"+this.b},U.a=!1,U.b=!1,U.c=!1;var G2t=M(195);p(83,55,Ul,vu),U.pd=function(){return!1},U.qd=function(){return!1};var Hc,dS,BS,vS,K8t=Yr(83,RO);p(362,83,Ul,fd),U.qd=function(){return!0};var O2t=Yr(362,null);p(363,83,Ul,sd),U.pd=function(){return!0},U.qd=function(){return!0};var q2t=Yr(363,null);p(364,83,Ul,Dd),U.pd=function(){return!0};var z2t=Yr(364,null);p(134,460,{4:1,5:1,35:1,41:1,37:1,87:1},ch,wU),U.Ub=function(){return new kh(this)},U.add=function(e){return Yi(this,e)},U.clear=function(){Mi(this.a)},U.contains=function(e){return kU(this,e)},U.Tb=function(){var e;return e=new J8(new K8(new br(this.a).a).b),new jr(e)},U.remove=function(e){return V3(this.a,e)!=null},U.size=function(){return this.a.c};var K2t=M(134);p(375,74,{4:1,5:1,35:1,41:1,74:1,37:1,70:1,125:1},C7),U.addAtIndex=function(e,A){Iu(e,this.a.a.length+1),f8(this.a,e,A)},U.add=function(e){return mg(this,e)},U.addAllAtIndex=function(e,A){return Iu(e,this.a.a.length+1),Kk(this.a,e,A)},U.addAll=function(e){return MP(this.a,e)},U.clear=function(){bi(this.a.a,0)},U.contains=function(e){return $r(this.a,e,0)!=-1},U.containsAll=function(e){return oQ(this.a,e)},U.getAtIndex=function(e){return Iu(e,this.a.a.length),G(this.a,e)},U.indexOf=function(e){return $r(this.a,e,0)},U.isEmpty=function(){return this.a.a.length==0},U.Tb=function(){return new Zt(this.a)},U.lastIndexOf=function(e){return Vd(this.a,e)},U.removeAtIndex=function(e){return Iu(e,this.a.a.length),cA(this.a,e)},U.removeAll=function(e){return Ds(this.a,e)},U.Yb=function(e,A){gv(this.a,e,A)},U.setAtIndex=function(e,A){return Iu(e,this.a.a.length),Zr(this.a,e,A)},U.size=function(){return this.a.a.length},U.subList=function(e,A){return new JD(this.a,e,A)},U.toArray=function(){return U3(this.a.a)},U.Wb=function(e){return bg(this,e)},U.pb=function(){return Rb(this.a)};var J2t=M(375);p(358,107,x4),U.containsKey=function(e){return G3(this,e)},U.containsValue=function(e){if(e==null)throw At(new Rr);return PB(this.e,e)},U.ad=function(){return new QD(this.e)},U.get=function(e){return vv(this,e)},U.put=function(e,A){return sF(this,e,A)},U.putIfAbsent=function(e,A){return G3(this,e)?this.get(e):this.put(e,A)},U.remove=function(e){if(e==null)throw At(new Rr);return jL(this.e,e)},U.replace=function(e,A){if(A==null)throw At(new Rr);return G3(this,e)?this.put(e,A):null};var Y2t=M(358);p(270,1,{},Kw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return e};var X2t=M(270);p(62,1,{},wP),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return t3(this.a,this.b,e)};var Z2t=M(62);p(406,1,{},h7),U.b=null,U.c=!1;var W2t=M(406);p(405,1,{},T7);var _2t=M(405);p(407,63,Tn,BF);var $2t=M(407);p(96,55,{4:1,32:1,55:1,96:1},bU);var FS,Yo,Vc,El=Yr(96,hO);p(169,1,{},Ou);var a2t=M(169);p(321,1,{},pw),U.rd=function(e,A){e.add(A)};var tut=M(321);p(323,1,{},Mw),U.qc=function(){return new n1};var eut=M(323);p(324,1,{},Cw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return QL(e)};var Aut=M(324);p(325,1,{},Hw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return Yt(e,125)?new Pg(e):new NU(e)};var nut=M(325);p(326,1,{},Vw),U.qc=function(){return new Jn};var Put=M(326);p(327,1,{},Ew),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return new s7(e)};var rut=M(327);p(229,1,{},al),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return QL(e)};var iut=M(229);p(330,1,{},Sw),U.qc=function(){return new ji};var fut=M(330);p(331,1,{},Iw),U.rd=function(e,A){xA(e,A)};var Dut=M(331);p(334,1,{},xw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return QL(e)};var uut=M(334);p(335,1,{},Nw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return new TU(e)};var Qut=M(335);p(320,1,{},Eg),U.rd=function(e,A){QN(this.a,this.b,e,A)};var out=M(320);p(322,1,{},Gw);var Uut=M(322);p(328,1,{},DB),U.rd=function(e,A){IY(this.a,this.c,this.b,e,A)},U.b=!1;var Lut=M(328);p(329,1,{},Ow);var sut=M(329);p(332,1,{},qw);var yut=M(332);p(333,1,{},zw),U.nd=function(e){return y1(e),new wP(this,e)},U.od=function(e){return e};var lut=M(333);p(353,1,{}),U.b=!1;var hut=M(353);p(194,353,{},dh);var Tut=M(194);p(354,1,{},Jw);var cut=M(354);p(355,1,{},c7);var wut=M(355);p(356,1,{},Ig);var gut=M(356);p(227,115,ul);var dut=M(227);p(228,227,ul,mh);var But=M(228);p(319,227,ul,Wg);var vut=M(319);p(345,462,{},hd),U.a=0,U.b=0;var kS=null,Fut=M(345);p(416,1,{},g7);var kut=M(416);p(415,1,{},xg);var mut=M(415);p(414,1,{},d7);var but=M(414);p(215,67,{67:1,32:1,215:1},Pp),U.b=0;var jut=M(215);p(254,1,{254:1},Rd);var Rut=M(254);p(213,1,{},ud),U.a=0,U.d=0,U.i=!1,U.j=!1,U.o=0,U.p=0,U.v=0,U.w=0,U.C=!1;var put=M(213);p(277,1,{},Yw),U.Rb=function(e,A){return Zh(A.o.length,e.o.length)},U.mb=function(e){return this===e};var Mut=M(277);p(278,1,{},H7);var Cut=M(278);p(179,1,{179:1},wF);var J8t=M(179);p(359,358,{4:1,107:1,111:1},pd),U.get=function(e){return Rv(this,e)},U.put=function(e,A){return pv(this,e,A)},U.clear=function(){i8(new QD(this.e).a)},U.a=0,U.b=0,U.c=0,U.d=0;var Xo,Hut=M(359);p(237,1,{32:1,237:1},Sg),U.Sb=function(e){return JG(this,e)},U.b=0;var Vut=M(237);p(276,1,{},UB),U.b=!1,U.c=0,U.d=0;var Eut=M(276);p(178,1,{178:1},GR),U.a=0,U.b=!1,U.i=0,U.j=0,U.n=0;var mS,bS,jS,Y8t=M(178);p(168,1,{32:1,168:1},GB),U.Sb=function(e){return jk(this,e)},U.mb=function(e){return jk(this,e)==0},U.pb=function(){var e,A,n,P,r,i,f,D;for(D=new C0,n=this.i,r=0,f=n.length;r<f;++r)e=n[r],D.a+=e,D.a+=\",\";for(this.i.length!=0&&Ln(D,D.a.length-1),D.a+=\";\",A=this.d,P=0,i=A.length;P<i;++P)e=A[P],D.a+=e,D.a+=\",\";return this.d.length!=0&&Ln(D,D.a.length-1),D.a},U.b=0,U.e=0,U.g=!1;var RS=M(168);p(257,1,{257:1},Nk),U.a=0;var Sut=M(257);p(389,1,{},xR),U.c=0;var Ec,Iut=M(389);p(240,1,{}),U.g=0,U.r=0,U.s=0,U.t=0,U.B=0,U.F=!1;var xut=M(240);p(360,1,{},Xw);var Nut=M(360);p(118,240,{118:1},qL),U.sd=function(e){return ZQ(this,this.b)},U.b=!1;var Gut=M(118);p(214,118,{118:1},d3),U.sd=function(e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v;if(!e)return ZQ(this,this.a);if(e.b==0)return ZQ(this,this.b);for(P=zX(this,e),n=e.i,A=e.d,L=c(Pt,it,6,P.length,16,1),i=0;i<64;i++){for((L[0]||this.v[0].d.length==1)&&(P[0]=0),o=1,D=1;D<this.v.length;D++)L[o]||this.v[D].d.length==1?P[o]=P[o-1]:P[o]+=P[o-1],++o;for(h=this.u,T=0,g=h.length;T<g;++T)l=h[T],L[o]||l.b.length==1?P[o]=P[o-1]:P[o]+=P[o-1],++o;if(P[P.length-1]==0)return ZQ(this,this.b);for(y=Hn(this.c)*P[P.length-1],f=0;f<P.length;f++)if(y<P[f]){if(k=Mn(n,n.length),r=Mn(A,A.length),f<this.v.length){for(s=1;s<this.v[f].d.length;s++)if(++k[f],k[f]==this.v[f].d.length&&(k[f]=0),v=Xu(this,k,r),Q=u9(this.D,v),(Q<0?-1:Q)==-1)return v}else for(f-=this.v.length,s=1;s<this.u[f].b.length;s++)if(++r[f],r[f]==this.u[f].b.length&&(r[f]=0),v=Xu(this,k,r),Q=u9(this.D,v),(Q<0?-1:Q)==-1)return v;L[f]=!0;break}}return ZQ(this,this.b)},U.a=!1;var Out=M(214);p(279,240,{},Dj),U.sd=function(e){return this.a==null||(this.b+1==this.a.length&&ftt(this),this.a==null)?null:(++this.b,this.a[this.b])},U.b=0;var qut=M(279);p(365,1,{},Zw),U.Rb=function(e,A){return rr(A.e,e.e)},U.mb=function(e){return this===e};var zut=M(365);p(258,1,{32:1,258:1},Ng),U.Sb=function(e){return this.a<e.a?-1:this.a>e.a?1:0},U.a=0;var Kut=M(258);p(50,1,O2),U.g=!1;var Sl,Jut=M(50);p(248,50,O2,eT),U.td=function(e,A){var n,P,r,i,f;if(f=YQ(e,this.f)<0?1:0,A!=null)for(P=this.f,r=0,i=P.length;r<i;++r)n=P[r],A[n]+=f/4;return f},U.ud=function(e,A){var n,P,r,i,f,D,Q;if(D=YQ(e,this.f),D==0||this.b==D>0)return!1;for(Q=_8(Z0(e,this.f[2]),Z0(e,this.f[1])),ri(Q),f=w.Math.abs(D)<HA?-2*D:2*(l1-D),this.a&&(f=-f),P=this.c,r=0,i=P.length;r<i;++r)n=P[r],vf(e,n,Z0(e,this.f[1]),Q,f);return!0},U.vd=function(){return 5},U.pb=function(){var e;return e=new bn(\"binap rule (\"+(this.b?\"positive\":\"negative\")+\" torsion):\"),r2(this,e),e.a},U.a=!1,U.b=!1;var Yut=M(248);p(156,1,{},XQ),U.b=0,U.e=!1,U.n=0;var pS,Xut=M(156);p(361,1,{},Ww),U.Rb=function(e,A){return Y3(),rr(e.e,A.e)},U.mb=function(e){return this===e};var Zut=M(361);p(84,50,{50:1,84:1},Cg,nk,is,hT),U.td=function(e,A){var n;return n=V_(this,e),A!=null&&n>0&&(A[this.f[0]]+=n/2,A[this.f[1]]+=n/2),n},U.ud=function(e,A){var n,P,r,i,f,D,Q;if(r=Mr(e,this.f[1])-Mr(e,this.f[0]),i=Cr(e,this.f[1])-Cr(e,this.f[0]),f=Hr(e,this.f[1])-Hr(e,this.f[0]),n=w.Math.sqrt(r*r+i*i+f*f),P=0,this.a.length==2?n<this.a[0]?P=(n-this.a[0])/n:n>this.a[1]&&(P=(n-this.a[1])/n):n<this.a[0]?P=(n-this.a[0])/n:n>this.a[0]&&(P=(n-this.a[0])/n),w.Math.abs(P)<.001)return!1;if(D=A*P,Q=e.o,this.c==10){if(Ct(Q,this.f[0])==1&&Ct(Q,this.f[1])!=1)return n8(Z0(e,this.f[0]),r*D,i*D,f*D),!0;if(Ct(Q,this.f[0])!=1&&Ct(Q,this.f[1])==1)return n8(Z0(e,this.f[1]),-r*D,-i*D,-f*D),!0}return D/=2,V5(e,this.f[0],this.b,r*D,i*D,f*D),V5(e,this.f[1],this.b,-r*D,-i*D,-f*D),!0},U.vd=function(){return 0},U.pb=function(){var e,A;if(A=new bn(\"distance rule:\"),r2(this,A),this.a.length==1?q(A,(A9(),UE+Q9(this.a[0],5))):q(A,(A9(),\" min:\"+Q9(this.a[0],5)+\" max:\"+Q9(this.a[1],5))),this.b!=null)for(q(A,\" not:\"+this.b[0]),e=1;e<this.b.length;e++)q(A,\",\"+this.b[e]);return A.a},U.c=0;var MS=M(84);p(247,50,O2,U5),U.td=function(e,A){var n,P,r,i,f,D,Q;for(n=new N0,f=new N0,P=j1(Ut,[c0,Tt],[15,6],15,[this.f.length,3],2),n6(e,this.f,n,f,P),Q=0,i=0;i<this.f.length;i++)r=-(f.a*P[i][0]+f.b*P[i][1]+f.c*P[i][2]),D=20*r*r,A!=null&&(A[this.f[i]]+=D),Q+=D;return Q},U.ud=function(e,A){var n,P,r,i,f;for(n=new N0,f=new N0,P=j1(Ut,[c0,Tt],[15,6],15,[this.a.length,3],2),n6(e,this.a,n,f,P),i=0;i<this.f.length;i++)r=-(f.a*(Mr(e,this.f[i])-n.a)+f.b*(Cr(e,this.f[i])-n.b)+f.c*(Hr(e,this.f[i])-n.c)),V5(e,this.f[i],this.f,.5*r*A*f.a,.5*r*A*f.b,.5*r*A*f.c);return!0},U.vd=function(){return 1},U.pb=function(){var e;return e=new bn(\"plane rule:\"),r2(this,e),e.a};var Wut=M(247);p(97,67,{67:1,32:1,97:1},Hu,Xd),U.b=!1,U.c=0,U.e=0;var CS=M(97);p(377,50,O2,fg),U.td=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S,x;for(i=c(Ut,Tt,6,3,15,1),L=0;L<this.f.length;L++)i[0]+=Mr(e,this.f[L]),i[1]+=Cr(e,this.f[L]),i[2]+=Hr(e,this.f[L]);for(g=0;g<3;g++)i[g]/=this.f.length;for(n=j1(Ut,[c0,Tt],[15,6],15,[this.f.length,3],2),s=0;s<this.f.length;s++)n[s][0]=Mr(e,this.f[s])-i[0],n[s][1]=Cr(e,this.f[s])-i[1],n[s][2]=Hr(e,this.f[s])-i[2];for(R=j1(Ut,[c0,Tt],[15,6],15,[3,3],2),y=0;y<this.f.length;y++)for(T=0;T<3;T++)for(k=0;k<3;k++)R[T][k]+=n[y][T]*n[y][k];for(S=new sy(R),P=S.e,b=0,l=1;l<3;l++)P[l]>P[b]&&(b=l);for(r=S.a,j=c(Ut,Tt,6,3,15,1),h=0;h<3;h++)j[h]=r[h][b];for(x=0,o=0;o<this.f.length;o++)v=j[0]*n[o][0]+j[1]*n[o][1]+j[2]*n[o][2],f=v*j[0]-n[o][0],D=v*j[1]-n[o][1],Q=v*j[2]-n[o][2],C=10*f*f+D*D+Q*Q,A!=null&&(A[this.f[o]]+=C),x+=C;return x},U.ud=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j,R,C,S;for(i=c(Ut,Tt,6,3,15,1),D=0;D<this.f.length;D++)i[0]+=Mr(e,this.f[D]),i[1]+=Cr(e,this.f[D]),i[2]+=Hr(e,this.f[D]);for(k=0;k<3;k++)i[k]/=this.f.length;for(n=j1(Ut,[c0,Tt],[15,6],15,[this.f.length,3],2),Q=0;Q<this.f.length;Q++)n[Q][0]=Mr(e,this.f[Q])-i[0],n[Q][1]=Cr(e,this.f[Q])-i[1],n[Q][2]=Hr(e,this.f[Q])-i[2];for(C=j1(Ut,[c0,Tt],[15,6],15,[3,3],2),o=0;o<this.f.length;o++)for(g=0;g<3;g++)for(v=0;v<3;v++)C[g][v]+=n[o][g]*n[o][v];for(S=new sy(C),P=S.e,j=0,L=1;L<3;L++)P[L]>P[j]&&(j=L);for(r=S.a,R=c(Ut,Tt,6,3,15,1),s=0;s<3;s++)R[s]=r[s][j];for(b=c(Ut,Tt,6,this.f.length,15,1),y=0;y<this.f.length;y++)b[y]=R[0]*n[y][0]+R[1]*n[y][1]+R[2]*n[y][2];if(A==1){for(h=!1,T=b[0]<b[1],l=2;l<this.f.length;l++)if(T!=b[l-1]<b[l]){h=!0;break}if(h)return!1}for(f=0;f<this.f.length;f++)n8(Z0(e,this.f[f]),A*(b[f]*R[0]-n[f][0]),A*(b[f]*R[1]-n[f][1]),A*(b[f]*R[2]-n[f][2]));return!0},U.vd=function(){return 2},U.pb=function(){var e;return e=new bn(\"line rule:\"),r2(this,e),e.a};var _ut=M(377);p(378,50,O2,bB),U.td=function(e,A){var n,P,r,i,f;if(i=0,P=Xj(this,e),f=0,this.f[3]==-1?D2(e,P,this.f[4],this.f[2])||++f:(D2(e,P,this.f[4],this.f[2])||++f,D2(e,P,this.f[4],this.f[3])&&++f),f!=0)for(n=0;n<this.f.length;n++)this.f[n]!=-1&&(r=.68*f,A!=null&&(A[this.f[n]]+=r),i+=r);return i},U.ud=function(e,A){var n,P,r,i,f,D,Q;if(D=Xj(this,e),f=this.f[3]==-1&&!D2(e,D,this.f[4],this.f[2])||this.f[3]!=-1&&!D2(e,D,this.f[4],this.f[2])&&D2(e,D,this.f[4],this.f[3]),!f)return!1;for(Q=nY(this,e),P=this.a,r=0,i=P.length;r<i;++r)n=P[r],vf(e,n,Z0(e,this.f[4]),Q,l1);return!0},U.vd=function(){return 4},U.pb=function(){var e,A,n,P,r;for(r=new bn(\"stereo rule:\"),r2(this,r),r.a+=\" rotatable:\",A=this.a,n=0,P=A.length;n<P;++n)e=A[n],r.a+=e+\" \";return r.a};var $ut=M(378);p(199,50,O2,ZL),U.td=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(n=FL(e,this.f),isNaN(n))return 0;if(n<0&&(n+=m0),l=180*n/l1,f=db(this,n),f==-1)for(q1(),L=this.e,s=0,y=L.length;s<y;++s);if(Q=Vb(this,n,f),Q==0)return 0;for(P=w.Math.abs(l-this.e[f]),P>180&&(P=360-P),P>60&&(P=60),D=e.o,o=3*Q*P*P/3600,h=0,i=0;i<Ct(D,this.f[1]);i++)_(D,this.f[1],i)!=this.f[2]&&(A!=null&&(A[_(D,this.f[1],i)]+=o),h+=o);for(r=0;r<Ct(D,this.f[2]);r++)_(D,this.f[2],r)!=this.f[1]&&(A!=null&&(A[_(D,this.f[2],r)]+=o),h+=o);return h},U.ud=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,k,v,b,j;if(Q=FL(e,this.f),isNaN(Q)||(Q<0&&(Q+=m0),y=db(this,Q),b=Vb(this,Q,y),b==0)||(f=l1*this.e[y]/180-Q,w.Math.abs(f)>l1&&(f=f<0?m0+f:f-m0),w.Math.abs(f)<.0031415926535897933))return!1;if(j=_8(Z0(e,this.f[2]),Z0(e,this.f[1])),ri(j),f*=A*b,g=e.o,this.a!=null)for(k=this.d==0?-f:f,P=this.a,r=0,i=P.length;r<i;++r)n=P[r],vf(e,n,Z0(e,this.f[1]),j,k);else for(D=o1(g,this.f[1],this.f[2]),l=D!=-1&&(g.q&&D<g.i?TP(g.q,D):0)<=5,s=1;s<=2;s++)for(o=(s==1?-2:2)*X3(g,this.f[s]),h=0;h<Ct(g,this.f[s]);h++)if(L=_(g,this.f[s],h),L!=this.f[3-s]&&(um(e,L,this.f[s],j,f/o),!l))for(T=0;T<g.k[L];T++)v=g.j[L][T],v!=L&&g.e[v]!=1&&um(e,v,this.f[s],j,f/(4*o));return!0},U.vd=function(){return 3},U.pb=function(){var e,A;for(A=new bn(\"torsion rule:\"),r2(this,A),A.a+=\" torsions:\",e=0;e<this.e.length;e++)e!=0&&(A.a+=\",\"),q(A,this.e[e]+\"(\"+this.b[e]+\")\");return A.a},U.d=0;var aut=M(199),Kt=K9(\"S\"),E=K9(\"B\"),F=K9(\"I\"),Pt=K9(\"Z\"),Ut=K9(\"D\"),Oe=K9(\"F\"),XA=K9(\"J\"),Fr=K9(\"C\");U=s0(\"OCL.Canonizer\",cd),U=s0(\"OCL.CanonizerUtil\",Tw),U.BACKBONE=z1t,U.NORMAL=K1t,U.NOSTEREO=J1t,U.NOSTEREO_TAUTOMER=Y1t,U.TAUTOMER=X1t,U.getIDCode=qJ,U=s0(\"OCL.ConformerGenerator\",gd),U.STRATEGY_ADAPTIVE_RANDOM=Z1t,U.STRATEGY_LIKELY_RANDOM=W1t,U.STRATEGY_LIKELY_SYSTEMATIC=_1t,U.STRATEGY_PURE_RANDOM=$1t,U=s0(\"OCL.DrugScoreCalculator\",cw),U.calculate=jN,U=s0(\"OCL.DruglikenessPredictor\",Og),U.DRUGLIKENESS_UNKNOWN=a1t,U=s0(\"OCL.ForceFieldMMFF94\",Dv),U.MMFF94=t0t,U.MMFF94S=e0t,U.MMFF94SPLUS=A0t,R3(),U=s0(\"OCL.GenericEditorArea\",fj),U.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED=_Pt,U.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED=$Pt,U.EDITOR_EVENT_MOLECULE_CHANGED=aPt,U.EDITOR_EVENT_SELECTION_CHANGED=t8t,U.HOTSPOT_16=eS,U.HOTSPOT_32=AS,U.IMAGE_DATA_16=nS,U.IMAGE_NAME_32=PS,U.KEY_ALT=e8t,U.KEY_BACK_SPACE=A8t,U.KEY_CTRL=n8t,U.KEY_DELETE=P8t,U.KEY_ENTER=r8t,U.KEY_ESCAPE=i8t,U.KEY_EVENT_PRESSED=f8t,U.KEY_EVENT_RELEASED=D8t,U.KEY_HELP=u8t,U.KEY_SHIFT=Q8t,U.MODE_DRAWING_OBJECTS=o8t,U.MODE_MARKUSH_STRUCTURE=U8t,U.MODE_MULTIPLE_FRAGMENTS=L8t,U.MODE_REACTION=s8t,U.MOUSE_EVENT_CLICKED=y8t,U.MOUSE_EVENT_DRAGGED=l8t,U.MOUSE_EVENT_ENTERED=h8t,U.MOUSE_EVENT_EXITED=T8t,U.MOUSE_EVENT_MOVED=c8t,U.MOUSE_EVENT_PRESSED=w8t,U.MOUSE_EVENT_RELEASED=g8t,U.TableLayoutFill=d8t,U.TableLayoutPreferred=B8t,U.cChainCursor=v8t,U.cDeleteCursor=F8t,U.cFistCursor=k8t,U.cHandCursor=m8t,U.cHandPlusCursor=b8t,U.cInvisibleCursor=j8t,U.cLassoCursor=R8t,U.cLassoPlusCursor=p8t,U.cPointedHandCursor=M8t,U.cPointerCursor=C8t,U.cSelectRectCursor=H8t,U.cSelectRectPlusCursor=V8t,U.cTextCursor=E8t,U.cZoomCursor=S8t,U=s0(\"OCL.GenericEditorToolbar\",Um),U=s0(\"OCL.GenericUIHelper\",ZB),U=s0(\"OCL.MCS\",Wd),An(),U=s0(\"OCL.Molecule\",UL),U.CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N=n0t,U.CANONIZER_CONSIDER_DIASTEREOTOPICITY=P0t,U.CANONIZER_CONSIDER_ENANTIOTOPICITY=r0t,U.CANONIZER_CONSIDER_STEREOHETEROTOPICITY=i0t,U.CANONIZER_COORDS_ARE_3D=f0t,U.CANONIZER_CREATE_PSEUDO_STEREO_GROUPS=D0t,U.CANONIZER_CREATE_SYMMETRY_RANK=u0t,U.CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS=Q0t,U.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS=o0t,U.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING=U0t,U.CANONIZER_ENCODE_ATOM_SELECTION=L0t,U.CANONIZER_NEGLECT_ANY_STEREO_INFORMATION=s0t,U.CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS=y0t,U.FISCHER_PROJECTION_LIMIT=l0t,U.FISCHER_PROJECTION_RING_LIMIT=h0t,U.STEREO_ANGLE_LIMIT=T0t,U.VALIDATION_ERRORS_STEREO=XE,U.VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION=c0t,U.VALIDATION_ERROR_ESR_CENTER_UNKNOWN=w0t,U.VALIDATION_ERROR_OVER_UNDER_SPECIFIED=g0t,U.cAtomCIPParityNone=d0t,U.cAtomCIPParityProblem=B0t,U.cAtomCIPParityRorM=v0t,U.cAtomCIPParitySorP=F0t,U.cAtomColorBlue=k0t,U.cAtomColorDarkGreen=m0t,U.cAtomColorDarkRed=b0t,U.cAtomColorGreen=j0t,U.cAtomColorMagenta=R0t,U.cAtomColorNone=p0t,U.cAtomColorOrange=M0t,U.cAtomColorRed=C0t,U.cAtomLabel=ZE,U.cAtomParity1=H0t,U.cAtomParity2=V0t,U.cAtomParityIsPseudo=E0t,U.cAtomParityNone=S0t,U.cAtomParityUnknown=I0t,U.cAtomQFAny=x0t,U.cAtomQFAromState=N0t,U.cAtomQFAromStateBits=G0t,U.cAtomQFAromStateShift=O0t,U.cAtomQFAromatic=q0t,U.cAtomQFCharge=z0t,U.cAtomQFChargeBits=K0t,U.cAtomQFChargeShift=J0t,U.cAtomQFDepictedFeatures=Y0t,U.cAtomQFENeighbourBits=X0t,U.cAtomQFENeighbourShift=Z0t,U.cAtomQFENeighbours=W0t,U.cAtomQFExcludeGroup=_0t,U.cAtomQFFlatNitrogen=$0t,U.cAtomQFHeteroAromatic=a0t,U.cAtomQFHydrogen=tet,U.cAtomQFHydrogenBits=eet,U.cAtomQFHydrogenShift=Aet,U.cAtomQFIsNotStereo=net,U.cAtomQFIsStereo=Pet,U.cAtomQFMatchStereo=ret,U.cAtomQFMoreNeighbours=iet,U.cAtomQFNarrowing=fet,U.cAtomQFNeighbourBits=Det,U.cAtomQFNeighbourShift=uet,U.cAtomQFNeighbours=Qet,U.cAtomQFNewRingSize=oet,U.cAtomQFNewRingSizeBits=Uet,U.cAtomQFNewRingSizeShift=Let,U.cAtomQFNoMoreNeighbours=set,U.cAtomQFNoOfBits=yet,U.cAtomQFNot0ENeighbours=het,U.cAtomQFNot0Hydrogen=Tet,U.cAtomQFNot0Neighbours=cet,U.cAtomQFNot0PiElectrons=wet,U.cAtomQFNot1ENeighbour=get,U.cAtomQFNot1Hydrogen=det,U.cAtomQFNot1Neighbour=Bet,U.cAtomQFNot1PiElectron=vet,U.cAtomQFNot2ENeighbours=Fet,U.cAtomQFNot2Hydrogen=ket,U.cAtomQFNot2Neighbours=met,U.cAtomQFNot2PiElectrons=bet,U.cAtomQFNot2RingBonds=jet,U.cAtomQFNot3ENeighbours=Ret,U.cAtomQFNot3Hydrogen=pet,U.cAtomQFNot3Neighbours=Met,U.cAtomQFNot3RingBonds=Cet,U.cAtomQFNot4ENeighbours=Het,U.cAtomQFNot4Neighbours=Vet,U.cAtomQFNot4RingBonds=Eet,U.cAtomQFNotAromatic=Iet,U.cAtomQFNotChain=xet,U.cAtomQFNotCharge0=Net,U.cAtomQFNotChargeNeg=Get,U.cAtomQFNotChargePos=Oet,U.cAtomQFPiElectronBits=qet,U.cAtomQFPiElectronShift=zet,U.cAtomQFPiElectrons=Ket,U.cAtomQFRingSize0=Jet,U.cAtomQFRingSize3=Yet,U.cAtomQFRingSize4=Xet,U.cAtomQFRingSize5=Zet,U.cAtomQFRingSize6=Wet,U.cAtomQFRingSize7=_et,U.cAtomQFRingSizeLarge=$et,U.cAtomQFRingState=aet,U.cAtomQFRingStateBits=tAt,U.cAtomQFRingStateShift=eAt,U.cAtomQFRxnParityBits=AAt,U.cAtomQFRxnParityHint=nAt,U.cAtomQFRxnParityInvert=PAt,U.cAtomQFRxnParityRacemize=rAt,U.cAtomQFRxnParityRetain=iAt,U.cAtomQFRxnParityShift=fAt,U.cAtomQFSimpleFeatures=DAt,U.cAtomQFSmallRingSize=uAt,U.cAtomQFSmallRingSizeBits=QAt,U.cAtomQFSmallRingSizeShift=oAt,U.cAtomQFStereoState=UAt,U.cAtomQFStereoStateBits=LAt,U.cAtomQFStereoStateShift=sAt,U.cAtomRadicalState=yAt,U.cAtomRadicalStateD=lAt,U.cAtomRadicalStateNone=hAt,U.cAtomRadicalStateS=TAt,U.cAtomRadicalStateShift=cAt,U.cAtomRadicalStateT=wAt,U.cAtomValence=WE,U.cBondCIPParityEorP=gAt,U.cBondCIPParityNone=dAt,U.cBondCIPParityProblem=BAt,U.cBondCIPParityZorM=vAt,U.cBondParityEor1=FAt,U.cBondParityNone=kAt,U.cBondParityUnknown=mAt,U.cBondParityZor2=bAt,U.cBondQFAllFeatures=jAt,U.cBondQFAromState=RAt,U.cBondQFAromStateBits=pAt,U.cBondQFAromStateShift=MAt,U.cBondQFAromatic=CAt,U.cBondQFBondTypes=HAt,U.cBondQFBondTypesBits=VAt,U.cBondQFBondTypesShift=EAt,U.cBondQFBridge=SAt,U.cBondQFBridgeBits=IAt,U.cBondQFBridgeMin=xAt,U.cBondQFBridgeMinBits=NAt,U.cBondQFBridgeMinShift=GAt,U.cBondQFBridgeShift=OAt,U.cBondQFBridgeSpan=qAt,U.cBondQFBridgeSpanBits=zAt,U.cBondQFBridgeSpanShift=KAt,U.cBondQFDelocalized=JAt,U.cBondQFDepictedFeatures=YAt,U.cBondQFDouble=XAt,U.cBondQFMatchFormalOrder=ZAt,U.cBondQFMatchStereo=WAt,U.cBondQFMetalLigand=_At,U.cBondQFNarrowing=$At,U.cBondQFNoOfBits=aAt,U.cBondQFNotAromatic=tnt,U.cBondQFNotRing=ent,U.cBondQFQuadruple=Ant,U.cBondQFQuintuple=nnt,U.cBondQFRareBondTypes=Pnt,U.cBondQFRareBondTypesBits=rnt,U.cBondQFRareBondTypesShift=int,U.cBondQFRing=fnt,U.cBondQFRingSize=Dnt,U.cBondQFRingSizeBits=unt,U.cBondQFRingSizeShift=Qnt,U.cBondQFRingState=ont,U.cBondQFRingStateBits=Unt,U.cBondQFRingStateShift=Lnt,U.cBondQFSimpleFeatures=snt,U.cBondQFSingle=ynt,U.cBondQFTriple=lnt,U.cBondTypeCross=hnt,U.cBondTypeDeleted=Tnt,U.cBondTypeDelocalized=cnt,U.cBondTypeDouble=wnt,U.cBondTypeDown=gnt,U.cBondTypeIncreaseOrder=dnt,U.cBondTypeMaskSimple=Bnt,U.cBondTypeMaskStereo=vnt,U.cBondTypeMetalLigand=Fnt,U.cBondTypeQuadruple=knt,U.cBondTypeQuintuple=mnt,U.cBondTypeSingle=bnt,U.cBondTypeTriple=jnt,U.cBondTypeUp=Rnt,U.cChiralityDiastereomers=pnt,U.cChiralityEpimers=Mnt,U.cChiralityIsomerCountMask=Cnt,U.cChiralityKnownEnantiomer=Hnt,U.cChiralityMeso=Vnt,U.cChiralityNotChiral=Ent,U.cChiralityRacemic=Snt,U.cChiralityUnknown=Int,U.cChiralityUnknownEnantiomer=xnt,U.cCommonOxidationState=_E,U.cDefaultAVBL=Nnt,U.cDefaultAllowedPseudoAtoms=Gnt,U.cDefaultAtomValence=Ont,U.cESRGroupBits=qnt,U.cESRMaxGroups=znt,U.cESRTypeAbs=Knt,U.cESRTypeAnd=Jnt,U.cESRTypeOr=Ynt,U.cHelperAll=Xnt,U.cHelperBitCIP=Znt,U.cHelperBitIncludeNitrogenParities=Wnt,U.cHelperBitNeighbours=_nt,U.cHelperBitParities=$nt,U.cHelperBitRings=ant,U.cHelperBitRingsSimple=tPt,U.cHelperBitSymmetrySimple=ePt,U.cHelperBitSymmetryStereoHeterotopicity=APt,U.cHelperBitsStereo=nPt,U.cHelperCIP=PPt,U.cHelperNeighbours=rPt,U.cHelperNone=iPt,U.cHelperParities=fPt,U.cHelperRings=DPt,U.cHelperRingsSimple=uPt,U.cHelperSymmetrySimple=QPt,U.cHelperSymmetryStereoHeterotopicity=oPt,U.cMaxAtomicNo=UPt,U.cMaxConnAtoms=LPt,U.cMoleculeColorDefault=sPt,U.cMoleculeColorNeutral=yPt,U.cPseudoAtomA=lPt,U.cPseudoAtomAttachmentPoint=hPt,U.cPseudoAtomPolymer=TPt,U.cPseudoAtomR=cPt,U.cPseudoAtomX=wPt,U.cPseudoAtomsAGroups=gPt,U.cPseudoAtomsAll=dPt,U.cPseudoAtomsAminoAcids=BPt,U.cPseudoAtomsHydrogenIsotops=vPt,U.cPseudoAtomsRGroups=FPt,U.cRoundedMass=$E,U.fromIDCode=xJ,U.fromMolfile=ZN,U.fromMolfileWithAtomMap=$K,U.fromSmiles=zO,U.getAngle=CN,U.getAngleDif=Yx,U.getAtomicNoFromLabel=Xx,U.getDefaultAverageBondLength=lN,U.isAtomicNoElectronegative=mx,U.isAtomicNoElectropositive=kx,U.setDefaultAverageBondLength=Ax,U=s0(\"OCL.MoleculeProperties\",Ag),U=s0(\"OCL.Reaction\",uB),U.create=Ox,U.fromMolecules=lK,U.fromRxn=rq,U.fromSmiles=EO,U=s0(\"OCL.ReactionEncoder\",ww),U.CATALYST_DELIMITER=kPt,U.INCLUDE_ALL=mPt,U.INCLUDE_CATALYSTS=bPt,U.INCLUDE_COORDS=jPt,U.INCLUDE_DEFAULT=RPt,U.INCLUDE_DRAWING_OBJECTS=pPt,U.INCLUDE_MAPPING=MPt,U.INCLUDE_RXN_CODE_ONLY=CPt,U.MOLECULE_DELIMITER=HPt,U.OBJECT_DELIMITER=VPt,U.PRODUCT_IDENTIFIER=EPt,U.RETAIN_REACTANT_AND_PRODUCT_ORDER=SPt,U.decode=UZ,U.encode=y_,U=s0(\"OCL.Reactor\",sg),U=s0(\"OCL.Resources\",gw),U._register=ex,U=s0(\"OCL.RingCollection\"),U.MAX_SMALL_RING_SIZE=IPt,U.MODE_SMALL_AND_LARGE_RINGS=xPt,U.MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY=NPt,U.MODE_SMALL_RINGS_AND_AROMATICITY=GPt,U.MODE_SMALL_RINGS_ONLY=OPt,U=s0(\"OCL.SDFileParser\",zd),U=s0(\"OCL.SSSearcher\",CB),U=s0(\"OCL.SSSearcherWithIndex\",m7),U.bitCount=_I,U.getHexStringFromIndex=OI,U.getIndexFromHexString=qI,U.getKeyIDCode=aI,U.getSimilarityAngleCosine=hx,U.getSimilarityTanimoto=Tx,U=s0(\"OCL.SmilesParser\",Uh),Ch(),U=s0(\"OCL.ToxicityPredictor\",pg),U.RISK_HIGH=qPt,U.RISK_LOW=zPt,U.RISK_NAMES=tS,U.RISK_NO=KPt,U.RISK_UNKNOWN=JPt,U.TYPE_IRRITANT=YPt,U.TYPE_MUTAGENIC=XPt,U.TYPE_REPRODUCTIVE_EFFECTIVE=ZPt,U.TYPE_TUMORIGENIC=WPt,U=s0(\"OCL.Transformer\",wd),U=s0(\"OCL.Util\",dw),U.getHoseCodesFromDiastereotopicID=rJ,U=s0(\"java.io.Serializable\"),U.$isInstance=NJ,Er(),U=s0(\"java.lang.Boolean\"),U.$isInstance=XN,U=s0(\"java.lang.CharSequence\"),U.$isInstance=Cz,U=s0(\"java.lang.Cloneable\"),U.$isInstance=vz,U=s0(\"java.lang.Comparable\"),U.$isInstance=aK,U=s0(\"java.lang.Double\"),U.$isInstance=TN,U=s0(\"java.lang.Number\"),U.$isInstance=$O,U=s0(\"java.lang.String\"),U.$isInstance=cN,U=s0(\"java.lang.Throwable\"),U.of=LK,U=s0(\"java.util.List\"),U.copyOf=fJ,U=s0(\"java.util.Map\"),U.copyOf=ZG,U=s0(\"java.util.Set\"),U.copyOf=HJ,U=s0(\"javaemul.internal.HashCodes\",vw),U.getIdentityHashCode=zJ,U.getNextHash=zI,U.getObjectIdentityHashCode=jD,U=s0(\"javaemul.internal.JsUtils\"),U.toDoubleFromUnsignedInt=$I;var HS=CO,X8t=vY;Hq(sI),dz(\"permProps\",[[]]),C1(\"moduleStartup\",\"moduleEvalEnd\"),X8t(kt.__errFn,kt.__moduleName,kt.__moduleBase,kt.__softPermutationId,kt.__computePropValue),C1(\"moduleStartup\",\"end\"),vt&&vt.permProps&&kt.__moduleStartupDone(vt.permProps);let VS=w.OCL;return VS.version=\"9.24.0\",VS}var ert=typeof window<\"u\"&&typeof window.document<\"u\",E8;E8={document:{compatMode:\"CSS1Compat\"}},E8.setTimeout=globalThis.setTimeout?globalThis.setTimeout.bind(globalThis):rD,E8.clearTimeout=globalThis.clearTimeout?globalThis.clearTimeout.bind(globalThis):rD,E8.setInterval=globalThis.setInterval?globalThis.setInterval.bind(globalThis):rD,E8.clearInterval=globalThis.clearInterval?globalThis.clearInterval.bind(globalThis):rD,E8.Error=globalThis.Error,E8.Map=globalThis.Map,E8.Math=globalThis.Math,E8.RegExp=globalThis.RegExp,E8.TypeError=globalThis.TypeError;var Art=trt(E8),X0=Art;function LI(w){let Z=w.Resources._register.bind(w.Resources);if(delete w.Resources._register,w.Resources.register=function(kt){typeof kt==\"string\"&&(kt=JSON.parse(kt));let C1=new TextEncoder;if(typeof kt!=\"object\"||kt===null)throw new TypeError(\"resources must be an object\");let jt={};for(let[T1,u1]of Object.entries(kt)){if(typeof u1!=\"string\")throw new TypeError(`resource ${T1} must be a string`);jt[T1]=C1.encode(u1)}Z(jt)},w.Resources.registerFromUrl=async function(kt=nrt()){let jt=await(await fetch(kt)).json(),T1=new TextEncoder,u1=Object.fromEntries(Object.entries(jt).map(([h1,s1])=>[h1,T1.encode(s1)]));Z(u1)},typeof process<\"u\"){let ot=function(){let kt=process.getBuiltinModule(\"node:path\"),C1=kt.join(import.meta.dirname,\"resources.json\");return import.meta.filename.endsWith(\"register_resources.js\")&&(C1=kt.join(import.meta.dirname,\"../dist/resources.json\")),C1};var vt=ot;w.Resources.registerFromNodejs=function(C1=ot()){let T1=process.getBuiltinModule(\"node:fs\").readFileSync(C1,\"ascii\");w.Resources.register(T1)}}else w.Resources.registerFromNodejs=function(){throw new Error(\"Resources.registerFromNodejs can only be called from Node.js\")}}function nrt(){return new URL(\"resources.json\",import.meta.url).href}hw(X0);UI(X0);LI(X0);var eot=X0,Aot=X0.CanvasEditor,not=X0.registerCustomElement,Pot=X0.Canonizer,rot=X0.CanonizerUtil,iot=X0.ConformerGenerator,fot=X0.DrugScoreCalculator,Dot=X0.DruglikenessPredictor,uot=X0.ForceFieldMMFF94,Qot=X0.MCS,oot=X0.Molecule,Uot=X0.MoleculeProperties,Lot=X0.Reaction,sot=X0.ReactionEncoder,yot=X0.Reactor,lot=X0.Resources,hot=X0.RingCollection,Tot=X0.SDFileParser,cot=X0.SSSearcher,wot=X0.SSSearcherWithIndex,got=X0.SmilesParser,dot=X0.ToxicityPredictor,Bot=X0.Transformer,vot=X0.Util,Fot=X0.version;export{Pot as Canonizer,rot as CanonizerUtil,Aot as CanvasEditor,iot as ConformerGenerator,fot as DrugScoreCalculator,Dot as DruglikenessPredictor,uot as ForceFieldMMFF94,Qot as MCS,oot as Molecule,Uot as MoleculeProperties,Lot as Reaction,sot as ReactionEncoder,yot as Reactor,lot as Resources,hot as RingCollection,Tot as SDFileParser,cot as SSSearcher,wot as SSSearcherWithIndex,got as SmilesParser,dot as ToxicityPredictor,Bot as Transformer,vot as Util,eot as default,not as registerCustomElement,Fot as version};\n/**\n * openchemlib - Manipulate molecules\n * @version v9.24.0\n * @date 2026-07-01T12:46:44.684Z\n * @link https://github.com/cheminfo/openchemlib-js\n * @license BSD-3-Clause\n*/\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultDatabase = void 0;\nexports.defaultDatabase = [\n    {\n        label: 'alpha cleavage',\n        rxnCode: 'eM``eIhOh`!fH@Oj@ eF``fJD#Qg Qp Qd#!RPNp@@qtJ_@ !RGUi| !R_P@]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1149/1945-7111/abdde7',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMHJN`pksPqFdD@`!fI@GudYA@H@ eF@HhP#Q^ Qp Qd#!RWrL@@qvrO@ !RG]i| !R@@L]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eFH`fLGtX!fI@Gu` fHT`P#QX QP a`#!R@AL]|gp !RGUi| !RG[i|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'gCiALAJRu@_HYlgHE@!fI@Gu` eO``fNZ`~cIrE@#qNT qH Qg#!R@BL@[@@cGPj| !RG]i| !Rog~w?Qwzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMH`eIXOda`!fI@Gu` eF@bXhP#Qy Qp Qd#!R@Fp@XqtJ_@ !RG]i| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qn\\\\J qfQ qk#!R|Gvw__A|_g?p_Qurw@ !R_wy||G}~GYk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 23',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qbu_ qj{ Ql#!RlKvwo[@|og~poQurw@ !R_{x|lG~~GYk| !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 24',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtDQas`D@`!gJT@AdijdCzZHpypB@P fHT`P#qbqo qJ|h Qp#!R|Gvw__A|_g?p_Qurw@ !Rb@KW@gx@bGt]vhH !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 25',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtFQas`D@`!gChAAIRfdCF[N@PB@ eF`BLGtX#qj|^ qbs qo#!Rm?wp?[]|_g~w?QvRw@ !R@Fp?[@AcG]k| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 26',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'day@B@HIRigjf`Cy@`hcEYpB@P!gGTAAaJTwTpGrFZHpypB@P eF@HhP#IaLJfxP IaBia q~#!RbGwW_Wx@bOq~O}_|bGt]lcp !R|Gvw__A|_g?p_Qtzw@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 27',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium rearragement',\n        rxnCode: 'gOpAMJUKua@@Gtt@!gOpAGJTju`@@Gt\\\\@#qgVMX qYoTp#!Ri}w^@Hc]i?rg?Mx@GPhB !Rwg}GED]sw~g_~dvOG]h|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gOpAGJTju`@@D!gKPACJTnLE@P eF@HxP#qqUcx qMsx Qd#!RkpXxCLvpO`BblClLG[KB !RS|T~@BLXSzh]FhH !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        // eslint-disable-next-line unicorn/prefer-https -- this host serves http only\n        web: 'http://people.whitman.edu/~dunnivfm/C_MS_Ebook/CH6/6_9_5.html',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gFpAAJTjZ@@A@!gBPAAJTkRpD eF@HxP#qbqk qbu qY#!RdMvww]y?wg~wwQurW@ !R@M{^[}yoGUj| !R@@L]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: 'https://en.wikipedia.org/wiki/Fragmentation_%28mass_spectrometry%29',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphonates fragmentation',\n        rxnCode: 'gJPeE`DSpTiMMPGtT@!gC`eE`DSpdiLtA@ fH@Oj@#qbNh qbN qh#!Rb@I~Owx@bGt]|`H !Ru?sW_Wx@GQjB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 60',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gJQdEb@b^BSTtA}A@ fHT`P#qbqk qbMX Qp#!ROvL@Xvp?OvMc@AtrO@ !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 49',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gNqeLZ@b^@eJZZZ`OhH@!gJQeEb@b^@eIjZ@~`p eF@HhP#qbqkx qbMX q~#!ROvp@[FL?Ovql@@AcGSHB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 50',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gCaiHlO@SGZ@` eFB@HcA}D@#qbqk qQ] Ql#!ROvL@Xvp?OvMc@AwRO@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 51',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 45',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gNqeEb@b^BgHiDVj`Ohh@!gJQeEb@b^BeIij@~bp eF@HhP#qbqkx qbqh q_#!R[@@@Xs}l[@@@[@AcGPiB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 46',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'daxLRDp`BH|DgHiDbuU@GtI@!gGPdE`DSpRYvi@~d` eFH`fLGtX#IaLJfxP IaBka qs#!R[C|?XpAc[@@?[@Al@FL]lmp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 47',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 48',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gJYIC`DBTijXCzB@!eMhdiRVB eFB@HcA}D@#qbqh qJh Ql#!Rb@KW@gx@bGt]\\\\hH !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 19',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DBTiff`OhH@!gCiIL`DBTff@~`p eF@HhP#IaLJa qbM IG@#!RupJH@m]}_`BH_Qtr`` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 20',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gNyIC`DF\\\\dTJij@~a`!gJYHC`DISTpGtL@ eF@bXpP#IaLJnD qbqh IxP#!Rb@KW@gx@bGvH?Ha}GWJB !Rb@KW@gx@bGt]NhH !R@FL]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 21',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DB\\\\dTMM@_PP!gCaHL@aJZPH eF``fJGtP#qbqo qbq qo#!R|Gvw_Wy?|Gsp_Qvrw@ !R@Fp?[@AcG]i| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 22',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfoxides fragmentation',\n        rxnCode: 'eMJhBBXvCyH\\\\@!fHT`P eFJHBHh_Q@#Qg Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 65',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGrdZ@!fHT`P eMFI@bM`~f@#qbq qH Qm#!Re{v~@Hb}G[K| !RGYi| !RWrL@Hquzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 66',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGtd@!fHT`P eMFI@bMP~b@#qfQ qH Qm#!R_`CW_Xa}G[K| !RGQi| !R@Gx?_avz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 67',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfites fragmentation',\n        rxnCode: 'gJQiHl@aReVu@_QP!gCahHl@bNtA}E@ fHT`P#qbqh qbq qh#!Rmwsp_Gy?|Ot]lkp !RuwvH_Wx@G]k| !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 68',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'eMB`HIchOh`!fHT`P eFB@HcA}D@#Q[ a` Q\\\\#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 61',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'gC`I@DBTij@~``!eFB`HIcA}F@ eF@HhP#qrL qq Qd#!RGtL@Pq}lG[I| !R_pp]Vop !R_pp]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 62',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Simple inductive cleavage',\n        rxnCode: 'eM@bXzCKGgW@!fHT`P eF@HpP#Q[ a` Q\\\\#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sigmatropic rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvB#Q^ Q[#!ROvL@XquJO@ !ROvL@Xqtzo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (McLafferty-type rearrangement)',\n        rxnCode: 'gJP@DkVhCzFHrEpBG`D@!eM@HvCzXcI\\\\@axA@ eF@HhP#qTqh Q^ qM#!ROvL@XpAl@FL]Bcp !R@FL?XqwZO@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (Claisen rearrangement)',\n        rxnCode: String.raw `daxH@JrRHiMUHAcEHHA@!daxH@NrSRHmUHAcGHHA@#IZaxla@ IhfP^c@#!Ru{vHo[x@u?sWoY_|e{t]Dop !R@BL?Xs|\\[E|cWs}cOqp]vcp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 12 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daxDBDqIRiubJ`CZN|bPtQqDD@cDD@chXO}c`!gJQ@DeNl`XqHHA@ eFH`fLGtYFDD@`#qqj\\\\x qqkx QX#!RbCtAHN\\\\}b@Kg@cx@yst]xop !R@DL?W@Al@DL]Nop !R@DL]agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGY@DDf]j`Odkl@!gCi@DDff@~`l eF@HhP#qrLk qrL qk#!RbOrH_Wx@b@JH_QuJ@` !RbOq~@Ha}GSjB !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daDLBHSdeJmVfZjh@~QHzHyBB@PbB@QrB@P!gCaAIiRmhCFQA@H@ gC``Eh{PGrTZHiHHAFPPB@#Ikb[HPP I`Tp qky#!R}{rpwKy?lGvpO[y?og|]dep !ROqp@[@@cGUk| !RbKwW_[x@G_k|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGP`MTj}jPOihbl``DUA@H@!eMHJMPqiA@H@ eMHFM`~fHr``D@#qStM qTX qNh#!RbKwWo[x@upKW_QtR?@ !R@Ox?oawZ_@ !R@BL?XqwzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJQ@DeZu@_PqFIA@HFB@!eMHJM`qiA@H@ eF@HhP#qeVH qbh qq#!RWrM@XpAl@BL]Bcp !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.3',\n        description: 'Fig. 11 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJP@DkVhCzF@!eM@HvCzX@ eF@HhP#qbqh Qm qM#!ROvL@XpAl@FL]bcp !R@FL?XqwZO@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'daDD@DqJg^ffZh@qQDD@cDD@`!gGQ@BeJmJHGFEA@H@ eFHBJFLHHA@#IGmdehp IxakS IeP#!Rog?w_KC\\\\lCvp?[@|lOt]tkp !R|Gw~@OA|mpKp_QwZ`` !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFp@DiTujhB!gC`@Die@` eF@HhP#q]aV q]a Q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFx@@eJfuS@P!gC`@Die@` eF`BJD#q]aV qqU q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gOu@AReLm]SLAcB``D@!gJY@@TeVTCFEA@H@ eF`BJD#IKJRV` IZDrP qM#!R}xNp?[y?}{r~_{@}GQI\\\\ !R_vq?Dw}l_vp]z`H !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: String.raw `didDB@{iRYefxijh@zRhX!gNpaAQJRs\\uBIzQg@ eF@HhP#IwlDdeZ IwlIEh IFP#!RbMvH?Cx_bMt~@Hc]Oa~H?AtJo@ !Rm{vwoSy?musPO[\\}GYh\\ !R@DL]Akp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'fdeA`D@\\\\brTfYY_m]gIZ|DhJB@@h@@~aF@!didHB@BTfUvfZVV@OhB@ didD@@iIYgxUie`B#iup`jXdibCPcXKoI iSxKhvMHP IwbkEYH#!RbCvH?Ky_bCv~@H`}oe~H?Hc|oe~~@H`}esv~W{y_e{v~WquRs@ !RlKvpwKy?lKvpO[y?lKvpOQwZg@ !Rmwvw_[y?msrpo[^}mwvwOAuzG@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'deTDB@{iRYemnJXj`CiJaoQt@!gGPa@QJRmsPbX gC`@DiPDCteZ@#IaLJfxYT IaBxU IriX#!RbGvH?Gx?bGu~@Hb}_c~H?Gx?G[I\\\\ !RbGvH_X`B_`BH_Qtz_@ !R|Gq~_?C}GXX|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangment',\n        rxnCode: 'gC`AEJTu@P!fH@Oj@ eM@fXvB#qVa qH Q^#!R@Fq?[@@SG_HB !RGWi| !R@AM?DqtZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcO\\\\@axADQbU`!fH@OjHw\\\\@axADQbU` eF@HhP#Q[ Qp Qd#!ROvL@XqurO@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.1',\n        description: 'Fig. 4.1. a',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcW\\\\@axADQbU`!fH@Oj@ eF@HhXqw@H^@QDXeX#Q^ a` Qt#!R@FL?XqwrO@ !RGUi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.1. b',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment d',\n        rxnCode: 'gOpAIJUKua@@Gtt@!gOpAMJUKua@@D#q]gJp q\\\\oQp#!Ro`BWoXb}e?rW?I^}GPhB !Resv~@H`}epJW@kx@GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment a',\n        rxnCode: 'dnD@BLeJV|jfZih@`!gOpAGJTju`@@D#qTuYx qigSp#!RSF\\\\_iUMg_wy~_wy?G_I\\\\ !RgtXxCJvp_`Cbl@\\\\LG]kB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVXROtD_u@`!gCa@@dkPGtD_uD`#qbq qbq#!R_`BH@ha}GXhB !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVdCzCOzdP!gCaA@IRVXROtF_uL`#qbq qbq#!R@FL@[@AcGTj| !R_`BH?Ha}G[hB',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical H Rearrangment',\n        rxnCode: 'eM@jXzCzXcV\\\\@`DSc@jd!eM@jXzCFlxA@HgFATh#Qg Qg#!ROvL@XqtJO@ !ROvL@XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGPiHaxJ\\\\ddKU@_QYFEF@P@!gC`iHaxJX{PGrDKHsHpB@ eF@HhP#qqZl qq] Qd#!R[C|?XpAlXp@@Xqvr_@ !Ruwu~@Ha}G]k| !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 41&42',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGQiHlOASddeZhCyKM@!gCahHlOBNtA}aBcP eF@bXpP#qVLk qVa qk#!RPpAlGq}C@Fp@Pqvr_@ !RO^\\\\@OcvHG]i| !RY`@]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 43',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gJQiHlOASGmPGrVZ@!gC`iHaxBX{PGtT@ fI@Gu`#qbqh qbM Qp#!Re{v~@Ky_bKt]Lgp !Re{v~@Hb}GYk| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 44',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonates fragmentation',\n        rxnCode: 'gJQiHlOBSGmPGtd@!gCahHlOBOTA}I@ fHT`P#qbqh qbq qh#!Ruwu~@Gx?bGt]Lgp !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 59',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: String.raw `gNpYHlQxR\\ddqZj@~Tap!gJPYHlQxRX}j@~TaP eF@HhP#qbuKx qbqh q{#!RXs|@Xs}l[@@@[@AcGPi| !Ruwu~@Gx?bGt]vgp !R@FL]Akp`,\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 37A&B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`Ohh@!gCaiHlO@SGZ@` eFHBLGtP#IaLJa qbi IpP#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 38',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`OlhtF@!gJPXHlQxQ{TA}eF`p fHT`P#qqU\\\\ qqUX a`#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Gx?bGt]vgp !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 40',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxonium Resonance',\n        rxnCode: 'eFH`fJGtQFDD@`!eFHhfLGuQFdD@`#QX Qd#!R@BL]bgp !R_vp]vop',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: 'https://en.wikipedia.org/wiki/Oxonium_ion',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxime-ethers fragmentation',\n        rxnCode: 'gCiAHIJTt`_JPh@!eF``fJGtX eFHBJD#qbq qQ Ql#!R@Fp?[@AcGWK| !R@FL]Vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 36',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fH@Oj@ eFHbfJD#Qg Qp Qd#!R@Fp@Xqwr_@ !RGUi| !R@FL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fHT`P eMHAIXOj`#qNP QP qN@#!R@Fp@Xqwr_@ !RGQi| !R@Fp@Xquz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 32',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFBCDcAcBQFIdT!eFBcDIcA}EqaHcD@#QX QX#!R@FL]bgp !R@FL]vgp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '5',\n        description: 'Fig. 10',\n        kind: 'ionization',\n        web: 'https://www.orgchemboulder.com/Spectroscopy/MS/fragmech.shtml',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HhP!eF@bXp_zi@#Qd Qd#!R@FL]Rkp !R@FL]vkp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'gC`@DkZ@qds`D@`!fH@H eM@fXvCFlxA@H@#qbq qH Qg#!RWvp@[@@cGWHB !RGYi| !RWrL@HqvzO@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@H`Zp`!eF@bXp_U@#Qd QX#!R@FL]Rkp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FL``D@!fIRPLYA@HjP#a` a`#!RGPi| !RG]i|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HpXp``D@!eF@bXpXt``D@#Qd QX#!R@FL]bgp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFHBLGtP!gChaHDiRUhCzJ@#Qd QBP#!R@FL]Bgp !R@FL@[@AcGSj|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhrJXpXug@HA@#a` aP#!RGXi| !R@FL]Nkp',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhtJXpXug@HA@#a` aP#!RGXi| !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!fIRPOjHv\\\\@`D@#a` a`#!RG\\\\i| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@GuD[N@PBO|j!fIS`L[N@PB@#a` a`#!RGZi| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eMjrX@fezN`~SjHug@HA@#a` aP#!RGPi| !R_qL@DquZo@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavages assisted by adjacent heteroatoms',\n        rxnCode: 'gCaALIRfhCJAxsEpBG`D@!eFH`fJFLEpBG`D@ eF@Hp_Q@#qbq qJ Ql#!R[pL@@v}lGSI| !R@@L]Vgp !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'dayHBDxDeIYtjj@LhQHdU@!gCi@DDeZ@~b` gChA@IRVdCzB@#IyjH\\\\R@ IyjD qbq#!RtEsP_]A\\\\Og?P_]A\\\\tGt]|kp !R@DL@[@ACGSi| !R@DL@[@ACGXY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.4',\n        description: 'Fig 23 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'gJPAMJTmTAeLhHcBW@H^@QNRO@!gC`AMJUm@_SQFXn@P|@b\\\\d^ fH@H#quQ` quT qH#!R@Fq_[@@cWrL]Lgp !R@BM_Hu}lGUi| !RGPY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gChA@Icu@YPOYQ^`bNB\\\\GaHXECAjb@!fJ@FLgAx@ fHT`P#Q`P a` QP#!Rwg~PO[\\\\}G_H| !RGUi| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLFTOzLcBB@P!fI@GudYA@H@ fHT`P#Qd a` QP#!R@DL]\\\\gp !RG]i| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMhdYRRCJW}N@!fJ@D eFH`fND#Qg Qp Qd#!R@Fp@PquJ_@ !RGUi| !R@DL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMDaYRRCJW}LQeA@H@!fI@FL``D@ eFH`fND#Qg Qp Qd#!R@Fp@@qvJ_@ !RGUi| !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'diD@b@|@gIIETjji@NlRrJ@!gC`HAxQz`H eM@fXvB eF@HhP#IaLJfxY qan IF^ qS#!R@FMl@C}lXs|@[@Ac@Fp@Xqvr_@ !Ruwu~@Ha}GYk| !ROvL@XquzO@ !R@FL]Qkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGYALMJT}TpGRdX!gJY@DDefXB fHT`P#qnZa qnTH qX#!RbGwW_X`B_`BH_Qur?@ !RbGvH@gx@bGt]Nop !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gCaA@IRmhCzZHpHHA@!eFH`fJGtQFDD@` eF@HhP#qqT qq Qd#!RWvp@[@@cG_I| !R@BL]vgp !R@BL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.1.3.',\n        description: 'Fig. 7.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGPiH`DZ\\\\ddJu@XsHp\\\\@!gC`iH`DBXzpD eF@HhXpcAp@#qVLk qVM qc#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R_rp]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/rcm.9131',\n        section: 'conclusion',\n        description: 'scheme 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLG~hP!fI@G~i@ fHT`P#QX QP a`#!R_rp]\\\\gp !RGYi| !RGSi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gBPAML^Jj@sfb`!gC`AMJUm@YqQP#qVL qTN#!R@GxBu}\\\\BG_I| !ROvp@[@AcGSi|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCfh!fHT`P eF@HhP#Q[ Qp Qd#!RGtL@Pqwro@ !RGUi| !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@bXzCzhsT!fHT`P eF@HhP#Q^ a` Q\\\\#!R_qL@Dquro@ !RGYi| !R@AL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1093/chromsci/43.2.92',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRUhCzB@!eFHbfLGtP eF@HhP#qtQ Qx qQ#!R@FL@[@AcGPi| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eMH`eIhOhp!fH@H eFH`fJGtP#Qg Qp Qd#!R@Fp@XqtJ_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQA@IRUZ`OhH@!eMH`eIdOhp eF@HhP#qTqh Q[ qM#!R@Fp@XpAl@FL]Bgp !R@Fp@Xqtz_@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRVhCzC@!eFH`fJGtP eF@HhP#qTq QX qq#!R@FL@[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPaAaJTtlA@!eMHAITH eFH`fJGtP#qfUH qnH Qd#!Rb@KW@ha}_`@]lhH !R@Gx@_awZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQAAIRgjPH!gJQA@IRgeaDp#qTnH qTnH#!ROvL@Xs}lOvL]\\\\kp !RbGwW_X`B_`@]nop',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@iRZhCzB@!fI@Gu` eM@fXvB#qJt qH Q[#!Ru?q~@M]}GSJB !RGUi| !ROvL@XquzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzB!fHT`P eF@HhP#Qg QP Qx#!R_qL@DqtJO@ !RGSi| !R@AL]fkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPAEJUkTA@!eM@bXvB eF@HhP#qVah Q[ qi#!R_qL@DpAl@AL]bcp !R_qL@Dqvz_@ !R@AL]Vkp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen lost',\n        rxnCode: 'eM@jXzCVd@!eO@bXyjCVT@#Q[ Qg#!R_qL@DquJO@ !R?`Bw@auZ?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen elimination',\n        rxnCode: 'gFpACJTj[ATA}C`!gFpAAJTjZ@@A@#qbqk qn\\\\J#!Rog~wOK_}m{vwOAurO@ !Rog~wOK_}m{vwOAuZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Halide Elimination',\n        rxnCode: 'eMBGDchOjbLiDX`!fHfHA}QFRHq@ eF@HhP#Q[ Qp Qd#!ROvL@DqurO@ !RGUi| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'H Radical Lost',\n        rxnCode: 'eF@bXp_QDXs`D@c~hP!fHd@AjP eF@bXhXqg@HA@#QX  QX#!R_rp]|gp !RGYi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNpaIYJU_MU@_JQXbh``DUA@H@!gCa@IGj@~dbLbB@P eMHjfM`~jHt``D@#qqWeX qqW qeX#!Ru{vHo[x@b@J~@Hb}GSK| !Ruwv~@Hb}GUi| !ROvL@HqwzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNxaLJIRU[jXCzZ@!eMH`eIxH eF`BJGtP eFHBND#q{iV` Qv qM q{#!R_c}~Oxa}b@I~@Ha}G]H\\\\ !R_wy?_awj_@ !R@FL]ngp !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gGPACJTkUPFtlUlxA@HlLG~r`!eN@HdH eF@HhXqg@HA@#qrLh qqh Qd#!R@FL?XpAlOvp@Xquro@ !RJW}yXQuZO@ !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'daF@B@BTeeVz`@@B!gOpAMJUKua@@D fJRPH#IGfbdK@ q\\\\oQp ID#!Rmwrw_Wy?mwrw_[_}mwp]Dcp !Ru{u~@Hb}upKW@gx@GUhB !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'did@BLeJeWk``b@CzAbLMcApB@!gOpAMJUKua@@D eF@HhXqcApB@#IZJyBGI q\\\\oQp IFP#!Rquu^@Ha]q?sG?H`BW`BHWQur@` !Rquu^@Ha]q?sG?Ex@G]hB !R@Gt]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dif@B@BTeYWaz@@@OhB@!gOpAMJUKua@@D eF`BND#Id^ZJPl q\\\\oQp IdP#!R_`A~@M\\\\Bu{u~@M\\\\BupI~@AuRh` !Ru{u~@Hb}upKW@gx@GUhB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'didHB@BTiyWaj@@@OhB@!gOpAMJUKua@@D eFHBLGtP#IGiZJPl q\\\\oQp IFP#!RuwvH_]_|uwu~@M_|u?q~@Awb@` !Ru{u~@Hb}upKW@gx@GUhB !R_rp]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dmtDB@PIRY^UeVj@@@OhB@!gOpAMJUKua@@D gC``@deZ@`#IaLJfxYWP I[aJUt qbu#!R_`CW?Hc|uwvH_Xc|_c~H_Xb}_c|]LhH !Ruwu~@Ha}u?sW?Gx@GUhB !R@FL@[@AcGXY|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~b@!fHT`P eFHBLGtP#Qg QP Ql#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 33',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'gCaA@IRfhCiQs{BIF`!eFH`fLGtX eF@HhP#qVa QX qN#!R@Fp?[@AcGPk| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 34',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~RJ@!fH@Oj@ eFH`fJGtP#Q[ Qp QX#!ROvL@Xqvro@ !RGUi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 35',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCa@@eMPFtWihb```DJFCX`!fI@GuDYA@H@ eF@HhP#Qdp a` Q\\\\#!R@Fq?[@@SG_K| !RG]i| !R@AL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCaAHiRfhCZ[tTQTPPBMCAlp!fI@GuDYA@H@ eF@bXhP#Q[@ a` Qt#!R_qL@Xs}lG[J| !RG]i| !R_qp]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gC`a@aJRm@_PP!eMHAIhOh` eFH`fND#qbq qq@ Qd#!R@FL@[@AcG_I| !R@Fp@XqwZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://dx.doi.org/10.1088/1468-6996/10/3/034602',\n        section: 'Results',\n        description: 'Fig. 5',\n        kind: 'reaction',\n        web: 'https://www.researchgate.net/figure/a-Chemical-structure-of-oxidative-reserpine-MW-6077-b-Post-source-decay_fig4_26637371',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHbeIXH eFHBLGtX#qrLh Qv qM#!R@W~GKVQuazH]Lep !R@W|LEQvZw@ !R_tP]^op',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 11',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC`a@eJSM@_QX eF@HhP#satpj satp qi#!RbOrHo[x@b@JHoQtJ`` !RbOrHo[x@GSjB !R_tp]~op',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 12',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC``@dfZ@~b` eF@bXpP#qbqk qbq qk#!RbOrHo[x@b@JHoQwr`` !RbOrHo[x@GSjB !R@BL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 13',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSJuPGtT@!gC``@deZ@` eF@bXpP#qbqk qbu qK#!Ro`BW?Hc|e{vHoQtr`` !R@BL@[@@cGSi| !R_tp]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 14',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHAITH eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 15',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination (missing source)',\n        rxnCode: 'eM`AIhOdq`!fJ@Gup eF@HhP#Qv Qp Qd#!R_rq?Dqvr_@ !RG]i| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'To check',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'eMHAIhOdm`!fI@Guh eF@HhP#Qg a` Qt#!R@Fp@HqvJ_@ !RG]i| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'gC`@Dij@~b`!eF@Hp_Q@ eF@HhP#qVa qq Qd#!R@Fp?[@AcG_HB !R@FL]vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Electron Sharing',\n        rxnCode: 'gCaAAIRVdCzB@!gCaA@IRUdCzB@#qbq qbq#!R@FL@[@AcGTj| !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJPaAaJTkTHGyZCDTDD@cHHA@!eMDiicXOfabKHHAB``D@ eF@HhP#qbqh qTH qu#!RepJH@kx@bKt]LhH !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@IRmhCzB@!eF``fJGtX eF@HhP#qTq QX qq#!ROvp@[@AcG_I| !R@FL]Vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJXA@IRmZ`OdHL@!eM`bfN`~b@ eF@HhP#qTqh Q^ qi#!ROvL@XpAl@FL]Bkp !ROvL@XqwZo@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@Icu@_PP!fH@H eM``fM`~b@#qTq qH Q[#!Ruwu~@Ha}GWK| !RGYi| !ROvL@Xqvz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPlLPDSpPPdtu@_QP fHT`P#qbqk qbqh qX#!RXp@@[C}cXp@@XqvrP` !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 52',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gC`eE`DSpdiLtA@ eFB@HcA}D@#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 53',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPmLPDSpPQIRZV`H fH@Oj@#q`qk qpeH qX#!RXp@@[C}cXp@@XqtrP` !RbOq~@Gx?bGt]v`H !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 54',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gCaALiRfhCJIxsHHADxH\\\\!fH@H eOH`fNZ`qaA@HgLN#qbq Qp qJ`#!R@Fq_[@@cG_K| !RGUi| !Rog~w?Quzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJXA@YRgj`LhWmEFJFB\\\\TOlP!fH@H eO`BNZ`sfG@#qJDp Qp qJ`#!RWrL@Hu}lWrL]lkp !RG]i| !Rog~w?QuzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJPACJUkTAeB|YBXN@PBIqQx!gBPAML^Jj@qfI`xA@HgMG` fH@H#qTnH qVl qH#!RWrL@HpAl@BL]|cp !R@K{|ey\\\\BG]i| !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJXA@IRUjPH!eM@fXvB eF`BLGtP#qlVH qrH ql#!R@Fp@XpAl@FL]Bgp !ROvL@XqwZO@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJQABYRmZ`LXTD@`!eM@fXvB eFH`fLGtQFDD@`#qMr` qNh Qd#!R@BL?Xs|\\\\OvL]xcp !RWrL@HquZO@ !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction a.',\n        rxnCode: 'gGYADEJSLuPGtT_nlK|!gChA@Icu@_PP eFHBND#qtSi qQ] Qx#!RbGvH@gx?_`BH_QtJo@ !Ruwu~@Ha}GUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7.1.3',\n        description: 'Fig. 22 c. ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'dclDB@iYRfUw\\\\kahHBj@CzI`!eFHBJD deTHB@RTfU]ih@I`Hz~`H@#IzAQirbWS IdP IzD[JI]L#!RIm~?ck^}|KuMswy?_g?po_B}|GspoQwR{@ !R@FL]fgp !RbOq~@Ha}b@JH@ha}bGvH?Ha}GXZB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/jms.1963',\n        section: '',\n        description: 'Fig. 4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'detDB@jYRfUwJxZB@h@H!eFHBJD daDHB@RTfUVyiZPB#IaLJfxYT Ql IXdziEP#!RIm~?ck^}|KuMswy?_g?po_B}GSKl !R@FL]fgp !RBGvh[AF?HBVDj?Jo@MX]Aep',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C3AY40543E',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'DB rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvCzX@#Q[ Q^#!ROvL@XqvJO@ !R@FL?XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cycloreversion',\n        rxnCode: 'gFp@DiTvjhB!eF@HhP eF@HhP eF@HhP#qbqk qn qY Qd#!R_g~w_K_}mwvw_AvRO@ !R@FL]Fkp !R@FL]Nkp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cyclization',\n        rxnCode: 'eM@jXzCNhh!eO@bXyjCNXh#Q[ Qg#!R_qL@DquJO@ !R?g~w?QuZo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Stabilization',\n        rxnCode: 'gCaAAIRVdCzB@!gCaAAiRVXROtD@#qbq qbq#!R@AL@[@@SGRj| !R?`BH@hc}GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Remote Fragmentation',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qqb Ql qJ#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhdiRVB eFHBLGtP#qbqh qbH qu#!R|Owp_Gy?|Gt]|mp !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 16A & B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhDRUB eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|mp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 17',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gGXaLDiRYvj@~b`!gChaLDiRYhCzK@ eF@HhP#IaLJa qbq IF`#!Rwg~Pw[_]dArP_Qwrw@ !RdKw^_yA\\\\GSk\\\\ !R_wP]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 18',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'COOH loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gBXA@IReYj@` eMDARVCzX@#qbqkx qi{ Qg#!RbOp~@H`}HMkZK}hoGPhB !RO`@@O`@~GUhB !R_pq?Dqvz?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gJYABCJRkTA}C@ eFHPfzND#qbqkx qq_h Qd#!RypKgOSx@iJSKiLndG^KB !R_pq?Dw|L_qL]zop !R_pp]~op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gCa@@dsPFRTZ@!eFHPfzND eF@HpYIE@#qJf qJ Ql#!RbOq~@Ha}G_JB !R@FL]Vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gOq@@drm[UTA@!gKP@Di\\\\Zj@` eFHBND#qbqkx qY~h Qd#!RbOvH?Oy?bOvH__y?GPi\\\\ !R?g|_Fa}eTv\\\\]fcp !R@AL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO Elimination',\n        rxnCode: 'gCaA@IRWhCZZLtLG~s@!fHT`P eFHPfzND#Qg@ Qp Qd#!R_g}~_?A}G_H\\\\ !RGYi| !R@FL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Beta Remote Hydrogen rearrangment ',\n        rxnCode: 'gGPACJTkUPD!gJPACJUkTA@ fH@Oj@#qrLk qTqh qX#!R@AM?DpAl_vp@Dqtr_@ !R_qL@DpAl@AL]~cp !RGYi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Aromatic elimination',\n        rxnCode: 'ded@@DiUUeiZ@hTZfh!gFp@DiTt@@B gC`@DiZDC@#IpdjFGiT qcUq IGiT#!RbGvw_X`B?g?~@K]}b@K~_?x@GWJ| !R?g~w@k_}m?vw@avZO@ !Rb@K~_xc}GPZ|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.6',\n        description: 'Fig. 16',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gGXiMDOCSddajXCFEA@H@!gC`iHaxBX}HFLrB@P eF`BLD#qbqk qbu qK#!RXp@?XpAl[C|@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 55',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'dazDbLa@|LeJi~ij@OdrNbLD``D@!gC`hHaxQvPOhHcL``D@ eF``fLGtX eF@HxP#IaLJnXP qbu qK IxP#!R@FMc@C}c[@@@[C}l@FL]top !Ruwu~@Ha}GUk| !R@FL]~gp !R@FL]Qkp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 56',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gNxiMDOCSddauSPGrtNHphHA@!gJXiMDOCSGuHGtvQaPPB@ eF@HhP#qbqkx qbqh q_#!R[@@?[@AcXs|@[@AcG_I| !Ruwu~@Gx?bGt]Ngp !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 57',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCz[@!gC`iH`DBXzpD eF`BLGtX#qqj\\\\ qqk QX#!R[@ACGq}l@DL_PqwR_@ !RysvHOSx@GYk| !R_pp]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 63',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCy[C@!gC`hH`DQuPH eF``fLGt\\\\#qbqk qbu qK#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R@FL]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminodithiophosphate fragmentation',\n        rxnCode: 'gGYMC`DSphPIRfji@~`bLjB@P!gCiEEAxXHDqzPLYdD@` eFB@HcA}D@#qrYl qQl qs#!ROvL@Xs}cXpAlOqwRO@ !R_`BH_]]}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 58',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhB!eF`BLD eF@bXpP#qLZ qK Qd#!RpDp^_|B]GPj| !R@Kt]Vgp !R_qP]nop',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhCyBM@!eF``fLGtX eF@HhP#qbq Ql qQ#!R@Fp?[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 4 ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gJXA@IRij`OhH@!gChA@Icm@P fH@Oj@#qrM` qri a`#!Ruwu~@Ha}upH]Lop !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gGYADEJSNuPD!gCiADEJSM@_QP eF@HhP#qbq_ qbq q{#!RbOrH_Wx@b@JH_QvJ@` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 10',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHbeIXH eF`BLFlJ@#qbqh qbH qu#!RxCw`[Ey?xEt]Bcp !R@Fp@?QwZ?@ !R@Gt]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 6',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHAITH eF``fLGtQVE@#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gCiADEJSM@P!fHT`P eMhDRVB#qbq qH Qg#!RbOq~@Ha}G_JB !RGQi| !R@Fp@Xquz_@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTA@!gCi@DDfZ@` fHT`P#qbsH qbs qH#!R|Owp_Gy?|Gt]Bcp !RbOq~@Ha}G]jB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 9',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTfUfjX@~QLr@!gJU@E`dru@_SX eMHbeIXH#IZbyAr@ IZnHP Qv#!Ro`BW?Hc|e{vHo[y_e?p]ThH !Ro`BH?I_|bKt]vhH !R_tq?Dqwz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 28',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'gGTaEaUJSNuHGrVZ@!eMhdYRVCz^@ eMhDRUB#qyuS qZp qyh#!RbOrH_Wx@b@JH_Qur`` !R@Fp@XqwZ_@ !R_wy?_auz_@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 29',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTf[VjX@~QHr@!gGTaEaUJSNuHGrVZ@ eF@HhP#IaLJfEP IaLJa IU`#!Rb@JH_Wx@_c~H@m]}bGt]|gp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 30',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,5-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DiYXRWtL@#qbqh qfUH#!ROvp@[C}c@FL]Bop !R@Fp?[@AcOvL]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qVa Qd qq#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC``Adej@~PcP!eFHBJD eFHBJD#qtQ qJ Qx#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qNT qN Qd#!R_rq?Dw|lGSK| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DkVdCzJ@#qqU` qTqh#!R@Fp?[@AcOvL]\\\\op !ROvL@XpAl@FL]ncp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qTq QX qq#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'α-Elimination',\n        rxnCode: 'eM@ghzCFZXN@P|@`!fHW@P eF@HhXqSApBG`D@#Q^ Qp Qd#!R_qL@DqwrO@ !RG[i| !R@AL]Vgp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'dcMDbLvD@Hr\\\\ddJfRtjmP@P@_If[@!eF``fLGt\\\\ deVD`Ia@BLdabRwBkRs@D#IaLJf{QVS qK IaLkmEYL#!R@m]}ux`BupJH_]]}_`CW?M\\\\B_`CW?Avb`` !R@FL]fgp !Ruwu~@Ha}bOq~Oxa}bKu~Oxa}GXX|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n];\n//# sourceMappingURL=defaultDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDatabase = getDatabase;\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst defaultDatabase_js_1 = require(\"./defaultDatabase.js\");\n/**\n * @description Get the default databases of reactions for positive and negative mode\n * @param {Object} options - Options for database selection\n * @param {('ionization'|'resonance'|'reaction')[]} [options.kind=['ionization','resonance','reaction']] - The kind of database to be used\n * @param {('esi'|'ei')[]} [options.ionizations=['esi','ei']] - The ionization technique to be used\n * @param {('positive'|'negative')[]} [options.modes=['positive','negative']] - The ionization mode to be used\n * @param {string} [options.dwar] - The dwar file to use. Default will use an included mass fragmentation database\n * @returns\n */\nfunction getDatabase(options = {}) {\n    const { kind = ['ionization', 'resonance', 'reaction'], ionizations = ['esi', 'ei'], modes = ['positive', 'negative'], dwar, } = options;\n    const fullDatabase = dwar ? (0, openchemlib_utils_1.parseDwar)(dwar).data : defaultDatabase_js_1.defaultDatabase;\n    const database = fullDatabase.filter((entry) => kind.some((k) => entry.kind.includes(k)) &&\n        ionizations.some((ik) => entry.ionization.split(',').includes(ik)) &&\n        modes.some((m) => entry.mode.split(',').includes(m)));\n    return database;\n}\n//# sourceMappingURL=getDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMasses = getMasses;\n/**\n * @description get array of mz from fragmentation nodes\n * @param {Array} nodes valid nodes of fragmentation process\n * @returns {Array}  array of unique mz values\n\n */\nfunction getMasses(nodes) {\n    let masses = {};\n    for (const node of nodes) {\n        for (let molecule of node.molecules) {\n            if (molecule.info.mz) {\n                if (!masses[molecule.info.mz]) {\n                    masses[molecule.info.mz] = {\n                        ...molecule.info,\n                        molecules: [],\n                        minDepth: node.depth,\n                    };\n                }\n                masses[molecule.info.mz].molecules.push({\n                    idCode: molecule.idCode,\n                    molfile: molecule.molfile,\n                    depth: node.depth,\n                });\n                if (masses[molecule.info.mz].minDepth > node.depth) {\n                    masses[molecule.info.mz].minDepth = node.depth;\n                }\n            }\n        }\n    }\n    return Object.values(masses);\n}\n//# sourceMappingURL=getMasses.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reactionFragmentation = reactionFragmentation;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_1 = __importDefault(require(\"openchemlib\"));\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getDatabase_1 = require(\"./database/getDatabase\");\nconst getMasses_1 = require(\"./utils/getMasses\");\n/**\n * @description Fragment a molecule by applying reactions from a custom database of reactions\n * @param {import('openchemlib').Molecule} oclMolecule - The OCL molecule to be fragmented\n * @param {Object}  [options={}]\n * @param {('esi'|'ei')[]}  [options.ionizations=['esi']] - The ionization technique to be used\n * @param {('positive'|'negative')[]}  [options.modes=['positive']] - The ionization mode to be used\n * @param {number}  [options.maxDepth=5] - The maximum depth of the overall fragmentation tree\n * @param {number}  [options.limitReactions=200] - The maximum number of reactions to be applied to each branch\n * @param {string}  [options.dwar] - The dwar entry to be used, if not provided, the default one will be used\n * @param {number}  [options.maxIonizations=1] - The maximum depth of the ionization tree\n * @param {number}  [options.minIonizations=1] - The minimum depth of the ionization tree\n * @param {number}  [options.minReactions=0] - The minimum depth of the reaction tree\n * @param {number}  [options.maxReactions=3] - The maximum depth of the reaction tree\n * @returns {object} In-Silico fragmentation results with the following properties:\n * - masses: array of monoisotopic masses\n * - trees: array of fragmentation trees\n * - validNodes: nodes without dead branches\n */\nfunction reactionFragmentation(oclMolecule, options = {}) {\n    const { ionizations = ['esi'], modes = ['positive'], dwar, maxDepth = 5, limitReactions = 200, minIonizations = 1, maxIonizations = 1, minReactions = 0, maxReactions = 3, } = options;\n    const reactions = new openchemlib_utils_1.Reactions(openchemlib_1.default, {\n        moleculeInfoCallback: (molecule) => {\n            // @ts-ignore\n            const mf = (0, openchemlib_utils_1.getMF)(molecule).mf;\n            const mfInfo = new mf_parser_1.MF(mf).getInfo();\n            return {\n                mf,\n                mw: mfInfo.mass,\n                em: mfInfo.monoisotopicMass,\n                mz: mfInfo.observedMonoisotopicMass,\n                charge: mfInfo.charge,\n            };\n        },\n        maxDepth,\n        limitReactions,\n        skipProcessed: true,\n    });\n    reactions.appendHead([oclMolecule]);\n    reactions.applyOneReactantReactions((0, getDatabase_1.getDatabase)({\n        kind: ['ionization'],\n        ionizations,\n        modes,\n        dwar,\n    }), {\n        min: minIonizations,\n        max: maxIonizations,\n    });\n    const reactionDb = (0, getDatabase_1.getDatabase)({\n        kind: ['reaction'],\n        ionizations,\n        modes,\n        dwar,\n    });\n    for (let i = 1; i <= maxReactions; i++) {\n        let min = 1;\n        if (minReactions < i + 1) {\n            min = 0;\n        }\n        reactions.applyOneReactantReactions(reactionDb, {\n            min,\n            max: 1,\n        });\n    }\n    const trees = reactions.trees;\n    const validNodes = reactions.getValidNodes();\n    const masses = (0, getMasses_1.getMasses)(validNodes);\n    return {\n        trees,\n        validNodes,\n        masses,\n        reactions,\n    };\n}\n//# sourceMappingURL=reactionFragmentation.js.map","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  Children = {\n    map: mapChildren,\n    forEach: function (children, forEachFunc, forEachContext) {\n      mapChildren(\n        children,\n        function () {\n          forEachFunc.apply(this, arguments);\n        },\n        forEachContext\n      );\n    },\n    count: function (children) {\n      var n = 0;\n      mapChildren(children, function () {\n        n++;\n      });\n      return n;\n    },\n    toArray: function (children) {\n      return (\n        mapChildren(children, function (child) {\n          return child;\n        }) || []\n      );\n    },\n    only: function (children) {\n      if (!isValidElement(children))\n        throw Error(\n          \"React.Children.only expected to receive a single React element child.\"\n        );\n      return children;\n    }\n  };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.8\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.8\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & 261888;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === node.memoizedProps.revealOrder)\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$60 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$60 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$66) {\n      onActionError(actionQueue, node, error$66);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 42) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  useHostTransitionStatus: throwInvalidHookError,\n  useFormState: throwInvalidHookError,\n  useActionState: throwInvalidHookError,\n  useOptimistic: throwInvalidHookError,\n  useMemoCache: throwInvalidHookError,\n  useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId,\n  useHostTransitionStatus: useHostTransitionStatus,\n  useFormState: rerenderActionState,\n  useActionState: rerenderActionState,\n  useOptimistic: function (passthrough, reducer) {\n    var hook = updateWorkInProgressHook();\n    if (null !== currentHook)\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    hook.baseState = passthrough;\n    return [passthrough, hook.queue.dispatch];\n  },\n  useMemoCache: useMemoCache,\n  useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      nextProps = workInProgressRoot;\n      if (\n        null !== nextProps &&\n        ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n        0 !== dehydrated && dehydrated !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = dehydrated),\n          enqueueConcurrentRenderForLane(current, dehydrated),\n          scheduleUpdateOnFiber(nextProps, current, dehydrated),\n          SelectiveHydrationException)\n        );\n      renderDidSuspendDelayIfPossible();\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 4096);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current,\n    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"backwards\":\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"hidden\" === newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail)\n        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          current\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256) || !1\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          suspendedState,\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\n    suspendedCommitReason = {\n      stylesheets: null,\n      count: 0,\n      imgCount: 0,\n      imgBytes: 0,\n      suspenseyImages: [],\n      waitingForImages: !0,\n      waitingForViewTransition: !1,\n      unsuspend: noop$1\n    };\n    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$165) {\n      handleThrow(root, thrownValue$165);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects();\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$201,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$201 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$201 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$201 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          releaseSingletonInstance(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n  \"19.2.8\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.8\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n  bundleType: 0,\n  version: \"19.2.8\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.8\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.8\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/**\n * Assign x/y coordinates to every node in place, stacking children vertically\n * and spreading tree depth horizontally.\n * @param data - Nodes to lay out; mutated in place.\n * @param options - Layout origin and spacing between nodes.\n */\nexport function calculatePosition(data, options = {}) {\n    const { x = 0, y = 22, spacingVertical = 30, spacingHorizontal = 140, } = options;\n    calculateInnerBoxSize(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n    calculatePositionSS(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n}\nfunction calculateInnerBoxSize(data, options) {\n    for (const datum of data) {\n        if (datum.children) {\n            calculateInnerBoxSize(datum.children, options);\n            datum.childrenBoxSize = {\n                width: datum.position.width +\n                    options.spacingHorizontal +\n                    Math.max(...datum.children.map((d) => d.childrenBoxSize.width)),\n                height: Math.max(datum.position.height, options.spacingVertical * (datum.children.length - 1) +\n                    datum.children\n                        .map((d) => d.childrenBoxSize.height)\n                        .reduce((a, b) => a + b, 0)),\n            };\n        }\n        else {\n            datum.childrenBoxSize = {\n                width: datum.position.width,\n                height: datum.position.height,\n            };\n        }\n    }\n}\nfunction calculatePositionSS(data, options) {\n    let y = options.y;\n    for (const datum of data) {\n        if (datum.children) {\n            calculatePositionSS(datum.children, {\n                ...options,\n                x: options.x + datum.position.width + options.spacingHorizontal,\n                y,\n            });\n        }\n        datum.position.x = options.x;\n        datum.position.y =\n            datum.childrenBoxSize.height / 2 - datum.position.height / 2 + y;\n        y += datum.childrenBoxSize.height + options.spacingVertical;\n        datum.anchor = {\n            left: {\n                x: datum.position.x,\n                y: datum.position.y + datum.position.height / 2,\n            },\n            right: {\n                x: datum.position.x + datum.position.width,\n                y: datum.position.y + datum.position.height / 2,\n            },\n        };\n        datum.childrenBoxSize.height =\n            datum.childrenBoxSize.height + options.spacingVertical;\n    }\n}\n//# sourceMappingURL=calculatePosition.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Render a label split on newlines as stacked `<tspan>` lines, offset so the\n * block sits above, centered on, or below the baseline.\n * @param props - The multi-line label and its vertical anchoring.\n * @param props.label - Text to draw; each newline starts a new line.\n * @param props.verticalPosition - Anchors the block above, on, or below the baseline.\n * @returns One `<tspan>` per line.\n */\nexport function MultilineText(props) {\n    const { label, verticalPosition } = props;\n    if (!label)\n        return;\n    const lines = label.split(/\\r?\\n/);\n    const firstDX = verticalPosition === 'top'\n        ? 1\n        : verticalPosition === 'center'\n            ? -lines.length / 2 + 0.5\n            : -lines.length;\n    return (_jsx(_Fragment, { children: lines.map((line, index) => (_jsx(\"tspan\", { x: \"0\", dy: index === 0 ? `${firstDX}em` : '1em', children: line }, index))) }));\n}\n//# sourceMappingURL=MultilineText.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { MultilineText } from \"./MultilineText.js\";\n/**\n * Draw a text label at a point, painted twice (a light halo stroke under a solid\n * fill) so it stays readable over arrows and molecules.\n * @param props - Label content and placement.\n * @param props.x - Horizontal anchor coordinate.\n * @param props.y - Vertical anchor coordinate.\n * @param props.label - Text to draw; may contain newlines.\n * @param props.horizontalPosition - Text anchor: start, middle or end.\n * @param props.verticalPosition - Vertical alignment of the text block.\n * @returns The haloed label, as two overlaid `<text>` elements.\n */\nexport function Text(props) {\n    const { x, y, label, verticalPosition, horizontalPosition } = props;\n    const transform = `translate(${x},${y})`;\n    let textAnchor;\n    switch (horizontalPosition) {\n        case 'left':\n            textAnchor = 'start';\n            break;\n        case 'center':\n            textAnchor = 'middle';\n            break;\n        case 'right':\n            textAnchor = 'end';\n            break;\n        default:\n            textAnchor = 'middle';\n    }\n    return (_jsxs(_Fragment, { children: [_jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"rgba(255,255,255,0.5)\", strokeWidth: \"0.5em\", fill: \"none\", fontSize: \"14\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) }), _jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"none\", fontSize: \"14\", fill: \"black\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) })] }));\n}\n//# sourceMappingURL=Text.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { refX } from \"./MarkerDef.utils.js\";\nimport { Text } from \"./Text.js\";\n/**\n * Draw a curved arrow between two points, bending at their midpoint.\n * Relies on a marker with id=\"arrowhead\" being defined in the SVG.\n * @param props - Arrow configuration.\n * @param props.id - Optional id set on the arrow's group.\n * @param props.from - Start point (parent's right anchor).\n * @param props.to - End point (child's left anchor).\n * @param props.label - Text drawn next to the arrow.\n * @param props.horizontalPosition - Where the label sits along the arrow. Defaults to `'center'`.\n * @param props.verticalPosition - Vertical alignment of the label.\n * @returns The arrow group: the path and, when a label is given, its text.\n */\nexport function Arrow(props) {\n    const { id, from, to, label, horizontalPosition = 'center', verticalPosition = 'center', } = props;\n    const middle = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n    const headInflectionPoint = {\n        x: to.x - refX * 2, // refX attribute of the marker element in the Arrow component shifts the arrow head to the left, and that the vertices of the arrow head are set to refX, which means that the beginning of the arrow head is refX * 2 to the left.\n        y: to.y,\n    };\n    const d = `M ${from.x} ${from.y} C ${middle.x} ${from.y}  ${middle.x} ${to.y}  ${headInflectionPoint.x} ${to.y} Q ${headInflectionPoint.x} ${to.y}  ${to.x} ${to.y} `;\n    return (_jsxs(\"g\", { id: id, children: [_jsx(\"path\", { d: d, style: {\n                    fill: 'none',\n                    strokeWidth: '2',\n                    stroke: 'black',\n                    markerEnd: 'url(#arrowhead)',\n                } }), horizontalPosition === 'center' && (_jsx(Text, { x: middle.x, y: middle.y, label: label, horizontalPosition: horizontalPosition, verticalPosition: verticalPosition })), horizontalPosition === 'right' && (_jsx(Text, { x: to.x - 12, y: to.y - 8, label: label, horizontalPosition: \"right\", verticalPosition: verticalPosition })), horizontalPosition === 'left' && (_jsx(Text, { x: from.x + 12, y: from.y + 8, label: label, horizontalPosition: \"left\", verticalPosition: verticalPosition }))] }));\n}\n//# sourceMappingURL=Arrow.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Arrow } from \"../components/Arrow.js\";\n/**\n * Build the connector arrows that link each parent node to its children.\n * @param nodes - Positioned nodes, each carrying left/right `anchor` points.\n * @param options - Label and id callbacks plus label placement.\n * @returns One arrow element per parent-to-child edge.\n */\nexport function getArrows(nodes, options = {}) {\n    const status = { level: 0 };\n    const arrows = [];\n    getArrowsSS(nodes, arrows, status, options);\n    return arrows;\n}\nfunction getArrowsSS(nodes, arrows, status, options = {}) {\n    const { getLabel, horizontalPosition, getID, verticalPosition } = options;\n    for (const node of nodes) {\n        if (node.children) {\n            for (const child of node.children) {\n                arrows.push(_jsx(Arrow, { id: getID ? getID(node) : undefined, from: node.anchor.right, to: child.anchor.left, label: getLabel?.(child), horizontalPosition: horizontalPosition, verticalPosition: verticalPosition }, arrows.length));\n            }\n            getArrowsSS(node.children, arrows, {\n                ...status,\n                level: status.level + 1,\n            }, options);\n        }\n    }\n}\n//# sourceMappingURL=getArrows.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Flatten the positioned tree into one translated SVG group per node.\n * @param nodes - Positioned nodes, each carrying its `position` and rendered `element`.\n * @param options - May provide `getID` to stamp an id on each group.\n * @returns One `<g>` element per node, moved to the node's computed coordinates.\n */\nexport function getBoxes(nodes, options) {\n    const boxes = [];\n    appendBoxes(nodes, boxes, options);\n    return boxes;\n}\nfunction appendBoxes(nodes, boxes, options = {}) {\n    const { getID } = options;\n    for (const node of nodes) {\n        boxes.push(_jsx(\"g\", { id: getID ? getID(node) : undefined, transform: `translate(${node.position.x} ${node.position.y})`, children: node.element }, boxes.length));\n        if (node.children) {\n            appendBoxes(node.children, boxes, options);\n        }\n    }\n}\n//# sourceMappingURL=getBoxes.js.map","/**\n * Deep-clone the tree and attach, to every node, the rendered SVG `element` and\n * its intrinsic `position` size produced by the node renderer.\n * @param data - Root nodes of the tree to render.\n * @param options - Node renderer, its options and the optional branch-skipping callback.\n * @returns The annotated clone, ready to be laid out and drawn.\n */\nexport function prepareTree(data, options) {\n    data = structuredClone(data);\n    prepareTreeSS(data, options);\n    return data;\n}\nfunction prepareTreeSS(data, options) {\n    const { nodeRenderer, nodeRendererOptions = {}, shouldSkipBranch } = options;\n    for (const datum of data) {\n        if (options.parent) {\n            datum.parent = options.parent;\n        }\n        const elementAndSize = nodeRenderer(datum, nodeRendererOptions);\n        datum.position = {\n            x: 0,\n            y: 0,\n            width: elementAndSize.width,\n            height: elementAndSize.height,\n        };\n        datum.element = elementAndSize.element;\n        if (datum.children?.length === 0) {\n            delete datum.children;\n        }\n        if (datum.children) {\n            if (shouldSkipBranch) {\n                const parents = [datum];\n                let parent = datum.parent;\n                while (parent) {\n                    parents.push(parent);\n                    parent = parent.parent;\n                }\n                datum.children = datum.children.filter((child) => !shouldSkipBranch(child, parents));\n            }\n            prepareTreeSS(datum.children, {\n                ...options,\n                parent: datum,\n            });\n        }\n    }\n}\n//# sourceMappingURL=prepareTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { refX } from \"./MarkerDef.utils.js\";\n/**\n * Define the shared \"arrowhead\" marker reused as the tip of every connector arrow.\n * @returns SVG `<defs>` holding the arrowhead marker.\n */\nexport function MarkerDef() {\n    return (_jsx(\"defs\", { children: _jsx(\"marker\", { id: \"arrowhead\", markerWidth: \"10\", markerHeight: \"7\", refX: refX, refY: \"3.5\", orient: \"auto\", children: _jsx(\"polygon\", { points: \"0 0, 10 3.5, 0 7\" }) }) }));\n}\n//# sourceMappingURL=MarkerDef.js.map","export const refX = 10;\n//# sourceMappingURL=MarkerDef.utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { calculatePosition } from \"../data/calculatePosition.js\";\nimport { getArrows } from \"../data/getArrows.js\";\nimport { getBoxes } from \"../data/getBoxes.js\";\nimport { prepareTree } from \"../data/prepareTree.js\";\nimport { MarkerDef } from \"./MarkerDef.js\";\n/**\n * Top-level component: prepare, lay out and draw the whole tree as one SVG,\n * sized to fit its content, with node boxes and the arrows connecting them.\n * @param props - The `tree` plus node, arrow and position option objects.\n * @returns The complete `<svg>` element.\n */\nexport function SVGBoxesTree(props) {\n    const { tree, ...options } = props;\n    const { arrowRendererOptions, nodeRendererOptions, positionOptions } = options;\n    const data = prepareTree(tree, options);\n    calculatePosition(data, positionOptions);\n    const boxes = getBoxes(data, nodeRendererOptions);\n    const arrows = getArrows(data, arrowRendererOptions);\n    const svgSize = {\n        width: 0,\n        height: 0,\n    };\n    const width = [];\n    for (const datum of data) {\n        width.push(datum.childrenBoxSize.width);\n        svgSize.height += datum.childrenBoxSize.height;\n    }\n    svgSize.width = Math.max(...width);\n    return (_jsxs(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${svgSize.width} ${svgSize.height}`, children: [_jsx(MarkerDef, {}), boxes, arrows] }));\n}\n//# sourceMappingURL=SVGBoxesTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Thin wrapper around the SVG `<rect>` element, forwarding all props.\n * @param props - Any SVG rect attributes (size, position, style…).\n * @returns The `<rect>` element.\n */\nexport function Rectangle(props) {\n    return _jsx(\"rect\", { ...props });\n}\n//# sourceMappingURL=Rectangle.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Inject an already-rendered SVG fragment (e.g. a molecule) into the tree.\n * @param props - Wrapper for the raw SVG markup.\n * @param props.svg - The SVG fragment to inject; renders nothing when empty.\n * @returns A group holding the injected markup, or null when there is nothing to draw.\n */\nexport function SVG(props) {\n    if (!props.svg)\n        return null;\n    return (_jsx(\"g\", { dangerouslySetInnerHTML: {\n            __html: props.svg,\n        } }));\n}\n//# sourceMappingURL=SVG.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from \"../components/Rectangle.js\";\nimport { SVG } from \"../components/SVG.js\";\n/**\n * Node renderer for reaction/molecule trees: draw a node's molecule(s) and its\n * top label inside a bordered box, and report the box's measured size.\n * @param node - The tree node to render.\n * @param nodeRendererOptions - Callbacks and limits controlling molecule extraction and styling.\n * @returns The node's rendered `element` with its `width` and `height`.\n */\nexport function moleculeRenderer(node, nodeRendererOptions) {\n    const molecules = getMolecules(node, nodeRendererOptions);\n    const topLabel = getTopLabel(node, nodeRendererOptions);\n    const width = Math.max(molecules.width, topLabel.width);\n    const height = Math.max(molecules.height, topLabel.height);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        stroke: 'black',\n                        fill: 'white',\n                        ...node.style,\n                        ...nodeRendererOptions.getBoxStyle?.(node),\n                    } }), molecules.element, topLabel.element] })),\n    };\n}\nfunction getTopLabel(node, options = {}) {\n    const label = options.getTopLabel?.(node) || node.label;\n    if (!label) {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: 200,\n        height: 20,\n        element: (_jsx(\"text\", { x: 0, y: -6, textAnchor: \"start\", stroke: \"none\", fontSize: \"14\", fill: \"black\", children: label })),\n    };\n}\n/**\n * Lay out every molecule of a node side by side, scaling each to fit the size\n * limits; supports reaction nodes that carry several molecules.\n * @param node - The tree node whose molecules are drawn.\n * @param options - Molecule extraction callbacks and per-molecule size limits.\n * @returns The combined drawing with its overall `width` and `height`.\n */\nfunction getMolecules(node, options) {\n    const { maxWidth = 200, maxHeight = 150, getMolecules, getMoleculeStyle, } = options;\n    if (!getMolecules) {\n        throw new Error('getMolecules is not defined');\n    }\n    const molecules = getMolecules(node);\n    if (!molecules) {\n        return {\n            width: 0,\n            height: 0,\n            element: undefined,\n        };\n    }\n    const svgs = molecules.filter(Boolean).map((molecule, index) => {\n        const svg = molecule.toSVG(maxWidth, maxHeight, undefined, {\n            autoCrop: true,\n            autoCropMargin: 10,\n            suppressChiralText: true,\n        });\n        if (getMoleculeStyle) {\n            return addStyleToSVG(svg, getMoleculeStyle(molecule, node, index));\n        }\n        return svg;\n    });\n    const { svg, width, height } = joinSVGs(svgs);\n    return {\n        width,\n        height,\n        element: _jsx(SVG, { svg: svg }),\n    };\n}\nfunction getPlus(options = {}) {\n    const { size = 11, padding = 5, strokeWidth = 2 } = options;\n    const x1 = padding + size / 2;\n    const y1 = padding;\n    const x2 = padding + size / 2;\n    const y2 = padding + size;\n    return {\n        svg: `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>` +\n            `<line x1=\"${y1}\" y1=\"${x1}\" x2=\"${y2}\" y2=\"${x2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>`,\n        width: size + padding * 2,\n        height: size + padding * 2,\n    };\n}\nfunction joinSVGs(svgs) {\n    const results = [];\n    let maxHeight = 0;\n    for (const svg of svgs) {\n        const size = getSVGViewBox(svg);\n        if (results.length > 0) {\n            results.push(getPlus());\n        }\n        results.push({ svg, width: size.width, height: size.height });\n        maxHeight = Math.max(maxHeight, size.height);\n    }\n    let currentWidth = 0;\n    for (const result of results) {\n        const shiftX = currentWidth;\n        const shiftY = (maxHeight - result.height) / 2;\n        result.shiftedSVG = `<g transform=\"translate(${shiftX},${shiftY})\">${result.svg}</g>`;\n        currentWidth += result.width;\n    }\n    return {\n        width: currentWidth,\n        height: maxHeight,\n        svg: results.map((result) => result.shiftedSVG).join('\\n'),\n    };\n}\nfunction getSVGViewBox(svg) {\n    const match = svg.match(/.*viewBox=\"(?<minX>-?\\d+) (?<minY>-?\\d+) (?<width>\\d+) (?<height>\\d+)\".*/);\n    if (!match?.groups) {\n        throw new Error('ViewBox not found');\n    }\n    // convert to numbers and return the object\n    return {\n        minX: Number(match.groups.minX),\n        minY: Number(match.groups.minY),\n        width: Number(match.groups.width),\n        height: Number(match.groups.height),\n    };\n}\nfunction styleObjectToString(style) {\n    const styleArray = [];\n    for (const property in style) {\n        if (Object.hasOwn(style, property)) {\n            const kebabCaseProperty = property\n                .replaceAll(/([A-Z])/g, '-$1')\n                .toLowerCase();\n            styleArray.push(`${kebabCaseProperty}: ${style[property]}`);\n        }\n    }\n    return styleArray.join('; ');\n}\nfunction addStyleToSVG(svg, style) {\n    if (!style)\n        return svg;\n    const size = getSVGViewBox(svg);\n    const match = svg.match(/<svg.*>/);\n    if (!match) {\n        throw new Error('SVG tag not found');\n    }\n    const svgTag = match[0];\n    const styleString = styleObjectToString(style);\n    const styleRectange = `<rect x=\"${size.minX}\" y=\"${size.minY}\" width=\"${size.width}\" height=\"${size.height}\" style=\"${styleString}\"></rect>`;\n    return svg.replace(svgTag, `${svgTag}${styleRectange}`);\n}\n//# sourceMappingURL=moleculeRenderer.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { flushSync } from 'react-dom';\nimport { createRoot } from 'react-dom/client';\nimport { SVGBoxesTree } from \"./components/SVGBoxesTree.js\";\n/**\n * Render a tree to a standalone SVG markup string. `flushSync` forces a\n * synchronous render so the markup is ready right away, which is what makes\n * server-side SVG generation possible.\n * @param tree - Root nodes of the tree to draw.\n * @param options - Node renderer and layout options forwarded to the tree.\n * @returns The SVG document as an HTML string.\n */\nexport function render(tree, options) {\n    const element = _jsx(SVGBoxesTree, { tree: tree, ...options });\n    const div = document.createElement('div');\n    const root = createRoot(div);\n    flushSync(() => {\n        root.render(element);\n    });\n    return div.innerHTML;\n}\n//# sourceMappingURL=render.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from \"../components/Rectangle.js\";\n/**\n * Node renderer for taxonomy trees: draw the taxon name, its rank and the count\n * of taxonomies inside a box, and report the box's measured size.\n * @param node - The taxonomy node to render.\n * @returns The node's rendered `element` with its `width` and `height`.\n */\nexport function taxonomyRenderer(node) {\n    const minSize = { width: 120, height: 20 };\n    const taxonomy = getTaxonomy(node, minSize);\n    const label = getLabel(node, minSize);\n    const width = Math.max(taxonomy.width, label.width);\n    const height = Math.max(taxonomy.height, label.height);\n    const nbTaxonomies = getNbTaxonomies(node, width, minSize);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        stroke: 'black',\n                        fill: 'white',\n                        ...node.style,\n                    } }), label.element, taxonomy.element, nbTaxonomies.element] })),\n    };\n}\nfunction getNbTaxonomies(node, width, minSize) {\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: width, y: -5, textAnchor: \"end\", stroke: \"none\", fontSize: \"14\", fill: \"#00008B\" // dark blue\n            , fontStyle: 'bold', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.nbTaxonomies })),\n    };\n}\nfunction getLabel(node, minSize, options = {}) {\n    const { spacingHorizontal } = {\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.rank === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: spacingHorizontal / 2, y: -6, textAnchor: \"start\", stroke: \"none\", fontSize: \"14\", fill: \"grey\", fontStyle: 'italic', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.rank })),\n    };\n}\nfunction getTaxonomy(node, minSize, options = {}) {\n    const { font, fontSize, spacingHorizontal } = {\n        font: 'Arial, Helvetica, sans-serif',\n        fontSize: 16,\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.name === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    let { width, height } = getStringSize(node.name, {\n        font,\n        fontSize,\n        spacingHorizontal,\n    });\n    const textWith = width;\n    let positionX = spacingHorizontal / 2;\n    if (height <= minSize.height) {\n        height = minSize.height;\n    }\n    if (width <= minSize.width) {\n        width = minSize.width;\n        positionX = (width - textWith + spacingHorizontal) / 2;\n    }\n    return {\n        width,\n        height,\n        element: (_jsx(\"g\", { height: height, width: width, dominantBaseline: \"central\", children: _jsx(\"text\", { x: positionX, y: height / 2, stroke: \"none\", fontSize: fontSize, fill: \"black\", ...(node.url ? { 'data-url': node.url } : {}), fontFamily: font, children: node.name }) })),\n    };\n}\nfunction getStringSize(text, options) {\n    const { font = 'Arial, Helvetica, sans-serif', fontSize = 16, spacingHorizontal = 8, } = options;\n    const tempElement = document.createElement('span');\n    tempElement.style.font = `${fontSize}px ${font}`;\n    tempElement.style.visibility = 'hidden';\n    tempElement.style.position = 'absolute';\n    tempElement.style.top = '-9999px';\n    tempElement.style.left = '-9999px';\n    tempElement.textContent = text;\n    document.body.append(tempElement);\n    const { height, width } = tempElement.getBoundingClientRect();\n    tempElement.remove();\n    return { width: width + spacingHorizontal, height };\n}\n//# sourceMappingURL=taxonomyRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentationSVG = getFragmentationSVG;\nconst react_tree_svg_1 = require(\"react-tree-svg\");\n/**\n * @typedef {object} MassPeak\n * @property {number} mass\n * @property {number} intensity\n */\n/**\n * @param {object[]} trees\n * @param {object} [options={}]\n * @param {object} [options.OCL]\n * @param {number} [options.accuracy]\n * @param {MassPeak[]} [options.peaks]\n * @returns\n */\nfunction getFragmentationSVG(trees, options = {}) {\n    const { OCL, accuracy, peaks = [] } = options;\n    const maxIntensity = peaks?.length > 0\n        ? Math.log(Math.max(...peaks.map((peak) => peak.intensity)) + 1)\n        : 0;\n    const rendererOptions = {\n        nodeRenderer: react_tree_svg_1.moleculeRenderer,\n        arrowRendererOptions: {\n            getLabel: (node) => {\n                return node?.reaction?.label;\n            },\n            horizontalPosition: 'center',\n        },\n        nodeRendererOptions: {\n            getTopLabel: (node) => {\n                const mz = node?.molecules[0]?.info?.mz;\n                if (mz === undefined)\n                    return;\n                return `${mz.toFixed(4)} m/z`;\n            },\n            getBoxStyle: (node) => {\n                for (const molecule of node.molecules) {\n                    const peak = getPeakInRange(peaks, molecule?.info?.mz, accuracy);\n                    if (peak) {\n                        return {\n                            fillOpacity: maxIntensity\n                                ? (0.2 * Math.log(peak.intensity + 1)) / maxIntensity\n                                : 0.2,\n                            fill: 'red',\n                        };\n                    }\n                }\n            },\n            getMolecules: (node) => {\n                return node.molecules.map((molecule) => OCL.Molecule.fromIDCode(molecule.idCode));\n            },\n        },\n        positionOptions: {\n            spacingHorizontal: 150,\n        },\n    };\n    return (0, react_tree_svg_1.render)(trees, rendererOptions);\n}\nfunction getPeakInRange(peaks, mass, accuracy) {\n    if (!mass || !Array.isArray(peaks)) {\n        return undefined;\n    }\n    const massAccuracy = (accuracy * mass) / 1e6;\n    for (const peak of peaks) {\n        if (Math.abs(peak.mass - mass) <= massAccuracy) {\n            return peak;\n        }\n    }\n    return undefined;\n}\n//# sourceMappingURL=getFragmentationSVG.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMolecules = fromMolecules;\nconst mass_fragmentation_1 = require(\"mass-fragmentation\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/** * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {{smiles?:string,molecule?:string,idCode?:string}[]}    entries - Array of object containing a property to recreate the molecule\n * @param {typeof import('openchemlib')} OCL - The OCL library\n * @param {object}    [options={}]\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {boolean}   [options.groupResults=false] - Should we group the results if they have the same monoisotopic mass and experimental mass\n * @param {object}    [options.fragmentation={}]\n * @param {object}    [options.fragmentation.acyclic=false]\n * @param {object}    [options.fragmentation.cyclic=false]\n * @param {object}    [options.fragmentation.full=true]\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {Promise}\n */\nasync function fromMolecules(entries, OCL, options = {}) {\n    let { onStep, ionizations, filter, fragmentation = { acyclic: false, cyclic: false, full: true }, groupResults = false, } = options;\n    ionizations = (0, mf_utilities_1.preprocessIonizations)(ionizations);\n    let results = [];\n    for (let i = 0; i < entries.length; i++) {\n        const entry = entries[i];\n        const molecule = getMolecule(entry, OCL);\n        if (!molecule)\n            continue;\n        const { acyclic = false, cyclic = false, full = true } = fragmentation;\n        const allFragments = (0, mass_fragmentation_1.fragment)(molecule, {\n            acyclic,\n            cyclic,\n            full,\n        });\n        for (const oneFragment of allFragments) {\n            appendResults(results, oneFragment, {\n                entry,\n                ionizations,\n                filter,\n            });\n            if (onStep)\n                onStep(i);\n        }\n    }\n    if (groupResults) {\n        results = groupFragmentationResults(results);\n    }\n    return results.toSorted((a, b) => a.em - b.em);\n}\n/**\n * We could group the results and replace the property 'fragment' by 'fragments'\n * @param {*} results\n */\nfunction groupFragmentationResults(results) {\n    const sortedResults = results.slice().toSorted((a, b) => {\n        if (a.em !== b.em) {\n            return a.em - b.em;\n        }\n        if (a.ms.em !== b.ms.em) {\n            return a.ms.em - b.ms.em;\n        }\n        if (a.fragment.idCode < b.fragment.idCode)\n            return -1;\n        return 1;\n    });\n    const groupedResults = [];\n    let currentResult = {};\n    for (let result of sortedResults) {\n        if (result.em !== currentResult.em ||\n            result.ms.em !== currentResult.ms.em) {\n            currentResult = {\n                ...result,\n                fragments: [\n                    {\n                        idCode: result.fragment.idCode,\n                        type: result.fragment.type,\n                        count: 1,\n                        parents: [{ ...result.fragment.parent, count: 1 }],\n                    },\n                ],\n            };\n            delete currentResult.fragment;\n            groupedResults.push(currentResult);\n        }\n        else {\n            const lastFragment = currentResult.fragments.at(-1);\n            if (lastFragment.idCode === result.fragment.idCode) {\n                lastFragment.count++;\n                if (lastFragment.parents.at(-1).idCode === result.fragment.parent.idCode) {\n                    lastFragment.parents.at(-1).count++;\n                }\n                else {\n                    lastFragment.parents.push({ ...result.fragment.parent, count: 1 });\n                }\n            }\n            else {\n                currentResult.fragments.push({\n                    idCode: result.fragment.idCode,\n                    type: result.fragment.type,\n                    count: 1,\n                    parents: [{ ...result.fragment.parent, count: 1 }],\n                });\n            }\n        }\n    }\n    for (let group of groupedResults) {\n        group.fragments = group.fragments.toSorted((a, b) => b.count - a.count);\n    }\n    return groupedResults;\n}\n/**\n *\n * @param {object} entry\n * @param {typeof import('openchemlib')} OCL - The OCL library\n */\nfunction getMolecule(entry, OCL) {\n    if (entry.idCode) {\n        return OCL.Molecule.fromIDCode(entry.idCode);\n    }\n    if (entry.ocl && entry.ocl.idCode) {\n        return OCL.Molecule.fromIDCode(entry.ocl.idCode);\n    }\n    if (entry.smiles) {\n        return OCL.Molecule.fromSmiles(entry.smiles);\n    }\n    if (entry.molfile) {\n        return OCL.Molecule.fromMolfile(entry.molfile);\n    }\n    return undefined;\n}\nfunction appendResults(results, oneFragment, options) {\n    const mf = oneFragment.mfInfo.mf;\n    const { ionizations, filter, entry } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    for (let ionization of ionizations) {\n        const result = {\n            charge: mfInfo.charge,\n            em: mfInfo.monoisotopicMass,\n            mw: mfInfo.mass,\n            mf: mfInfo.mf,\n            ionization,\n            unsaturation: mfInfo.unsaturation,\n            atoms: mfInfo.atoms,\n            fragment: {\n                parent: {\n                    ...entry,\n                    idCode: oneFragment.parentIDCode,\n                },\n                idCode: oneFragment.idCode,\n                type: oneFragment.fragmentType,\n            },\n        };\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        results.push(result);\n    }\n}\n//# sourceMappingURL=fromMolecules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\n * Convert a nucleic sequence to a MF\n * @param {String} sequence\n * @param {object} [options={}]\n * @param {string} [options.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction sequenceToMF(sequence, options = {}) {\n    let fivePrimeTerminal = 'HO';\n    let threePrimeTerminal = 'H';\n    sequence = sequence.replace(/^HO/, '');\n    sequence = sequence.replace(/H$/, '');\n    sequence = sequence.trim();\n    if (sequence === '')\n        return '';\n    sequence = (0, mf_utilities_1.ensureUppercaseSequence)(sequence);\n    // if the sequence is in lowercase but the parenthesis we should convert it to uppercase\n    if (sequence.match(/^[a-z]+$/)) {\n        sequence = sequence.toUpperCase();\n    }\n    let { kind, circular, fivePrime = 'monophosphate' } = options;\n    fivePrime = fivePrime.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (!kind) {\n        if (sequence.includes('U')) {\n            kind = 'rna';\n        }\n        else {\n            kind = 'ds-dna';\n        }\n    }\n    kind = kind.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (sequence.includes('(') && kind === 'dsdna') {\n        throw new Error('Nucleotide sequenceToMF: modifications not allowed for ds-DNA');\n    }\n    let results = [[]];\n    if (kind === 'dsdna')\n        results.push([]);\n    let parenthesisCounter = 0;\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        while (sequence[i + 1] && sequence[i + 1].match(/[a-z]/)) {\n            i++;\n            currentSymbol += sequence[i];\n        }\n        if (currentSymbol.length > 1) {\n            results[0].push(currentSymbol);\n            continue;\n        }\n        if (currentSymbol === '(' ||\n            currentSymbol === ')' ||\n            parenthesisCounter > 0) {\n            if (currentSymbol === '(') {\n                parenthesisCounter++;\n                if (i === 0)\n                    fivePrimeTerminal = '';\n            }\n            if (currentSymbol === ')') {\n                parenthesisCounter--;\n                if (i === sequence.length - 1)\n                    threePrimeTerminal = '';\n            }\n            switch (kind) {\n                case 'dna':\n                case 'rna':\n                    results[0].push(currentSymbol);\n                    break;\n                default:\n                    // eslint-disable-next-line no-console\n                    console.warn(`Nucleotide sequenceToMF with modification: unknown kind: ${kind}`);\n            }\n            continue;\n        }\n        let nucleotideType = i === 0 ? fivePrime : 'monophosphate';\n        currentSymbol = currentSymbol.replace(/[\\t\\n\\r ]/, '');\n        if (!currentSymbol)\n            continue;\n        switch (kind) {\n            case 'dna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'rna':\n                results[0].push(oxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'dsdna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                results[1].unshift(desoxyNucleotides[nucleotideType][complementary[currentSymbol]]);\n                break;\n            default:\n                // eslint-disable-next-line no-console\n                console.warn(`Nucleotide sequenceToMF: unknown kind: ${kind}`);\n        }\n    }\n    if (!circular) {\n        for (const result of results)\n            result.unshift(fivePrimeTerminal);\n        for (const result of results)\n            result.push(threePrimeTerminal);\n    }\n    return results.map((result) => result.join('')).join('.');\n}\nconst complementary = {\n    A: 'T',\n    T: 'A',\n    C: 'G',\n    G: 'C',\n};\nconst desoxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNA')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNApp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAppp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\nconst oxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNA')) {\n    if (group.oneLetter) {\n        oxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNApp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAppp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.furanThreeTerm = furanThreeTerm;\nfunction furanThreeTerm(nucleotide) {\n    // last residue should become a furan\n    let parts = nucleotide\n        .replaceAll(' ', '')\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let last = parts.pop();\n    if (!last.match(/D[acgt]mp(.*)$/)) {\n        // eslint-disable-next-line no-console\n        console.warn(`furanThreeTerm can not remove a non monophosphate nucleic acid: ${last}`);\n        return parts.join('') + last;\n    }\n    return parts.join('') + last.replace(/D[acgt]mp(.*)$/, 'Furp');\n}\n//# sourceMappingURL=furanThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTerm = addFiveTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\nfunction addFiveTerm(mfs, fiveTerm, i, options) {\n    if (options.a)\n        mfs.push(`${fiveTerm}O-1H-1$a${i}`); // neutral ok\n    if (options.ab && i > 1)\n        mfs.push(`${(0, furanThreeTerm_js_1.furanThreeTerm)(fiveTerm)}$a${i}-B`); // A minus base\n    if (options.b)\n        mfs.push(`${fiveTerm}H$b${i}`); // need to add an hydrogen, see: https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q&f=true\n    if (options.c)\n        mfs.push(`${fiveTerm}PO2$c${i}`); // neutral ok\n    if (options.d)\n        mfs.push(`${fiveTerm}PO3H2$d${i}`);\n    if (options.dh2o)\n        mfs.push(`${fiveTerm}PO2$d${i}-H2O`);\n}\n//# sourceMappingURL=addFiveTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.baseLoss = baseLoss;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst mfLosses = {};\nfor (const nucleotide of ['Amp', 'Tmp', 'Cmp', 'Gmp', 'Ump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(0),\n        diff: (0, mf_utilities_1.mfDiff)('Rmp', nucleotide),\n    };\n}\nfor (const nucleotide of ['Damp', 'Dtmp', 'Dcmp', 'Dgmp', 'Dump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(1).toUpperCase(),\n        diff: (0, mf_utilities_1.mfDiff)('Drmp', nucleotide),\n    };\n}\nfunction baseLoss(nucleotide) {\n    // any residue can loose a base\n    let results = [];\n    for (let key in mfLosses) {\n        const base = mfLosses[key];\n        if (nucleotide.includes(key)) {\n            results.push(`${nucleotide}(${base.diff})$${base.code}*`);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=baseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTermBaseLoss = addFiveTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addFiveTermBaseLoss(mfs, fiveTerm, i, options) {\n    if (!options.abcdBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(fiveTerm);\n    for (const mf of loss) {\n        if (options.a) {\n            mfs.push(`${mf}`.replace('$', `O-1H-1$a${i} `));\n        }\n        if (options.b) {\n            mfs.push(`${mf}`.replace('$', `H-1$b${i} `));\n        }\n        if (options.c) {\n            mfs.push(`${mf}`.replace('$', `PO2$c${i} `));\n        }\n        if (options.d) {\n            mfs.push(`${mf}`.replace('$', `PO3H2$d${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addFiveTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addInternalTerm = addInternalTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\n// https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q=oligonucleotide%20b%20fragmentation&f=false\nfunction addInternalTerm(mfs, internal, ter3, ter5, options = {}) {\n    if (options.aw) {\n        // without base loss\n        mfs.push(`HO${internal}O-1H-1$w${ter3}:a${ter5}`); // A W\n    }\n    if (options.bw) {\n        // without base loss\n        mfs.push(`HO${internal}H$w${ter3}:b${ter5}`); // B W\n    }\n    if (options.abw) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`HO${fragment}$w${ter3}:a${ter5}-B`); // A minus base - W\n    }\n    if (options.aby) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`O-2P-1${fragment}$y${ter3}:a${ter5}-B`); // A minus base - Y\n    }\n}\n//# sourceMappingURL=addInternalTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTerm = addThreeTerm;\nfunction addThreeTerm(mfs, threeTerm, i, options) {\n    if (options.w)\n        mfs.push(`HO${threeTerm}$w${i}`); // neutral ok\n    if (options.x)\n        mfs.push(`H-1${threeTerm}$x${i}`); // neutral ok\n    if (options.y)\n        mfs.push(`O-2P-1${threeTerm}$y${i}`); // neutral ok\n    if (options.z)\n        mfs.push(`O-3H-2P-1${threeTerm}$z${i}`); // neutral ok\n    if (options.zch2)\n        mfs.push(`O-3H-4C-1P-1${threeTerm}$z${i}-CH2`); // TODO to confirm\n}\n//# sourceMappingURL=addThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTermBaseLoss = addThreeTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addThreeTermBaseLoss(mfs, threeTerm, i, options) {\n    if (!options.wxyzBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(threeTerm);\n    for (const mf of loss) {\n        if (options.w) {\n            mfs.push(`HO${mf}`.replace('$', `$w${i} `));\n        }\n        if (options.x) {\n            mfs.push(`H-1${mf}`.replace('$', `$x${i} `));\n        }\n        if (options.y) {\n            mfs.push(`O-2P-1${mf}`.replace('$', `$y${i} `));\n        }\n        if (options.z) {\n            mfs.push(`O-3H-1P-1(+)${mf}`.replace('$', `$z${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addThreeTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateFragments = generateFragments;\nconst addFiveTerm_1 = require(\"./addFiveTerm\");\nconst addFiveTermBaseLoss_1 = require(\"./addFiveTermBaseLoss\");\nconst addInternalTerm_1 = require(\"./addInternalTerm\");\nconst addThreeTerm_1 = require(\"./addThreeTerm\");\nconst addThreeTermBaseLoss_1 = require(\"./addThreeTermBaseLoss\");\nfunction generateFragments(mf, options) {\n    if (options === undefined) {\n        options = {\n            a: false,\n            ab: false,\n            b: false,\n            c: false,\n            d: false,\n            dh2o: false,\n            w: false,\n            x: false,\n            y: false,\n            z: false,\n            zch2: false,\n            aw: false,\n            bw: false,\n            abw: false,\n            aby: false,\n            abcdBaseLoss: false,\n            wxyzBaseLoss: false,\n        };\n    }\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let fiveTerm = '';\n    let threeTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        fiveTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        threeTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let ter5 = 1; ter5 < mfparts.length; ter5++) {\n        fiveTerm += mfparts[ter5 - 1];\n        threeTerm = mfparts[mfparts.length - ter5] + threeTerm;\n        (0, addFiveTerm_1.addFiveTerm)(mfs, fiveTerm, ter5, options);\n        (0, addFiveTermBaseLoss_1.addFiveTermBaseLoss)(mfs, fiveTerm, ter5, options);\n        (0, addThreeTerm_1.addThreeTerm)(mfs, threeTerm, ter5, options);\n        (0, addThreeTermBaseLoss_1.addThreeTermBaseLoss)(mfs, threeTerm, ter5, options);\n    }\n    for (let i = 1; i < mfparts.length - 1; i++) {\n        let internal = '';\n        for (let j = i; j < mfparts.length - 1; j++) {\n            internal += mfparts[j];\n            if (j > i) {\n                (0, addInternalTerm_1.addInternalTerm)(mfs, internal, mfparts.length - i, j + 1, options);\n            }\n        }\n    }\n    return mfs;\n}\n//# sourceMappingURL=generateFragments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromNucleicSequence = fromNucleicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst nucleotide_1 = require(\"nucleotide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string} [sequencesString] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {number} [options.limit=100000]\n * @param {string} [options.ionizations='']\n * @param {object} [options.info={}]\n * @param {string} [options.info.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.info.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.info.circular=false]\n * @param {array}   [options.mfsArray=[]]\n * @param {object}  [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean} [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean} [options.fragmentation.ab=false] If true allow fragments of type 'a' minus base\n * @param {boolean} [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean} [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean} [options.fragmentation.d=false] If true allow fragments of type 'd'\n * @param {boolean} [options.fragmentation.dh2o=false] If true allow fragments of type 'd' with water loss\n * @param {boolean} [options.fragmentation.w=false] If true allow fragments of type 'w'\n * @param {boolean} [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean} [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean} [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean} [options.baseLoss=false] If true allow base loss at all the positions\n *\n * @param {object} [options.filter={}] Object defining options for molecular formula filter\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @returns {Promise}\n */\nasync function fromNucleicSequence(sequencesString, options = {}) {\n    const { mfsArray = [], fragmentation = {}, filter = {}, ionizations = '', info = {}, estimate = false, limit = 100000, onStep, } = options;\n    let sequences = (0, nucleotide_1.sequenceToMF)(sequencesString, info).split('.');\n    let fragmentsArray = sequences.slice();\n    // calculate fragmentation\n    for (let i = 0; i < sequences.length; i++) {\n        let sequence = sequences[i];\n        let fragments = (0, nucleotide_1.generateFragments)(sequence, fragmentation);\n        if (i === 1) {\n            // complementary sequence\n            fragments = fragments.map((fragment) => fragment.replaceAll('$', '$cmp-'));\n        }\n        fragmentsArray = fragmentsArray.concat(fragments);\n        if (fragmentation.baseLoss) {\n            fragmentsArray = fragmentsArray.concat((0, nucleotide_1.baseLoss)(sequence));\n        }\n    }\n    mfsArray.push(fragmentsArray);\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArray, {\n        ionizations,\n        filter,\n        uniqueMFs: false,\n        estimate,\n        onStep,\n        limit,\n    });\n    if (Array.isArray(combined)) {\n        // not an estimation\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromNucleicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aminoAcids = void 0;\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\n// Link for UTF8 code for modified: https://codepoints.net/search?sc=Grek\nexports.aminoAcids = [\n    // Standard amino acids\n    {\n        name: 'Alanine',\n        aa3: 'Ala',\n        aa1: 'A',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.33,\n        pKaN: 9.71,\n    },\n    {\n        name: 'Arginine',\n        aa3: 'Arg',\n        aa1: 'R',\n        sc: {\n            type: 'positive',\n            pKa: 12.1,\n        },\n        pKaC: 2.03,\n        pKaN: 9,\n    },\n    {\n        name: 'Asparagine',\n        aa3: 'Asn',\n        aa1: 'N',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Aspartic acid',\n        aa3: 'Asp',\n        aa1: 'D',\n        sc: {\n            type: 'negative',\n            pKa: 3.71,\n        },\n        pKaC: 1.95,\n        pKaN: 9.66,\n    },\n    {\n        name: 'Cysteine',\n        aa3: 'Cys',\n        aa1: 'C',\n        sc: {\n            type: 'special',\n            pKa: 8.14,\n        },\n        pKaC: 1.91,\n        pKaN: 10.28,\n    },\n    {\n        name: 'Glutamic acid',\n        aa3: 'Glu',\n        aa1: 'E',\n        sc: {\n            type: 'negative',\n            pKa: 4.15,\n        },\n        pKaC: 2.16,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Glutamine',\n        aa3: 'Gln',\n        aa1: 'Q',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.18,\n        pKaN: 9,\n    },\n    {\n        name: 'Glycine',\n        aa3: 'Gly',\n        aa1: 'G',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 2.34,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Histidine',\n        aa3: 'His',\n        aa1: 'H',\n        sc: {\n            type: 'positive',\n            pKa: 6.04,\n        },\n        pKaC: 1.7,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Isoleucine',\n        aa3: 'Ile',\n        aa1: 'I',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.26,\n        pKaN: 9.6,\n    },\n    {\n        name: 'Leucine',\n        aa3: 'Leu',\n        aa1: 'L',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.32,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Lysine',\n        aa3: 'Lys',\n        aa1: 'K',\n        sc: {\n            type: 'positive',\n            pKa: 10.67,\n        },\n        pKaC: 2.15,\n        pKaN: 9.16,\n    },\n    {\n        name: 'Methionine',\n        aa3: 'Met',\n        aa1: 'M',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.16,\n        pKaN: 9.08,\n    },\n    {\n        name: 'Phenylalanine',\n        aa3: 'Phe',\n        aa1: 'F',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.18,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Proline',\n        aa3: 'Pro',\n        aa1: 'P',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 1.95,\n        pKaN: 10.47,\n    },\n    {\n        name: 'Serine',\n        aa3: 'Ser',\n        aa1: 'S',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Threonine',\n        aa3: 'Thr',\n        aa1: 'T',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.2,\n        pKaN: 8.96,\n    },\n    {\n        name: 'Tryptophan',\n        aa3: 'Trp',\n        aa1: 'W',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.38,\n        pKaN: 9.34,\n    },\n    {\n        name: 'Tyrosine',\n        aa3: 'Tyr',\n        aa1: 'Y',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.24,\n        pKaN: 9.04,\n    },\n    {\n        name: 'Valine',\n        aa3: 'Val',\n        aa1: 'V',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.27,\n        pKaN: 9.52,\n    },\n    // Additional\n    {\n        name: 'Selenocysteine',\n        aa3: 'Sec',\n        aa1: 'U',\n    },\n    {\n        name: 'Pyrrolysine',\n        aa3: 'Pyl',\n        aa1: 'O',\n    },\n    // Ambiguous\n    {\n        name: 'Asparagine or aspartic acid',\n        aa3: 'Asx',\n        aa1: 'B',\n    },\n    {\n        name: 'Glutamine or glutamic acid',\n        aa3: 'Glx',\n        aa1: 'Z',\n    },\n    {\n        name: 'Leucine or isoleucine',\n        aa3: 'Xle',\n        aa1: 'J',\n    },\n    {\n        name: 'Unspecified or unknown',\n        aa3: 'Xaa',\n        aa1: 'X',\n    },\n];\n//# sourceMappingURL=aminoAcids.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateCharge = calculateCharge;\nexports.calculateIEP = calculateIEP;\nexports.calculateChart = calculateChart;\nexports.getColor = getColor;\nconst aminoAcids_1 = require(\"./aminoAcids\");\n// we will convert the data to an object to be much faster\nlet aaObject = {};\nfor (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n    aaObject[aminoAcids_1.aminoAcids[i].aa3] = aminoAcids_1.aminoAcids[i];\n}\nfunction calculateCharge(aas, pH = 7) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let charge = calculateForPh(combined, pH);\n    return Math.round(charge * 1000) / 1000;\n}\n// this methods required an array of aas\nfunction calculateIEP(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let first = 0;\n    let last = 14;\n    let current = 14;\n    let previous = 0;\n    let currentCharge;\n    while (Math.abs(current - previous) > 0.0001) {\n        previous = current;\n        current = (last + first) / 2;\n        currentCharge = calculateForPh(combined, current);\n        if (currentCharge > 0) {\n            first = current;\n        }\n        else if (currentCharge < 0) {\n            last = current;\n        }\n        else {\n            previous = current;\n        }\n    }\n    return Math.round(current * 1000) / 1000;\n}\nfunction calculateChart(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let y = [];\n    let x = [];\n    let yAbs = [];\n    for (let i = 0; i <= 14; i = i + 0.01) {\n        let charge = calculateForPh(combined, i);\n        x.push(i);\n        y.push(charge);\n        yAbs.push(Math.abs(charge));\n    }\n    combined.x = x;\n    combined.y = y;\n    combined.yAbs = yAbs;\n    return combined;\n}\nfunction calculateForPh(combined, pH) {\n    let total = 0;\n    total += 1 / (1 + 10 ** (pH - combined.first));\n    total += -1 / (1 + 10 ** (combined.last - pH));\n    for (let key in combined.acid) {\n        total += -combined.acid[key] / (1 + 10 ** (aaObject[key].sc.pKa - pH));\n    }\n    for (let key in combined.basic) {\n        total += combined.basic[key] / (1 + 10 ** (pH - aaObject[key].sc.pKa));\n    }\n    return total;\n}\n// we will combine the amino acids\nfunction combine(aas) {\n    let combined = {};\n    if (aaObject[aas[0]]) {\n        combined.first = aaObject[aas[0]].pKaN;\n    }\n    else {\n        return;\n    }\n    if (aaObject[aas.at(-1)]) {\n        combined.last = aaObject[aas.at(-1)].pKaC;\n    }\n    else {\n        return;\n    }\n    combined.basic = {};\n    combined.acid = {};\n    for (let i = 0; i < aas.length; i++) {\n        let currentAA = aas[i];\n        if (!aaObject[currentAA])\n            return;\n        if (aaObject[currentAA].sc && aaObject[currentAA].sc.type) {\n            if (aaObject[currentAA].sc.type === 'positive') {\n                if (!combined.basic[currentAA]) {\n                    combined.basic[currentAA] = 0;\n                }\n                combined.basic[currentAA]++;\n            }\n            else if (aaObject[currentAA].sc.type === 'negative') {\n                if (!combined.acid[currentAA]) {\n                    combined.acid[currentAA] = 0;\n                }\n                combined.acid[currentAA]++;\n            }\n        }\n    }\n    return combined;\n}\n/*\n We can generate a color based on iep\n 0 -> 7 means that at pH 7 it is charged negatively (blue)\n 7 -> 14 means that at pH7 it is charged positively (red)\n */\nfunction getColor(iep) {\n    if (iep < 7) {\n        if (iep < 3)\n            iep = 3;\n        let white = Math.round(255 - (7 - iep) * (200 / 4));\n        return `rgb(${white},${white},255)`;\n    }\n    else if (iep > 7) {\n        if (iep > 11)\n            iep = 11;\n        let white = Math.round(255 - (iep - 7) * (200 / 4));\n        return `rgb(255,${white},${white})`;\n    }\n    return 'rgb(255,255,255)';\n}\n//# sourceMappingURL=isoElectricPoint.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitPeptide = splitPeptide;\nfunction splitPeptide(sequence) {\n    let aas = sequence.replaceAll(/([A-Z])/g, ' $1').split(/ /);\n    let begin = 0;\n    while (aas[begin] === '' || aas[begin] === 'H') {\n        begin++;\n    }\n    let end = aas.length - 1;\n    while (aas[end] === 'O' || aas[end] === 'H') {\n        end--;\n    }\n    aas = aas.slice(begin, end + 1);\n    return aas;\n}\n//# sourceMappingURL=splitPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allowNeutralLoss = allowNeutralLoss;\n/**\n * Add neutral loss on natural amino acids\n * @param {*} mf\n * @returns\n */\nfunction allowNeutralLoss(mf) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = allowOneNeutralLoss(mf[i]);\n        }\n        return mf;\n    }\n    else {\n        return allowOneNeutralLoss(mf);\n    }\n}\nfunction allowOneNeutralLoss(mf) {\n    mf = mf.replaceAll(/(Ser|Thr|Asp|Glu)(?!\\()/g, '$1(H-2O-1)0-1');\n    mf = mf.replaceAll(/(Arg|Lys|Asn|Gln)(?!\\()/g, '$1(N-1H-3)0-1');\n    return mf;\n}\n//# sourceMappingURL=allowNeutralLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAA = getAA;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction getAA(code) {\n    if (code.length === 1) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n    if (code.length === 3) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa3 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n}\n//# sourceMappingURL=getAA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chargePeptide = chargePeptide;\nconst getAA_1 = require(\"./getAA\");\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\nfunction chargePeptide(mf, options = {}) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = chargeOnePeptide(mf[i], options);\n        }\n        return mf;\n    }\n    else {\n        return chargeOnePeptide(mf, options);\n    }\n}\nfunction chargeOnePeptide(mf, options) {\n    const { pH = 0 } = options;\n    // we will allow to charge the peptide at a specific pH\n    // first amino acids (N-terminal)\n    if (mf.match(/^H[A-Z][a-z]{2}/)) {\n        let firstAA = mf.replace(/^H([A-Z][a-z]{2}).*/, '$1');\n        if ((0, getAA_1.getAA)(firstAA) && pH < (0, getAA_1.getAA)(firstAA).pKaN) {\n            mf = mf.replace(/^H([^+])/, 'H+H$1');\n        }\n    }\n    // last amino acids (C-terminal)\n    if (mf.match(/[A-Z][a-z]{2}OH$/)) {\n        let lastAA = mf.replace(/.*([A-Z][a-z]{2})OH$/, '$1');\n        if ((0, getAA_1.getAA)(lastAA) && pH > (0, getAA_1.getAA)(lastAA).pKaC) {\n            mf = mf.replace(/OH$/, 'O-');\n        }\n    }\n    // basic AA\n    if (pH < (0, getAA_1.getAA)('Arg').sc.pKa)\n        mf = mf.replaceAll(/(Arg)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('His').sc.pKa)\n        mf = mf.replaceAll(/(His)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('Lys').sc.pKa)\n        mf = mf.replaceAll(/(Lys)(?!\\()/g, '$1(H+)');\n    // acid AA\n    if (pH > (0, getAA_1.getAA)('Asp').sc.pKa)\n        mf = mf.replaceAll(/(Asp)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Glu').sc.pKa)\n        mf = mf.replaceAll(/(Glu)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Cys').sc.pKa)\n        mf = mf.replaceAll(/(Cys)(?!\\()/g, '$1(H-1-)');\n    return mf;\n}\n//# sourceMappingURL=chargePeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction sequenceToMF(mf) {\n    if (mf === '')\n        return '';\n    mf = (0, mf_utilities_1.ensureUppercaseSequence)(mf);\n    // this function will check if it is a sequence of aa in 1 letter or 3 letters and convert them if it is the case\n    // it could be a multiline mf !\n    // if it is a multiline we could make some \"tricks\" ...\n    let newMF = mf;\n    // SEQRES   1 B  256  MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // SEQRES   2 B  256  GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    // or\n    // MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    if (mf.search(/(?:[A-Z]{3} ){2}[A-Z]{3}/) > -1) {\n        // this is a PDB !\n        let tmpmf = mf.replaceAll(/[\\n\\r]+/g, ' ');\n        tmpmf = tmpmf.replaceAll(/(SEQRES|\\d+| [A-Z] | [\\dA-Z]{4-50})/g, '');\n        // we need to correct the uppercase / lowercase\n        let parts = tmpmf.split(' ');\n        newMF = 'H';\n        for (let i = 0; i < parts.length; i++) {\n            newMF += parts[i].slice(0, 1) + parts[i].slice(1).toLowerCase();\n        }\n        newMF += 'OH';\n    }\n    else if (mf.includes('(') && isOneLetterCode(mf)) {\n        // we expect one-letter code with modification\n        newMF = '';\n        let nTerminal = 'H';\n        let cTerminal = 'OH';\n        let parenthesisCounter = 0;\n        for (let i = 0; i < mf.length; i++) {\n            let currentSymbol = mf[i];\n            if (currentSymbol === '(' ||\n                currentSymbol === ')' ||\n                parenthesisCounter > 0) {\n                if (currentSymbol === '(') {\n                    parenthesisCounter++;\n                    if (i === 0)\n                        nTerminal = '';\n                }\n                if (currentSymbol === ')') {\n                    parenthesisCounter--;\n                    if (i === mf.length - 1)\n                        cTerminal = '';\n                }\n                newMF += currentSymbol;\n                continue;\n            }\n            newMF += convertAA1To3(currentSymbol);\n        }\n        newMF = nTerminal + newMF + cTerminal;\n    }\n    else if (mf.search(/[A-Za-z][\\da-z]/) === -1) {\n        // UNIPROT\n        //   370        380        390        400        410        420\n        //GFKPNLRKTF VSGLFRESCG AHFYRGVDVK PFYIKKPVDN LFALMLILNR LRGWGVVGGM\n        //\n        //    430        440        450        460        470        480\n        //SDPRLYKVWV RLSSQVPSMF FGGTDLAADY YVVSPPTAVS VYTKTPYGRL LADTRTSGFR\n        // We remove all the number, all the spaces, etc\n        newMF = `H${convertAA1To3(newMF.replaceAll(/[^A-Z]/g, ''))}OH`;\n    }\n    return newMF;\n}\nfunction convertAA1To3(mf) {\n    let newmf = '';\n    for (let i = 0; i < mf.length; i++) {\n        newmf += aa1To3(mf.charAt(i));\n    }\n    return newmf;\n}\nfunction aa1To3(code) {\n    for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n        if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n            return aminoAcids_1.aminoAcids[i].aa3;\n        }\n    }\n    throw new Error(`Invalid 1 letter code: ${code}`);\n}\n// mf can contain as well parenthesis. We need to check if it is not yet a correct molecular formula\nfunction isOneLetterCode(mf) {\n    let parenthesisLevel = 0;\n    for (let char of mf) {\n        if (parenthesisLevel === 0 && char.match(/[a-z]/))\n            return false;\n        if (char === '(')\n            parenthesisLevel++;\n        if (char === ')')\n            parenthesisLevel--;\n    }\n    return true;\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generatePeptideFragments = generatePeptideFragments;\n/**\n * Generate peptide fragments from a molecular formula.\n * @param {string} mf - The molecular formula to fragment.\n * @param {object} [options] - Fragmentation options.\n * @param {boolean} [options.a=false] - Generate a-type fragments.\n * @param {boolean} [options.b] - Generate b-type fragments. Defaults to `true` if no options are specified, otherwise `false`.\n * @param {boolean} [options.c=false] - Generate c-type fragments.\n * @param {boolean} [options.x=false] - Generate x-type fragments.\n * @param {boolean} [options.y] - Generate y-type fragments. Defaults to `true` if no options are specified, otherwise `false`.\n * @param {boolean} [options.z=false] - Generate z-type fragments.\n * @param {boolean} [options.i=false] - Generate internal fragments.\n * @param {boolean} [options.ya=false] - Generate ya-type double fragmentation.\n * @param {boolean} [options.yb=false] - Generate yb-type double fragmentation.\n * @param {boolean} [options.yc=false] - Generate yc-type double fragmentation.\n * @param {boolean} [options.zc=false] - Generate zc-type double fragmentation.\n * @param {number} [options.maxInternal=Infinity] - Maximum number of residues for internal fragments.\n * @param {number} [options.minInternal=0] - Minimum number of residues for internal fragments.\n * @returns {string[]} Array of fragment molecular formulas.\n */\nfunction generatePeptideFragments(mf, options) {\n    const isDefaultCall = options === undefined;\n    if (isDefaultCall) {\n        options = {};\n    }\n    const { a = false, b = isDefaultCall, c = false, x = false, y = isDefaultCall, z = false, i: internal = false, ya = false, yb = false, yc = false, zc = false, maxInternal = Number.MAX_VALUE, minInternal = 0, } = options;\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let nTerm = '';\n    let cTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        nTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        cTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let i = 1; i < mfparts.length; i++) {\n        nTerm += mfparts[i - 1];\n        cTerm = mfparts[mfparts.length - i] + cTerm;\n        addNTerm(mfs, nTerm, i, a, b, c);\n        addCTerm(mfs, cTerm, i, x, y, z);\n        if (internal)\n            mfs.push(`${mfparts[i]}HC-1O-1(+1)$i:${mfparts[i]}`);\n        if (ya || yb || yc || zc) {\n            // we have double fragmentations\n            for (let j = i + 1; j < Math.min(mfparts.length, maxInternal + i + 1); j++) {\n                let iTerm = '';\n                if (j - i >= minInternal) {\n                    for (let k = i; k < j; k++) {\n                        iTerm += mfparts[k];\n                    }\n                    addITerm(mfs, iTerm, mfparts.length - i, j, ya, yb, yc, zc);\n                }\n            }\n        }\n    }\n    // todo does this make sense ??? I think we should remote those 3 lines\n    if (mfs.length === 0) {\n        mfs = mfs.concat([mf]);\n    }\n    return mfs;\n}\nfunction addNTerm(mfs, nTerm, i, a, b, c) {\n    if (a)\n        mfs.push(`${nTerm}C-1O-1(+1)$a${i}`);\n    if (b)\n        mfs.push(`${nTerm}(+1)$b${i}`);\n    if (c)\n        mfs.push(`${nTerm}NH3(+1)$c${i}`);\n}\nfunction addITerm(mfs, iTerm, i, j, ya, yb, yc, zc) {\n    if (ya)\n        mfs.push(`H${iTerm}C-1O-1(+1)$a${j}y${i}`);\n    if (yb)\n        mfs.push(`H${iTerm}(+1)$b${j}y${i}`);\n    if (yc)\n        mfs.push(`H${iTerm}NH3(+1)$c${j}y${i}`);\n    if (zc)\n        mfs.push(`N-1${iTerm}NH3(+1)$c${j}z${i}`);\n}\nfunction addCTerm(mfs, cTerm, i, x, y, z) {\n    if (x)\n        mfs.push(`CO(+1)${cTerm}$x${i}`);\n    if (y)\n        mfs.push(`H2(+1)${cTerm}$y${i}`);\n    if (z)\n        mfs.push(`N-1H-1(+1)${cTerm}$z${i}`);\n}\n//# sourceMappingURL=generatePeptideFragments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.digestPeptide = digestPeptide;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Digest a peptide sequence using a specified enzyme.\n * @param {string} sequence - The peptide sequence to digest.\n * @param {object} [options={}] - Digestion options.\n * @param {string} options.enzyme - The enzyme to use for digestion. Required. Supported values: 'chymotrypsin', 'trypsin', 'lysc', 'glucph4', 'glucph8', 'thermolysin', 'cyanogenbromide', 'any'.\n * @param {number} [options.minMissed=0] - Minimum number of missed cleavages.\n * @param {number} [options.maxMissed=0] - Maximum number of missed cleavages.\n * @param {number} [options.minResidue=0] - Minimum number of residues in a fragment.\n * @param {number} [options.maxResidue=Infinity] - Maximum number of residues in a fragment.\n * @param {number} [options.minDigestions=0] - Minimum number of cleavage sites to use. Generates all combinations with at least this many cleavages. Defaults to `0`.\n * @param {number} [options.maxDigestions=Infinity] - Maximum number of cleavage sites to use. Generates all combinations with at most this many cleavages. Defaults to `Infinity`.\n * @returns {string[]} Array of digested peptide fragments.\n */\nfunction digestPeptide(sequence, options = {}) {\n    const { enzyme, minMissed = 0, maxMissed = 0, minResidue = 0, maxResidue = Number.MAX_VALUE, minDigestions = 0, maxDigestions = Number.MAX_VALUE, } = options;\n    if (!enzyme) {\n        return [];\n    }\n    sequence = sequence.replace(/^H([^a-z])/, '$1').replace(/OH$/, '');\n    let regexp = getRegexp(enzyme);\n    let allFragments = sequence.replace(regexp, '$1 ').split(/ /).filter(Boolean);\n    const numCleavages = allFragments.length - 1;\n    // Return empty if minDigestions is impossible to achieve\n    if (minDigestions > numCleavages) {\n        return [];\n    }\n    const effectiveMaxDigestions = Math.min(maxDigestions, numCleavages);\n    const effectiveMinDigestions = minDigestions;\n    if (effectiveMinDigestions > effectiveMaxDigestions) {\n        return [];\n    }\n    // Determine if we need combinatorial approach\n    // Use combinatorial logic when maxDigestions explicitly limits cleavages OR minDigestions > 0\n    const useCombinatorial = maxDigestions < numCleavages || minDigestions > 0;\n    // When using combinatorial due to maxDigestions limit, ensure at least 1 cleavage\n    const startDigestions = useCombinatorial\n        ? Math.max(1, effectiveMinDigestions)\n        : effectiveMinDigestions;\n    if (!useCombinatorial) {\n        // Default behavior: use all available cleavage sites\n        const results = [];\n        const fragments = [];\n        let fragmentStart = 0;\n        for (let i = 0; i < allFragments.length; i++) {\n            let nbResidue = allFragments[i]\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            fragments.push({\n                sequence: allFragments[i],\n                nbResidue,\n                from: fragmentStart,\n                to: fragmentStart + nbResidue - 1,\n            });\n            fragmentStart += nbResidue;\n        }\n        for (let i = 0; i < fragments.length - minMissed; i++) {\n            for (let j = minMissed; j <= Math.min(maxMissed, fragments.length - i - 1); j++) {\n                let fragment = '';\n                let nbResidue = 0;\n                for (let k = i; k <= i + j; k++) {\n                    fragment += fragments[k].sequence;\n                    nbResidue += fragments[k].nbResidue;\n                }\n                let from = fragments[i].from + 1;\n                let to = fragments[i + j].to + 1;\n                if (fragment && nbResidue >= minResidue && nbResidue <= maxResidue) {\n                    results.push(`H${fragment}OH$D${from}>${to}`);\n                }\n            }\n        }\n        return results;\n    }\n    // Combinatorial approach: generate all combinations of cleavage sites\n    const allResults = new Set();\n    for (let numDigestions = startDigestions; numDigestions <= effectiveMaxDigestions; numDigestions++) {\n        const combinations = (0, ml_spectra_processing_1.getCombinationsIterator)(numCleavages, numDigestions);\n        for (const cleavageSites of combinations) {\n            // Create fragments based on selected cleavage sites\n            const fragments = createFragmentsFromCleavages(allFragments, cleavageSites);\n            // Generate results with missed cleavages\n            for (let i = 0; i < fragments.length - minMissed; i++) {\n                for (let j = minMissed; j <= Math.min(maxMissed, fragments.length - i - 1); j++) {\n                    let fragment = '';\n                    let nbResidue = 0;\n                    for (let k = i; k <= i + j; k++) {\n                        fragment += fragments[k].sequence;\n                        nbResidue += fragments[k].nbResidue;\n                    }\n                    let from = fragments[i].from + 1;\n                    let to = fragments[i + j].to + 1;\n                    if (fragment && nbResidue >= minResidue && nbResidue <= maxResidue) {\n                        allResults.add(`H${fragment}OH$D${from}>${to}`);\n                    }\n                }\n            }\n        }\n    }\n    return [...allResults];\n}\n/**\n * Create fragments from selected cleavage sites.\n * @param {string[]} allFragments - All possible fragments if all sites were cleaved.\n * @param {number[]} cleavageSites - Indices of cleavage sites to use.\n * @returns {Array<{sequence: string, nbResidue: number, from: number, to: number}>} Fragment objects.\n */\nfunction createFragmentsFromCleavages(allFragments, cleavageSites) {\n    const fragments = [];\n    const cleavageSet = new Set(cleavageSites);\n    let currentFragment = '';\n    let fragmentStartIndex = 0;\n    for (let i = 0; i < allFragments.length; i++) {\n        currentFragment += allFragments[i];\n        // If this is a cleavage site or the last fragment, close the current fragment\n        if (cleavageSet.has(i) || i === allFragments.length - 1) {\n            const nbResidue = currentFragment\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            const from = fragmentStartIndex;\n            const to = from + nbResidue - 1;\n            fragments.push({\n                sequence: currentFragment,\n                nbResidue,\n                from,\n                to,\n            });\n            fragmentStartIndex = to + 1;\n            currentFragment = '';\n        }\n    }\n    return fragments;\n}\nfunction getRegexp(enzyme) {\n    switch (enzyme.toLowerCase().replaceAll(/[^\\da-z]/g, '')) {\n        case 'chymotrypsin':\n            return /(Phe|Tyr|Trp)(?!Pro)/g;\n        case 'trypsin':\n            return /(Lys|Arg)(?!Pro)/g;\n        case 'lysc':\n            return /(Lys)(?!Pro)/g;\n        case 'glucph4':\n            return /(Glu)(?!Pro|Glu)/g;\n        case 'glucph8':\n            return /(Asp|Glu)(?!Pro|Glu)/g;\n        case 'thermolysin': // N-term of  Leu, Phe, Val, Ile, Ala, Met\n            return /()(?=Ile|Leu|Val|Ala|Met|Phe)/g;\n        case 'cyanogenbromide':\n            return /(Met)/g;\n        case 'any':\n            return /()(?=[A-Z][a-z]{2})/g;\n        default:\n            throw new Error(`Digestion enzyme: ${enzyme} is unknown`);\n    }\n}\n//# sourceMappingURL=digestPeptide.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfo = getInfo;\nexports.calculateIEP = calculateIEP;\nexports.calculateIEPChart = calculateIEPChart;\nexports.getColorForIEP = getColorForIEP;\nexports.calculateCharge = calculateCharge;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nconst IEP = __importStar(require(\"./isoElectricPoint\"));\nconst splitPeptide_js_1 = require(\"./splitPeptide.js\");\n__exportStar(require(\"./allowNeutralLoss.js\"), exports);\n__exportStar(require(\"./chargePeptide.js\"), exports);\n__exportStar(require(\"./sequenceToMF.js\"), exports);\n__exportStar(require(\"./generatePeptideFragments.js\"), exports);\n__exportStar(require(\"./digestPeptide.js\"), exports);\n__exportStar(require(\"./splitPeptide.js\"), exports);\nfunction getInfo() {\n    return aminoAcids_1.aminoAcids;\n}\n// sequence should be in the \"right\" format like HAlaGlyProOH\nfunction calculateIEP(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateIEP(aas);\n    return result;\n}\nfunction calculateIEPChart(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateChart(aas);\n    return result;\n}\nfunction getColorForIEP(iep) {\n    return IEP.getColor(iep);\n}\nfunction calculateCharge(sequence, ph) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    return IEP.calculateCharge(aas, ph);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentPeptide = fragmentPeptide;\nconst peptide_1 = require(\"peptide\");\nfunction fragmentPeptide(sequence, options = {}) {\n    const { digestion = {}, protonation, fragmentation, protonationPH } = options;\n    sequence = (0, peptide_1.sequenceToMF)(sequence);\n    let fragmentsArray = [sequence];\n    // do we also have some digest fragments ?\n    if (digestion.enzyme) {\n        let digests = (0, peptide_1.digestPeptide)(sequence, digestion);\n        if (protonation) {\n            digests = (0, peptide_1.chargePeptide)(digests, {\n                pH: protonationPH,\n            });\n        }\n        fragmentsArray = fragmentsArray.concat(digests);\n    }\n    // allow neutral loss\n    if (options.allowNeutralLoss) {\n        sequence = (0, peptide_1.allowNeutralLoss)(sequence);\n    }\n    // apply protonation\n    if (protonation) {\n        sequence = (0, peptide_1.chargePeptide)(sequence, { pH: protonationPH });\n    }\n    // calculate fragmentation\n    let fragments = (0, peptide_1.generatePeptideFragments)(sequence, fragmentation);\n    fragmentsArray = fragmentsArray.concat(fragments);\n    return fragmentsArray;\n}\n//# sourceMappingURL=fragmentPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromPeptidicSequence = fromPeptidicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst fragmentPeptide_1 = require(\"./util/fragmentPeptide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string}         [sequences] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase. It can be comma separated if you have many peptide sequences\n * @param {object}         [options={}]\n * @param {boolean}        [options.estimate=false] - estimate the number of MF without filters\n * @param {string}         [options.ionizations='']\n * @param {function}       [options.onStep] - Callback to do after each step\n * @param {array}          [options.mfsArray=[]]\n * @param {boolean}        [options.protonation=false]\n * @param {number}         [options.protonationPH=7]\n * @param {boolean}        [options.allowNeutralLoss=false]\n * @param {number}         [options.limit=100000]\n *\n * @param {object}         [options.digestion={}] Object defining options for digestion\n * @param {number}         [options.digestion.minMissed=0] Minimal number of allowed missed cleavage\n * @param {number}         [options.digestion.maxMissed=0] Maximal number of allowed missed cleavage\n * @param {number}         [options.digestion.minResidue=0] Minimal number of residues\n * @param {number}         [options.digestion.maxResidue=+Infinity] Maximal number of residues\n * @param {string}         [options.digestion.enzyme] Mandatory field containing the name of the enzyme among: chymotrypsin, trypsin, glucph4, glucph8, thermolysin, cyanogenbromide\n *\n * @param {object}         [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean}        [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean}        [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean}        [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean}        [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean}        [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean}        [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean}        [options.fragmentation.ya=false] If true allow fragments of type 'ya'\n * @param {boolean}        [options.fragmentation.yb=false] If true allow fragments of type 'yb'\n * @param {boolean}        [options.fragmentation.yc=false] If true allow fragments of type 'yc'\n * @param {boolean}        [options.fragmentation.zc=false] If true allow fragments of type 'zc'\n * @param {number}         [options.fragmentation.minInternal=0] Minimal internal fragment length\n * @param {number}         [options.fragmentation.maxInternal=+Infinity] Maximal internal fragment length\n *\n * @param {object}         [options.filter={}] Object defining options for molecular formula filter\n * @param {number}         [options.filter.precision=1000] - The precision on the experimental mass\n * @param {number}         [options.filter.targetMass] - Target mass, allows to calculate error and filter results\n * @param {number[]}       [options.filter.targetMasses] - Target masses: SORTED array of numbers\n * @param {number[]}       [options.filter.targetIntensities] - Target intensities: SORTED array of numbers\n * @param {number}         [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number}         [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number}         [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number}         [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number}         [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}         [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}        [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}         [options.filter.unsaturation={}]\n * @param {number}         [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}         [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function}       [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromPeptidicSequence(sequences, options = {}) {\n    const { digestion = {}, mfsArray: originalMFsArray = [], allowNeutralLoss = false, protonation = false, protonationPH = 7, fragmentation = {}, filter = {}, ionizations = '', limit = 100000, estimate = false, onStep, links = {}, } = options;\n    const hasLinked = sequences.includes('#');\n    const mfsArrayLinked = structuredClone(originalMFsArray);\n    const mfsArrayUnlinked = structuredClone(originalMFsArray);\n    const unlinked = [];\n    mfsArrayUnlinked.push(unlinked);\n    for (const sequence of sequences.split(/[,:]/)) {\n        let fragmentsArray = (0, fragmentPeptide_1.fragmentPeptide)(sequence, {\n            digestion,\n            protonation,\n            fragmentation,\n            protonationPH,\n            allowNeutralLoss,\n        });\n        mfsArrayLinked.push(fragmentsArray.filter((fragment) => fragment.includes('#')));\n        unlinked.push(...fragmentsArray.filter((fragment) => !fragment.includes('#')));\n    }\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArrayUnlinked, {\n        ionizations,\n        filter,\n        estimate,\n        limit,\n        onStep,\n        links,\n    });\n    if (hasLinked) {\n        combined.push(...(await (0, mf_generator_1.generateMFs)(mfsArrayLinked, {\n            ionizations,\n            filter,\n            estimate,\n            limit,\n            onStep,\n            links,\n        })));\n    }\n    if (!estimate) {\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromPeptidicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromRange = fromRange;\nconst mf_generator_1 = require(\"mf-generator\");\n/**\n * Generates a database 'generated' from an array of molecular formula\n * @param {string} rangesString - a string representing the range to search\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string} [options.databaseName='generated']\n * @param {number} [options.limit=100000] - Maximum number of results\n * @param {boolean} [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean} [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string} [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {object} [options.filter={}]\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function} [options.filter.callback] - a function to filter the MF\n * @param {object} [options.filter.atoms] - object of atom:{min, max}\n *\n * @returns {Promise} - list of possible molecular formula\n *\n * @example\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * // semi-columns separated for combination, comma for 'or'\n * emdb.fromRange('C1-10, H1-10; Cl0-1 Br0-1'); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 80\n */\nasync function fromRange(rangesString, options = {}) {\n    let ranges = rangesString.split(/ *[\\n\\r;] */);\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        if (range.includes(',')) {\n            ranges[i] = range.split(/ *, */);\n        }\n    }\n    return (0, mf_generator_1.generateMFs)(ranges, options);\n}\n//# sourceMappingURL=fromRange.js.map","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchArrayBuffer = fetchArrayBuffer;\nasync function fetchArrayBuffer(url) {\n    const result = await fetch(url);\n    return result.arrayBuffer();\n}\n//# sourceMappingURL=fetchArrayBuffer.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadCommercials = loadCommercials;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadCommercials(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/commercials.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['commercials.json'].async('string');\n    let data = JSON.parse(fileData);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadCommercials.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchText = fetchText;\nasync function fetchText(url) {\n    const result = await fetch(url);\n    if (result.status !== 200) {\n        throw new Error(String(result.status));\n    }\n    return result.text();\n}\n//# sourceMappingURL=fetchText.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromGoogleSheet = mfFromGoogleSheet;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst papaparse_1 = __importDefault(require(\"papaparse\"));\nconst fetchText_js_1 = require(\"./util/fetchText.js\");\nasync function mfFromGoogleSheet(url, options = {}) {\n    let { urlReferences } = options;\n    if (urlReferences) {\n        let results = await Promise.all([(0, fetchText_js_1.fetchText)(url), (0, fetchText_js_1.fetchText)(urlReferences)]);\n        return parse(results[0], results[1]);\n    }\n    else {\n        let result = await (0, fetchText_js_1.fetchText)(url);\n        return parse(result);\n    }\n}\nasync function parse(tsv, tsvReferences) {\n    let parsed = papaparse_1.default.parse(tsv, {\n        delimiter: '\\t',\n        header: true,\n    });\n    let fields = parsed.meta.fields;\n    let infoFields = fields.filter((a) => !['mf', 'modif', 'ESI', 'MALDI', 'positive', 'negative'].includes(a));\n    let formulas = parsed.data;\n    let references = {};\n    if (tsvReferences) {\n        let referencesArray = papaparse_1.default.parse(tsvReferences, {\n            delimiter: '\\t',\n            header: true,\n        }).data;\n        for (const r of referencesArray) {\n            references[r.label] = r;\n        }\n    }\n    let results = [];\n    for (let formula of formulas) {\n        if (tsvReferences) {\n            // we add references\n            let refs = formula.references.split(/[ ,]+/);\n            formula.references = [];\n            for (let ref of refs) {\n                formula.references.push(references[ref]);\n            }\n        }\n        // we need to calculate all the possibilities\n        try {\n            let mfs = await (0, mf_generator_1.generateMFs)([formula.mf], {\n                ionizations: formula.modif,\n            });\n            for (let mf of mfs) {\n                mf.info = {};\n                for (let infoField of infoFields) {\n                    mf.info[infoField] = formula[infoField];\n                }\n                if (!formula.ESI &&\n                    !formula.MALDI &&\n                    !formula.positive &&\n                    !formula.negative) {\n                    mf.filter = {\n                        ESI: true,\n                        MALDI: true,\n                        positive: true,\n                        negative: true,\n                    };\n                }\n                else {\n                    mf.filter = {\n                        ESI: formula.ESI === 'X',\n                        MALDI: formula.MALDI === 'X',\n                        positive: formula.positive === 'X',\n                        negative: formula.negative === 'X',\n                    };\n                }\n                mf.mf = new mf_parser_1.MF(mf.mf).toMF();\n                results.push(mf);\n            }\n        }\n        catch (error) {\n            // eslint-disable-next-line no-console\n            console.warn('Non parsable molecular formula:', formula.mf, formula.modif, error.toString());\n        }\n    }\n    results = results.filter((a) => {\n        return a.ms.em !== 0;\n    });\n    results.sort((a, b) => {\n        return a.ms.em - b.ms.em;\n    });\n    let uniqueResults = [results[0]];\n    for (let i = 1; i < results.length; i++) {\n        if (results[i - 1].ms.em !== results[i].ms.em) {\n            uniqueResults.push(results[i]);\n        }\n    }\n    return uniqueResults;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadGoogleSheet = loadGoogleSheet;\nconst mf_from_google_sheet_1 = require(\"mf-from-google-sheet\");\nasync function loadGoogleSheet(options = {}) {\n    let { refUUID = '1C_H9aiJyu9M9in7sHMOaz-d3Sv758rE72oLxEKH9ioA', uuid = '1LrJCl9-xSZKhGA9Y8nKVkYwB-mEOHBkTXg5qYXeFpZY', } = options;\n    if (options.uuid && !options.refUUID)\n        refUUID = '';\n    let url = `https://googledocs.cheminfo.org/spreadsheets/d/${uuid}/export?format=tsv`;\n    let refURL = refUUID\n        ? `https://googledocs.cheminfo.org/spreadsheets/d/${refUUID}/export?format=tsv`\n        : '';\n    let data = await (0, mf_from_google_sheet_1.mfFromGoogleSheet)(url, refURL);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadGoogleSheet.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadKnapSack = loadKnapSack;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadKnapSack(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/ms.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['ms.json'].async('string');\n    let data = JSON.parse(fileData);\n    for (const d of data) {\n        // the database moved away from kanaya.naist.jp, whose host does not answer\n        // anymore, to its own domain. Same ids, same `word` parameter.\n        d.url = `https://www.knapsackfamily.com/knapsack_core/information.php?word=${d.id}`;\n    }\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadKnapSack.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.search = search;\nconst mf_matcher_1 = require(\"mf-matcher\");\n/**\n    Searching by various criteria. This mass will not take into account the mass\n    of the mass of the electron\n* @param {object}   [filter={}]\n* @param {number}   [filter.minMW=0] - Minimal molecular weight\n* @param {number}   [filter.maxMW=+Infinity] - Maximal molecular weight\n* @param {number}   [filter.minEM=0] - Minimal monoisotopic mass\n* @param {number}   [filter.maxEM=+Infinity] - Maximal monoisotopic mass\n* @param {number}   [filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}   [filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [filter.unsaturation={}]\n* @param {number}   [filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}   [filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}   [filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [filter.atoms] - object of atom:{min, max}\n\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n*/\nfunction search(emdb, filter, options = {}) {\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let results = {};\n    for (let database of databases) {\n        results[database] = emdb.databases[database].filter((entry) => (0, mf_matcher_1.generalMatcher)(entry, filter));\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        return flattenResults;\n    }\n    else {\n        return results;\n    }\n}\n//# sourceMappingURL=search.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMSEM = searchMSEM;\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\nSearch for an experimental monoisotopic mass\n* @param {number}   msem - The observed monoisotopic mass\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n* @param {string}   [options.ionizations] - list the allowed ionizations possibilities\n* @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n*/\nfunction searchMSEM(emdb, msem, options = {}) {\n    let filter = { ...options.filter, targetMass: msem };\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    let results = {};\n    for (let database of databases) {\n        results[database] = [];\n    }\n    for (let ionization of ionizations) {\n        filter.ionization = ionization;\n        for (let database of databases) {\n            for (let entry of emdb.databases[database]) {\n                let match = (0, mf_matcher_1.msemMatcher)(entry, filter);\n                if (match) {\n                    results[database].push({\n                        ...entry,\n                        ms: match.ms,\n                        ionization: match.ionization,\n                    });\n                }\n            }\n        }\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        flattenResults.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        return flattenResults;\n    }\n    else {\n        for (const k of Object.keys(results)) {\n            results[k].sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        }\n        return results;\n    }\n}\n//# sourceMappingURL=searchMSEM.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nexport class BaseSpectrumGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    peakWidthFct;\n    shape;\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = options;\n        assertNumber(from, 'from');\n        assertNumber(to, 'to');\n        assertInteger(nbPoints, 'nbPoints');\n        if (to <= from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (peakWidthFct && typeof peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (to - from) / (nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.shape = getShape1D(shape);\n    }\n    /**\n     * Resolves a peak to its canonical parameters, cloning and configuring\n     * separate shape instances for the left and right halves.\n     */\n    resolvePeak(peak, options) {\n        let x0;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [x0, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            x0 = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape1D(shapeOptions)\n            : cloneShape(this.shape);\n        const { width } = options;\n        let { widthLeft, widthRight } = options;\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(x0)\n                    : width !== undefined\n                        ? width\n                        : shape.fwhm;\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        const factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        const shapeLeft = cloneShape(shape);\n        shapeLeft.fwhm = widthLeft;\n        const shapeRight = cloneShape(shape);\n        shapeRight.fwhm = widthRight;\n        return {\n            x0,\n            intensity,\n            shapeLeft,\n            shapeRight,\n            widthLeft,\n            widthRight,\n            factor,\n        };\n    }\n}\nfunction cloneShape(shape) {\n    return Object.assign(Object.create(Object.getPrototypeOf(shape)), shape);\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=BaseSpectrumGenerator.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nimport addBaseline from \"./util/addBaseline.js\";\nimport addNoise from \"./util/addNoise.js\";\nexport { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SpectrumGenerator extends BaseSpectrumGenerator {\n    maxPeakHeight;\n    data;\n    constructor(options = {}) {\n        super(options);\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        this.reset();\n    }\n    /**\n     * Generates a spectrum from a list of peaks and returns it.\n     * @param peaks - List of peaks to add.\n     * @param options - Options for spectrum generation.\n     * @returns The generated spectrum data.\n     */\n    generateSpectrum(peaks, options = {}) {\n        const { noise, baseline, threshold, peakOptions } = options;\n        this.addPeaks(peaks, peakOptions);\n        if (baseline)\n            this.addBaseline(baseline);\n        if (noise)\n            this.addNoise(noise);\n        return this.getSpectrum({ threshold });\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * A peak may be either defined as [x,y,fwhm,...] or as {x, y, shape}\n     * @param peak - The peak to add, defined as array or object.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        const { x0, intensity, shapeLeft, shapeRight, widthLeft, widthRight, factor, } = this.resolvePeak(peak, options);\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const firstValue = x0 - (widthLeft / 2) * factor;\n        const lastValue = x0 + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((x0 - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRIC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] += intensity * shapeLeft.fct(this.data.x[index] - x0);\n        }\n        // we calculate the right part of the gaussian\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] += intensity * shapeRight.fct(this.data.x[index] - x0);\n        }\n        return this;\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     * @returns The generator instance.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param options - Configuration for noise generation.\n     * @returns The generator instance.\n     */\n    addNoise(options) {\n        addNoise(this.data, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     * @param options - Options for getting the spectrum.\n     * @returns The generated spectrum data.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            const minPeakHeight = this.maxPeakHeight * threshold;\n            const x = [];\n            const y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x: Float64Array.from(x), y: Float64Array.from(y) };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     * @returns The generator instance.\n     */\n    reset() {\n        if (this.nbPoints === 1) {\n            this.data.x[0] = (this.from + this.to) / 2;\n        }\n        else {\n            for (let i = 0; i < this.nbPoints; i++) {\n                this.data.x[i] = this.from + i * this.interval;\n            }\n        }\n        return this;\n    }\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","/**\n * Adds a baseline to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param baselineFct - Function that generates the baseline value for a given x.\n * @returns The modified spectrum data.\n */\nexport default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    const xs = data.x;\n    const ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.js.map","import { xMaxValue, xAdd, createRandomArray } from 'ml-spectra-processing';\n/**\n * Adds noise to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param options - Configuration for noise generation.\n * @returns The modified spectrum data.\n */\nexport default function addNoise(data, options = {}) {\n    const { seed = 0, distribution = 'normal', percent = 1 } = options;\n    const range = (xMaxValue(data.y) * percent) / 100;\n    const noise = createRandomArray({\n        distribution,\n        seed,\n        mean: 0,\n        standardDeviation: range,\n        range,\n        length: data.x.length,\n    });\n    data.y = xAdd(data.y, noise);\n    return data;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { matrixCreateEmpty, matrixMinMaxZ } from 'ml-spectra-processing';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\n/**\n * Converts a width value to full width at half maximum (FWHM).\n * @param shape - The 2D shape to use for conversion.\n * @param width - The width value to convert.\n * @returns The converted FWHM value as an XYNumber object.\n */\nconst convertWidthToFWHM = (shape, width) => {\n    const widthData = ensureXYNumber(width);\n    for (const key of axis2D) {\n        widthData[key] = shape.widthToFWHM(widthData[key]);\n    }\n    return widthData;\n};\nexport class Spectrum2DGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    data;\n    maxPeakHeight;\n    shape;\n    peakWidthFct;\n    constructor(options = {}) {\n        const { peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        let { from = 0, to = 100, nbPoints = 1001 } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        const shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: matrixCreateEmpty({\n                nbRows: this.nbPoints.y,\n                nbColumns: this.nbPoints.x,\n            }),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Adds multiple peaks to the 2D spectrum.\n     * @param peaks - Array of peaks or peak series to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            if (!Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                !Array.isArray(peaks.z)) {\n                throw new TypeError('x, y, z must all be arrays');\n            }\n            const nbPeaks = peaks.x.length;\n            if (peaks.y.length !== nbPeaks || peaks.z.length !== nbPeaks) {\n                throw new Error('x, y, z should have the same length');\n            }\n            for (let i = 0; i < nbPeaks; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Adds a single peak to the 2D spectrum.\n     * @param peak - Peak to add, can be array or object format.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const { width } = options;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape2D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), structuredClone(this.shape));\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                const value = intensity *\n                    shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n                if (Math.abs(value) > 1e-6) {\n                    this.data.z[yIndex][xIndex] += value;\n                }\n            }\n        }\n        return this;\n    }\n    /**\n     * Gets the generated 2D spectrum data.\n     * @param options - Options for getting the spectrum.\n     * @returns The spectrum data object.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        const minMaxZ = matrixMinMaxZ(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    /**\n     * Resets the generator to initial state.\n     * @returns The generator instance.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (const row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\n/**\n * Generates a 2D spectrum with the given peaks.\n * @param peaks - Peaks to include in the spectrum.\n * @param options - Options for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\n/**\n * Ensures the input is an XYNumber object.\n * @param input - Number or XYNumber to process.\n * @returns An XYNumber object.\n */\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\n/**\n * Calculates the intervals between points for both x and y axes.\n * @param from - Starting point coordinates.\n * @param to - Ending point coordinates.\n * @param nbPoints - Number of points in each dimension.\n * @returns The calculated intervals as an XYNumber object.\n */\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\n/**\n * Validates if a value is an integer.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not an integer.\n */\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\n/**\n * Validates if a value is a finite number.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not a finite number.\n */\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SparseSpectrumGenerator extends BaseSpectrumGenerator {\n    constructor(options = {}) {\n        super(options);\n    }\n    /**\n     * Generates a sparse spectrum containing only x values where at least one\n     * peak contributes above the threshold. No dense array is allocated:\n     * intervals are computed per peak first, then y is evaluated only for the\n     * merged set of required x values.\n     * @param peaks - List of peaks to include.\n     * @param options - Options for sparse spectrum generation.\n     * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n     */\n    generateSparseSpectrum(peaks, options = {}) {\n        if ('noise' in options) {\n            throw new Error('noise is not supported for sparse spectrum generation');\n        }\n        const { baseline, peakOptions = {}, threshold = 1e-7 } = options;\n        const peakArray = Array.isArray(peaks)\n            ? peaks\n            : Array.from(peaks.x, (x, i) => peaks.fwhm !== undefined\n                ? [x, peaks.y[i], peaks.fwhm[i]]\n                : [x, peaks.y[i]]);\n        const resolvedPeaks = peakArray\n            .map((peak) => {\n            const { x0, intensity, shapeLeft, shapeRight } = this.resolvePeak(peak, peakOptions);\n            return {\n                x0,\n                intensity,\n                shapeLeft,\n                shapeRight,\n                xFrom: x0 - computeHalfWidth(shapeLeft, threshold),\n                xTo: x0 + computeHalfWidth(shapeRight, threshold),\n            };\n        })\n            .filter((p) => p.xFrom < this.to && p.xTo > this.from);\n        if (resolvedPeaks.length === 0) {\n            return {\n                x: Float64Array.from([this.from, this.to]),\n                y: baseline\n                    ? Float64Array.from([baseline(this.from), baseline(this.to)])\n                    : new Float64Array(2),\n            };\n        }\n        for (const peak of resolvedPeaks) {\n            peak.xFrom = Math.max(this.from, peak.xFrom);\n            peak.xTo = Math.min(this.to, peak.xTo);\n        }\n        resolvedPeaks.sort((a, b) => a.xFrom - b.xFrom);\n        const mergedIntervals = [];\n        for (const peak of resolvedPeaks) {\n            const last = mergedIntervals.at(-1);\n            if (last !== undefined && peak.xFrom <= last.xTo) {\n                last.xTo = Math.max(last.xTo, peak.xTo);\n                last.peaks.push(peak);\n            }\n            else {\n                mergedIntervals.push({\n                    xFrom: peak.xFrom,\n                    xTo: peak.xTo,\n                    peaks: [peak],\n                });\n            }\n        }\n        const xResult = [this.from];\n        const yResult = [0];\n        // tracks the last grid index written to avoid duplicate guard points when\n        // two intervals are only one step apart\n        let lastWrittenIndex = 0;\n        for (const interval of mergedIntervals) {\n            const firstIndex = Math.max(0, Math.floor((interval.xFrom - this.from) / this.interval));\n            const lastIndex = Math.min(this.nbPoints - 1, Math.ceil((interval.xTo - this.from) / this.interval));\n            const guardBefore = firstIndex - 1;\n            if (guardBefore >= 0 && guardBefore > lastWrittenIndex) {\n                xResult.push(this.from + guardBefore * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardBefore;\n            }\n            for (let i = firstIndex; i <= lastIndex; i++) {\n                const x = this.from + i * this.interval;\n                let y = 0;\n                for (const peak of interval.peaks) {\n                    const shape = x < peak.x0 ? peak.shapeLeft : peak.shapeRight;\n                    y += peak.intensity * shape.fct(x - peak.x0);\n                }\n                xResult.push(x);\n                yResult.push(y);\n                lastWrittenIndex = i;\n            }\n            const guardAfter = lastIndex + 1;\n            if (guardAfter < this.nbPoints) {\n                xResult.push(this.from + guardAfter * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardAfter;\n            }\n        }\n        if (xResult[0] !== this.from) {\n            xResult.unshift(this.from);\n            yResult.unshift(0);\n        }\n        if (xResult[xResult.length - 1] !== this.to) {\n            xResult.push(this.to);\n            yResult.push(0);\n        }\n        if (baseline) {\n            for (let i = 0; i < yResult.length; i++) {\n                yResult[i] += baseline(xResult[i]);\n            }\n        }\n        return {\n            x: Float64Array.from(xResult),\n            y: Float64Array.from(yResult),\n        };\n    }\n}\n/**\n * Finds the half-width d at which shape.fct(d) equals the given threshold via\n * binary search. Works for any monotonically decreasing shape function.\n */\nfunction computeHalfWidth(shape, threshold) {\n    if (threshold <= 0)\n        return Infinity;\n    if (shape.fct(0) <= threshold)\n        return 0;\n    let high = shape.fwhm;\n    while (shape.fct(high) > threshold) {\n        high *= 2;\n    }\n    let low = 0;\n    for (let i = 0; i < 64; i++) {\n        const mid = (low + high) / 2;\n        if (shape.fct(mid) > threshold) {\n            low = mid;\n        }\n        else {\n            high = mid;\n        }\n    }\n    return (low + high) / 2;\n}\n//# sourceMappingURL=SparseSpectrumGenerator.js.map","import { SparseSpectrumGenerator } from \"./SparseSpectrumGenerator.js\";\n/**\n * Generates a sparse spectrum containing only x values where at least one peak\n * contributes above the threshold. Unlike `generateSpectrum`, no dense array\n * is allocated: intervals are computed per peak first, then y is evaluated only\n * for the merged set of required x values.\n * @param peaks - List of peaks to include.\n * @param options - Configuration for sparse spectrum generation.\n * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n */\nexport function generateSparseSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SparseSpectrumGenerator(generator).generateSparseSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSparseSpectrum.js.map","import { SpectrumGenerator } from \"./SpectrumGenerator.js\";\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options - Configuration for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SpectrumGenerator(generator).generateSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSpectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.closestPointX = closestPointX;\nfunction closestPointX(array, target) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    while (high - low > 1) {\n        middle = low + ((high - low) >> 1);\n        if (array[middle].x < target) {\n            low = middle;\n        }\n        else if (array[middle].x > target) {\n            high = middle;\n        }\n        else {\n            return array[middle];\n        }\n    }\n    if (low < array.length - 1) {\n        if (Math.abs(target - array[low].x) < Math.abs(array[low + 1].x - target)) {\n            return array[low];\n        }\n        else {\n            return array[low + 1];\n        }\n    }\n    else {\n        return array[low];\n    }\n}\n//# sourceMappingURL=closestPointX.js.map","\"use strict\";\n/**\n * Join x values if there are similar\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinX = joinX;\nfunction joinX(self, threshold = Number.EPSILON) {\n    // when we join we will use the center of mass\n    if (self.array.length === 0)\n        return [];\n    self.sortX();\n    let current = self.array[0];\n    let result = [current];\n    for (let i = 1; i < self.array.length; i++) {\n        const item = self.array[i];\n        if (item.x - current.x <= threshold) {\n            // weighted sum\n            current.x =\n                (item.y / (current.y + item.y)) * (item.x - current.x) + current.x;\n            current.y += item.y;\n        }\n        else {\n            current = { ...item };\n            result.push(current);\n        }\n    }\n    self.array = result;\n    self.ySorted = false;\n    return self;\n}\n//# sourceMappingURL=joinX.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.multiply = multiply;\nfunction multiply(a, b, options = {}) {\n    const { minY = 1e-8, maxLines = 5000, deltaX = 1e-2 } = options;\n    const result = new a.constructor();\n    a.sortY();\n    b.sortY();\n    for (let entryA of a.array) {\n        for (let entryB of b.array) {\n            let y = entryA.y * entryB.y;\n            if (y > minY) {\n                const composition = calculateComposition(entryA, entryB);\n                if (composition) {\n                    result.push({ x: entryA.x + entryB.x, y, composition });\n                }\n                else {\n                    result.push({ x: entryA.x + entryB.x, y });\n                }\n            }\n            if (result.length > maxLines * 2) {\n                result.joinX(deltaX);\n                result.topY(maxLines);\n            }\n        }\n    }\n    result.joinX(deltaX);\n    result.topY(maxLines);\n    a.move(result);\n    return a;\n}\nfunction calculateComposition(entryA, entryB) {\n    if (!entryA.composition || !entryB.composition)\n        return;\n    let toReturn = {};\n    const keys = [\n        ...new Set(Object.keys(entryA.composition).concat(Object.keys(entryB.composition))),\n    ];\n    for (let key of keys) {\n        toReturn[key] =\n            (entryA.composition[key] || 0) + (entryB.composition[key] || 0);\n    }\n    return toReturn;\n}\n//# sourceMappingURL=multiply.js.map","\"use strict\";\n// https://en.wikipedia.org/wiki/Exponentiation_by_squaring\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.power = power;\nfunction power(array, p, options = {}) {\n    if (p <= 0)\n        throw new Error('power must be larger than 0');\n    if (p === 1)\n        return array;\n    if (p === 2) {\n        return array.square();\n    }\n    p--;\n    let base = array.copy(); // linear time\n    while (p !== 0) {\n        if ((p & 1) !== 0) {\n            array.multiply(base, options); // executed <= log2(p) times\n        }\n        p >>= 1;\n        if (p !== 0)\n            base.square(options); // executed <= log2(p) times\n    }\n    return array;\n}\n//# sourceMappingURL=power.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Distribution = void 0;\nconst closestPointX_js_1 = require(\"./utils/closestPointX.js\");\nconst joinX_js_1 = require(\"./utils/joinX.js\");\nconst multiply_js_1 = require(\"./utils/multiply.js\");\nconst power_js_1 = require(\"./utils/power.js\");\n/**\n * Internal class to deal with isotopic distribution calculations\n */\nclass Distribution {\n    constructor(array = []) {\n        this.array = array;\n        this.cache = getEmptyCache();\n    }\n    emptyCache() {\n        if (this.cache.isEmpty)\n            return;\n        this.cache = getEmptyCache();\n    }\n    get length() {\n        return this.array.length;\n    }\n    get xs() {\n        return this.array.map((p) => p.x);\n    }\n    get ys() {\n        return this.array.map((p) => p.y);\n    }\n    get sumY() {\n        if (!Number.isNaN(this.cache.sumY))\n            return this.cache.sumY;\n        let sumY = 0;\n        for (let item of this.array) {\n            sumY += item.y;\n        }\n        this.cache.sumY = sumY;\n        this.cache.isEmpty = false;\n        return sumY;\n    }\n    get minX() {\n        if (!Number.isNaN(this.cache.minX))\n            return this.cache.minX;\n        let minX = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x < minX) {\n                minX = item.x;\n            }\n        }\n        this.cache.minX = minX;\n        this.cache.isEmpty = false;\n        return minX;\n    }\n    get maxX() {\n        if (!Number.isNaN(this.cache.maxX))\n            return this.cache.maxX;\n        let maxX = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x > maxX) {\n                maxX = item.x;\n            }\n        }\n        this.cache.maxX = maxX;\n        this.cache.isEmpty = false;\n        return maxX;\n    }\n    get minY() {\n        if (!Number.isNaN(this.cache.minY))\n            return this.cache.minY;\n        let minY = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y < minY) {\n                minY = item.y;\n            }\n        }\n        this.cache.minY = minY;\n        this.cache.isEmpty = false;\n        return minY;\n    }\n    get maxY() {\n        if (!Number.isNaN(this.cache.maxY))\n            return this.cache.maxY;\n        let maxY = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y > maxY) {\n                maxY = item.y;\n            }\n        }\n        this.cache.maxY = maxY;\n        this.cache.isEmpty = false;\n        return maxY;\n    }\n    multiplyY(value) {\n        for (const item of this.array) {\n            item.y *= value;\n        }\n    }\n    setArray(array) {\n        this.array = array;\n        this.emptyCache();\n    }\n    move(other) {\n        this.array = other.array;\n        this.emptyCache();\n    }\n    push(...points) {\n        this.array.push(...points);\n        this.emptyCache();\n    }\n    /**\n     * Sort by ASCENDING x values\n     * @returns {Distribution}\n     */\n    sortX() {\n        this.cache.ySorted = false;\n        if (this.cache.xSorted)\n            return this;\n        this.array.sort((a, b) => a.x - b.x);\n        this.cache.xSorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    /**\n     * Sort by DESCENDING y values\n     * @returns {Distribution}\n     */\n    sortY() {\n        this.cache.xSorted = false;\n        if (this.cache.ySorted)\n            return this;\n        this.array.sort((a, b) => b.y - a.y);\n        this.cache.ySorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    normalize() {\n        const sum = this.sumY;\n        for (let item of this.array) {\n            item.y /= sum;\n        }\n        return this;\n    }\n    /**\n     * Only keep a defined number of peaks\n     * @param {number} limit\n     * @returns\n     */\n    topY(limit) {\n        if (!limit)\n            return this;\n        if (this.array.length <= limit)\n            return this;\n        this.sortY();\n        this.array.splice(limit);\n        return this;\n    }\n    /**\n     * remove all the peaks under a defined relative threshold\n     * @param {number} [relativeValue=0] Should be between 0 and 1. 0 means no peak will be removed, 1 means all peaks will be removed\n     */\n    threshold(relativeValue = 0) {\n        if (!relativeValue)\n            return this;\n        const maxY = this.maxY;\n        const threshold = maxY * relativeValue;\n        this.array = this.array.filter((point) => point.y >= threshold);\n    }\n    square(options = {}) {\n        return this.multiply(this, options);\n    }\n    multiply(b, options) {\n        return (0, multiply_js_1.multiply)(this, b, options);\n    }\n    power(p, options) {\n        return (0, power_js_1.power)(this, p, options);\n    }\n    copy() {\n        let distCopy = new Distribution();\n        distCopy.cache = { ...this.cache };\n        distCopy.array = structuredClone(this.array);\n        return distCopy;\n    }\n    maxToOne() {\n        if (this.array.length === 0)\n            return this;\n        let currentMax = this.maxY;\n        for (let item of this.array) {\n            item.y /= currentMax;\n        }\n        return this;\n    }\n    joinX(threshold) {\n        return (0, joinX_js_1.joinX)(this, threshold);\n    }\n    append(distribution) {\n        for (let item of distribution.array) {\n            this.array.push(item);\n        }\n        this.emptyCache();\n    }\n    closestPointX(target) {\n        this.sortX();\n        return (0, closestPointX_js_1.closestPointX)(this.array, target);\n    }\n}\nexports.Distribution = Distribution;\nfunction getEmptyCache() {\n    return {\n        isEmpty: true,\n        xSorted: false,\n        ySorted: false,\n        minX: Number.NaN,\n        maxX: Number.NaN,\n        minY: Number.NaN,\n        maxY: Number.NaN,\n        sumY: Number.NaN,\n    };\n}\n//# sourceMappingURL=Distribution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDerivedCompositionInfo = getDerivedCompositionInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * Calcultes informations about the isotopic composition explaining a specific mass\n * @param {Record<string, number>} composition\n * @returns\n */\nfunction getDerivedCompositionInfo(composition) {\n    const shortComposition = {};\n    let label = '';\n    let shortLabel = '';\n    let deltaNeutrons = 0;\n    for (let key in composition) {\n        let isotopeLabel = '';\n        for (let i = 0; i < key.length; i++) {\n            if (mf_parser_1.superscript[key[i]]) {\n                isotopeLabel += mf_parser_1.superscript[key[i]];\n            }\n            else {\n                isotopeLabel += key[i];\n            }\n        }\n        if (composition[key] > 1) {\n            const number = String(composition[key]);\n            for (let i = 0; i < number.length; i++) {\n                isotopeLabel += mf_parser_1.subscript[number[i]];\n            }\n        }\n        label += isotopeLabel;\n        const isotope = chemical_elements_1.stableIsotopesObject[key];\n        deltaNeutrons += isotope.deltaNeutrons * composition[key];\n        if (isotope.mostAbundant)\n            continue;\n        shortLabel += isotopeLabel;\n        shortComposition[key] = composition[key];\n    }\n    return { label, shortComposition, shortLabel, deltaNeutrons };\n}\n//# sourceMappingURL=getDerivedCompositionInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IsotopicDistribution = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst spectrum_generator_1 = require(\"spectrum-generator\");\nconst Distribution_1 = require(\"./Distribution\");\nconst getDerivedCompositionInfo_1 = require(\"./utils/getDerivedCompositionInfo\");\nconst MINIMAL_FWHM = 1e-8;\nconst MINIMAL_Y = 1e-8;\n/** @typedef {import('mf-parser').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('mf-parser').MFInfo} MFInfo */\n/** @typedef {import('./IsotopicDistribution.types').XY} XY */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionPart} IsotopicDistributionPart */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionOptions} IsotopicDistributionOptions */\n/**\n * A class that allows to manage isotopic distribution\n */\nclass IsotopicDistribution {\n    /**\n     * Class that manages isotopic distribution\n     * @param {string|Array<any>} value - Molecular formula or an array of parts.\n     * @param {IsotopicDistributionOptions} [options]\n     */\n    constructor(value, options = {}) {\n        this.threshold = options.threshold;\n        this.limit = options.limit;\n        if (Array.isArray(value)) {\n            this.parts = structuredClone(value);\n            for (let part of this.parts) {\n                part.confidence = 0;\n                part.isotopesInfo = new mf_parser_1.MF(part.ionization?.mf\n                    ? `${part.mf}(${part.ionization.mf})`\n                    : part.mf || '').getIsotopesInfo();\n            }\n        }\n        else {\n            let mf = new mf_parser_1.MF(value, { ensureCase: options.ensureCase });\n            let mfInfo = mf.getInfo();\n            const ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n            /** @type {MFInfo} */\n            const parts = 'parts' in mfInfo ? mfInfo.parts : [mfInfo];\n            this.parts = [];\n            for (let partOriginal of parts) {\n                // we calculate information for each part\n                for (const ionization of ionizations) {\n                    let part = structuredClone(partOriginal);\n                    part.em = part.monoisotopicMass; // TODO: To remove !!! we change the name !?\n                    part.isotopesInfo = new mf_parser_1.MF(ionization.mf ? `${part.mf}(${ionization.mf})` : part.mf || '').getIsotopesInfo();\n                    part.confidence = 0;\n                    let msInfo = (0, mf_utilities_1.getMsInfo)(part, {\n                        ionization,\n                    });\n                    part.ionization = msInfo.ionization;\n                    part.ms = msInfo.ms;\n                    this.parts.push(part);\n                }\n            }\n        }\n        this.cachedDistribution = undefined;\n        this.fwhm = options.fwhm === undefined ? 0.01 : options.fwhm;\n        // if fwhm is under 1e-8 there are some artifacts in the spectra\n        if (this.fwhm < MINIMAL_FWHM)\n            this.fwhm = MINIMAL_FWHM;\n        this.minY = options.minY === undefined ? MINIMAL_Y : options.minY;\n        this.maxLines = options.maxLines || 5000;\n        this.allowNeutral =\n            options.allowNeutral === undefined ? true : options.allowNeutral;\n    }\n    /**\n     * @returns {Array<IsotopicDistributionPart>}\n     */\n    getParts() {\n        return this.parts;\n    }\n    /**\n     * @return {Distribution} returns the total distribution (for all parts)\n     */\n    getDistribution() {\n        if (this.cachedDistribution)\n            return this.cachedDistribution;\n        let options = {\n            maxLines: this.maxLines,\n            minY: this.minY,\n            deltaX: this.fwhm,\n        };\n        let finalDistribution = new Distribution_1.Distribution();\n        this.confidence = 0;\n        // TODO need to cache each part without ionization\n        // in case of many ionization we don't need to recalculate everything !\n        for (let part of this.parts) {\n            let totalDistribution = new Distribution_1.Distribution([\n                {\n                    x: 0,\n                    y: 1,\n                    composition: this.fwhm === MINIMAL_FWHM ? {} : undefined, // should we calculate composition in isotopes of each peak\n                },\n            ]);\n            let partNaturalDeltaNeutrons = 0;\n            for (let isotope of part.isotopesInfo.isotopes) {\n                partNaturalDeltaNeutrons +=\n                    (isotope.naturalDeltaNeutrons ?? 0) * isotope.number;\n            }\n            let charge = part.ms?.charge || part.isotopesInfo.charge || 0;\n            let absoluteCharge = Math.abs(charge);\n            if (charge || this.allowNeutral) {\n                for (let isotope of part.isotopesInfo.isotopes) {\n                    if (isotope.number < 0)\n                        return { array: [] };\n                    if (isotope.number > 0) {\n                        const newDistribution = structuredClone(isotope.distribution);\n                        if (this.fwhm === MINIMAL_FWHM) {\n                            // add composition\n                            for (const entry of newDistribution) {\n                                entry.composition = { [Math.round(entry.x) + isotope.atom]: 1 };\n                            }\n                        }\n                        let distribution = new Distribution_1.Distribution(newDistribution);\n                        distribution.power(isotope.number, options);\n                        totalDistribution.multiply(distribution, options);\n                    }\n                }\n                this.confidence = 0;\n                for (const item of totalDistribution.array) {\n                    this.confidence += item.y;\n                }\n                // we finally deal with the charge\n                if (charge) {\n                    for (const e of totalDistribution.array) {\n                        e.x = (e.x - chemical_elements_1.ELECTRON_MASS * charge) / absoluteCharge;\n                    }\n                }\n                if (totalDistribution.array && totalDistribution.array.length > 0) {\n                    totalDistribution.sortX();\n                    part.fromX = totalDistribution.array[0].x;\n                    part.toX = totalDistribution.array.at(-1).x;\n                }\n                if (part.ms?.similarity?.factor) {\n                    totalDistribution.multiplyY(part.ms.similarity.factor);\n                }\n                else if (part.ms?.target?.intensity &&\n                    part.ms?.target?.intensity !== 1) {\n                    // intensity is the value of the monoisotopic mass !\n                    // need to find the intensity of the peak corresponding\n                    // to the monoisotopic mass\n                    if (part.ms.target.mass) {\n                        let target = totalDistribution.closestPointX(part.ms.target.mass);\n                        totalDistribution.multiplyY(part.ms.target.intensity / target.y);\n                    }\n                    else {\n                        totalDistribution.multiplyY(part.ms.target.intensity);\n                    }\n                }\n                else if (part?.intensity && part?.intensity !== 1) {\n                    totalDistribution.multiplyY(part.intensity);\n                }\n                part.isotopicDistribution = totalDistribution.array;\n                for (let entry of totalDistribution.array) {\n                    if (!entry.composition)\n                        continue;\n                    const info = (0, getDerivedCompositionInfo_1.getDerivedCompositionInfo)(entry.composition);\n                    info.deltaNeutrons -= partNaturalDeltaNeutrons;\n                    Object.assign(entry, info);\n                }\n                if (finalDistribution.array.length === 0) {\n                    finalDistribution = totalDistribution;\n                }\n                else {\n                    finalDistribution.append(totalDistribution);\n                }\n            }\n        }\n        if (finalDistribution)\n            finalDistribution.joinX(this.fwhm);\n        // if there is a threshold we will deal with it\n        // and we will correct the confidence\n        if (this.threshold || this.limit) {\n            const sumBefore = finalDistribution.sumY;\n            if (this.threshold)\n                finalDistribution.threshold(this.threshold);\n            if (this.limit) {\n                finalDistribution.topY(this.limit);\n                finalDistribution.sortX();\n            }\n            const sumAfter = finalDistribution.sumY;\n            this.confidence = (this.confidence * sumAfter) / sumBefore;\n        }\n        this.confidence /= this.parts.length;\n        this.cachedDistribution = finalDistribution;\n        return finalDistribution;\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter=', ']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getCSV(options) {\n        return this.getText({ ...options, delimiter: ', ' });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getTSV(options) {\n        return this.getText({ ...options, delimiter: '\\t' });\n    }\n    getTable(options = {}) {\n        const { maxValue, xLabel = 'x', yLabel = 'y' } = options;\n        let points = this.getDistribution().array;\n        if (points.length === 0)\n            return [];\n        let factor = 1;\n        if (maxValue) {\n            let maxY = this.getMaxY(points);\n            factor = maxValue / maxY;\n        }\n        return points.map((point) => {\n            let newPoint = { [xLabel]: point.x, [yLabel]: point.y * factor };\n            return newPoint;\n        });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getText(options = {}) {\n        const { delimiter = '\\t', numberXDecimals = 5, numberYDecimals = 3, } = options;\n        let points = this.getDistribution().array;\n        let csv = [];\n        for (let point of points) {\n            csv.push(`${point.x.toFixed(numberXDecimals)}${delimiter}${(point.y * 100).toFixed(numberYDecimals)}`);\n        }\n        return csv.join('\\n');\n    }\n    getMaxY(points) {\n        let maxY = points[0].y;\n        for (let point of points) {\n            if (point.y > maxY)\n                maxY = point.y;\n        }\n        return maxY;\n    }\n    getSumY(points) {\n        let sumY = 0;\n        for (let point of points) {\n            sumY += point.y;\n        }\n        return sumY;\n    }\n    /**\n     * Returns the isotopic distribution as an array of peaks\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {Array<{x:number,y:number}|{x:number,y:number,label:string,shortComposition:string,shortLabel:string,deltaNeutrons:number}>}\n     */\n    getPeaks(options = {}) {\n        const { maxValue = 100, sumValue } = options;\n        let peaks = this.getDistribution().array;\n        if (peaks.length === 0)\n            return [];\n        let factor = 1;\n        if (sumValue) {\n            let sumY = this.getSumY(peaks);\n            factor = sumY / sumValue;\n            if (factor !== 1) {\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    peak.y = peak.y / factor;\n                }\n            }\n        }\n        else if (maxValue) {\n            let maxY = this.getMaxY(peaks);\n            if (maxValue !== maxY) {\n                // we need to copy the array because we prefer no side effects\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    // we rescale the Y values by first dividing by maxY and then multiplying by maxValue in order to avoid approximation errors\n                    peak.y = (peak.y / maxY) * maxValue;\n                }\n            }\n        }\n        return peaks;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {{x:number[],y:number[]}|{x:number[],y:number[],label:string[],shortComposition:string[],shortLabel:string[],deltaNeutrons:[]}}\n     */\n    getXY(options = {}) {\n        let peaks = this.getPeaks(options);\n        if (peaks.length === 0) {\n            return { x: [], y: [] };\n        }\n        const result = {\n            x: peaks.map((a) => a.x),\n            y: peaks.map((a) => a.y),\n        };\n        for (let key of Object.keys(peaks[0]).filter((k) => k !== 'x' && k !== 'y')) {\n            result[key] = peaks.map((a) => a[key]);\n        }\n        return result;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {import('cheminfo-types').MeasurementXYVariables} an object containing at least the 2 properties: x:[] and y:[]\n     */\n    getVariables(options = {}) {\n        const xy = this.getXY(options);\n        return {\n            x: { data: xy.x, label: 'm/z', units: 'u' },\n            y: { data: xy.y, label: 'Relative intensity', units: '%' },\n        };\n    }\n    /**\n     * Returns the isotopic distribution as the sum of gaussian\n     * @param {object} [options={}]\n     * @param {number} [options.gaussianWidth=10] // how good should look the gaussian ? By default we take 10 times the fwhm as number of points\n     * @param {number} [options.threshold=0.00001] // minimal height to return point\n     * @param {number} [options.maxLength=1e6] // maximal number of points; ignored when sparse is true\n     * @param {number} [options.maxValue] // rescale Y to reach maxValue\n     * @param {number} [options.from] // minimal x value, default to the first point - 2\n     * @param {number} [options.to] // maximal x value, default to the last point + 2\n     * @param {function} [options.peakWidthFct=(mz)=>(this.fwhm)]\n     * @param {boolean} [options.sparse=false] // use SparseSpectrumGenerator; only generates points in peak regions, avoids maxLength limit\n     * @return {XY} isotopic distribution as an object containing 2 properties: x:[] and y:[]\n     */\n    getGaussian(options = {}) {\n        const { peakWidthFct = () => this.fwhm, threshold = 0.00001, gaussianWidth = 10, maxValue, maxLength = 1e6, sparse = false, } = options;\n        let peaks = this.getTable({ maxValue });\n        if (peaks.length === 0)\n            return { x: [], y: [] };\n        const from = options.from || peaks[0].x - 2;\n        const to = options.to || peaks.at(-1).x + 2;\n        let spectrum;\n        const nbPoints = Math.round(((to - from) * gaussianWidth) / this.fwhm + 1);\n        const generatorOptions = { from, to, peakWidthFct, nbPoints };\n        if (sparse) {\n            const generator = new spectrum_generator_1.SparseSpectrumGenerator(generatorOptions);\n            spectrum = generator.generateSparseSpectrum(peaks, { threshold });\n        }\n        else {\n            if (nbPoints > maxLength) {\n                throw new Error(`Number of points is over the maxLength: ${nbPoints}>${maxLength}`);\n            }\n            const generator = new spectrum_generator_1.SpectrumGenerator(generatorOptions);\n            spectrum = generator.generateSpectrum(peaks, { threshold });\n        }\n        //TODO not clear why maxValue it can not be directly provided as a parameter in the generateSpectrum function but some tests would fail\n        if (maxValue) {\n            spectrum.y = (0, ml_spectra_processing_1.xNormed)(spectrum.y, {\n                algorithm: 'max',\n                value: maxValue,\n                output: spectrum.y,\n            });\n        }\n        return spectrum;\n    }\n}\nexports.IsotopicDistribution = IsotopicDistribution;\n//# sourceMappingURL=IsotopicDistribution.js.map","export function calculateOverlapFromDiff(diffs) {\n    if (diffs[1].length === 0)\n        return 0;\n    let sumPos = 0;\n    for (let i = 0; i < diffs[1].length; i++) {\n        sumPos += Math.abs(diffs[1][i]);\n    }\n    return 1 - sumPos;\n}\n//# sourceMappingURL=calculateOverlapFromDiff.js.map","/**\n * This code requires the use of an array like  [[x1,y1],[x2,y2], ...]\n * If it is not the right format, we will just convert it\n * Otherwise we return the correct format\n * @param {Peaks} peaks\n * @returns [number[], number[]]\n */\nexport function checkPeaks(peaks) {\n    // if it is already a 2D array of points, we just return them\n    if (Array.isArray(peaks) && Array.isArray(peaks[0]) && peaks.length === 2) {\n        return peaks;\n    }\n    if (Array.isArray(peaks.x) && Array.isArray(peaks.y)) {\n        return [peaks.x, peaks.y];\n    }\n    const x = new Array(peaks.length);\n    const y = new Array(peaks.length);\n    for (let i = 0; i < peaks.length; i++) {\n        x[i] = peaks[i][0];\n        y[i] = peaks[i][1];\n    }\n    return [x, y];\n}\n//# sourceMappingURL=checkPeaks.js.map","export function extract(array, from, to) {\n    const newArray = [[], []];\n    let j = 0;\n    const length = array[0] ? array[0].length : 0;\n    for (let i = 0; i < length; i++) {\n        if ((!from || array[0][i] >= from) && (!to || array[0][i] <= to)) {\n            newArray[0][j] = array[0][i];\n            newArray[1][j] = array[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=extract.js.map","// returns an new array based on array1 where there is a peak of array2 at a distance under width/2\nexport function getCommonArray(array1, array2, width) {\n    const newArray = [[], []];\n    let pos2 = 0;\n    width /= 2;\n    let j = 0;\n    const array1Length = array1[0] ? array1[0].length : 0;\n    const array2Length = array2[0] ? array2[0].length : 0;\n    for (let i = 0; i < array1Length; i++) {\n        while (pos2 < array2Length && array1[0][i] > array2[0][pos2] + width) {\n            pos2++;\n        }\n        if (pos2 < array2Length && array1[0][i] > array2[0][pos2] - width) {\n            newArray[0][j] = array1[0][i];\n            newArray[1][j] = array1[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=getCommonArray.js.map","'use strict';\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\n/**\n * Computes the sum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.sum = function sum(values) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n        sum += values[i];\n    }\n    return sum;\n};\n\n/**\n * Computes the maximum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.max = function max(values) {\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] > max) max = values[i];\n    }\n    return max;\n};\n\n/**\n * Computes the minimum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.min = function min(values) {\n    var min = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n    }\n    return min;\n};\n\n/**\n * Computes the min and max of the given values\n * @param {Array} values\n * @returns {{min: number, max: number}}\n */\nexports.minMax = function minMax(values) {\n    var min = values[0];\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n        if (values[i] > max) max = values[i];\n    }\n    return {\n        min: min,\n        max: max\n    };\n};\n\n/**\n * Computes the arithmetic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.arithmeticMean = function arithmeticMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        sum += values[i];\n    }\n    return sum / l;\n};\n\n/**\n * {@link arithmeticMean}\n */\nexports.mean = exports.arithmeticMean;\n\n/**\n * Computes the geometric mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.geometricMean = function geometricMean(values) {\n    var mul = 1;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        mul *= values[i];\n    }\n    return Math.pow(mul, 1 / l);\n};\n\n/**\n * Computes the mean of the log of the given values\n * If the return value is exponentiated, it gives the same result as the\n * geometric mean.\n * @param {Array} values\n * @returns {number}\n */\nexports.logMean = function logMean(values) {\n    var lnsum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        lnsum += Math.log(values[i]);\n    }\n    return lnsum / l;\n};\n\n/**\n * Computes the weighted grand mean for a list of means and sample sizes\n * @param {Array} means - Mean values for each set of samples\n * @param {Array} samples - Number of original values for each set of samples\n * @returns {number}\n */\nexports.grandMean = function grandMean(means, samples) {\n    var sum = 0;\n    var n = 0;\n    var l = means.length;\n    for (var i = 0; i < l; i++) {\n        sum += samples[i] * means[i];\n        n += samples[i];\n    }\n    return sum / n;\n};\n\n/**\n * Computes the truncated mean of the given values using a given percentage\n * @param {Array} values\n * @param {number} percent - The percentage of values to keep (range: [0,1])\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.truncatedMean = function truncatedMean(values, percent, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var k = Math.floor(l * percent);\n    var sum = 0;\n    for (var i = k; i < (l - k); i++) {\n        sum += values[i];\n    }\n    return sum / (l - 2 * k);\n};\n\n/**\n * Computes the harmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.harmonicMean = function harmonicMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        if (values[i] === 0) {\n            throw new RangeError('value at index ' + i + 'is zero');\n        }\n        sum += 1 / values[i];\n    }\n    return l / sum;\n};\n\n/**\n * Computes the contraharmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.contraHarmonicMean = function contraHarmonicMean(values) {\n    var r1 = 0;\n    var r2 = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        r1 += values[i] * values[i];\n        r2 += values[i];\n    }\n    if (r2 < 0) {\n        throw new RangeError('sum of values is negative');\n    }\n    return r1 / r2;\n};\n\n/**\n * Computes the median of the given values\n * @param {Array} values\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.median = function median(values, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var half = Math.floor(l / 2);\n    if (l % 2 === 0) {\n        return (values[half - 1] + values[half]) * 0.5;\n    } else {\n        return values[half];\n    }\n};\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.variance = function variance(values, unbiased) {\n    if (unbiased === undefined) unbiased = true;\n    var theMean = exports.mean(values);\n    var theVariance = 0;\n    var l = values.length;\n\n    for (var i = 0; i < l; i++) {\n        var x = values[i] - theMean;\n        theVariance += x * x;\n    }\n\n    if (unbiased) {\n        return theVariance / (l - 1);\n    } else {\n        return theVariance / l;\n    }\n};\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.standardDeviation = function standardDeviation(values, unbiased) {\n    return Math.sqrt(exports.variance(values, unbiased));\n};\n\nexports.standardError = function standardError(values) {\n    return exports.standardDeviation(values) / Math.sqrt(values.length);\n};\n\n/**\n * IEEE Transactions on biomedical engineering, vol. 52, no. 1, january 2005, p. 76-\n * Calculate the standard deviation via the Median of the absolute deviation\n *  The formula for the standard deviation only holds for Gaussian random variables.\n * @returns {{mean: number, stdev: number}}\n */\nexports.robustMeanAndStdev = function robustMeanAndStdev(y) {\n    var mean = 0, stdev = 0;\n    var length = y.length, i = 0;\n    for (i = 0; i < length; i++) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (i = 0; i < length; i++)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort(compareNumbers);\n    if (length % 2 === 1) {\n        stdev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stdev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return {\n        mean: mean,\n        stdev: stdev\n    };\n};\n\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof (alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n\n    var quart = values.length / 4;\n    var q1 = values[Math.ceil(quart) - 1];\n    var q2 = exports.median(values, true);\n    var q3 = values[Math.ceil(quart * 3) - 1];\n\n    return {q1: q1, q2: q2, q3: q3};\n};\n\nexports.pooledStandardDeviation = function pooledStandardDeviation(samples, unbiased) {\n    return Math.sqrt(exports.pooledVariance(samples, unbiased));\n};\n\nexports.pooledVariance = function pooledVariance(samples, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var sum = 0;\n    var length = 0, l = samples.length;\n    for (var i = 0; i < l; i++) {\n        var values = samples[i];\n        var vari = exports.variance(values);\n\n        sum += (values.length - 1) * vari;\n\n        if (unbiased)\n            length += values.length - 1;\n        else\n            length += values.length;\n    }\n    return sum / length;\n};\n\nexports.mode = function mode(values) {\n    var l = values.length,\n        itemCount = new Array(l),\n        i;\n    for (i = 0; i < l; i++) {\n        itemCount[i] = 0;\n    }\n    var itemArray = new Array(l);\n    var count = 0;\n\n    for (i = 0; i < l; i++) {\n        var index = itemArray.indexOf(values[i]);\n        if (index >= 0)\n            itemCount[index]++;\n        else {\n            itemArray[count] = values[i];\n            itemCount[count] = 1;\n            count++;\n        }\n    }\n\n    var maxValue = 0, maxIndex = 0;\n    for (i = 0; i < count; i++) {\n        if (itemCount[i] > maxValue) {\n            maxValue = itemCount[i];\n            maxIndex = i;\n        }\n    }\n\n    return itemArray[maxIndex];\n};\n\nexports.covariance = function covariance(vector1, vector2, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var mean1 = exports.mean(vector1);\n    var mean2 = exports.mean(vector2);\n\n    if (vector1.length !== vector2.length)\n        throw 'Vectors do not have the same dimensions';\n\n    var cov = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        var x = vector1[i] - mean1;\n        var y = vector2[i] - mean2;\n        cov += x * y;\n    }\n\n    if (unbiased)\n        return cov / (l - 1);\n    else\n        return cov / l;\n};\n\nexports.skewness = function skewness(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n\n    var s2 = 0, s3 = 0, l = values.length;\n    for (var i = 0; i < l; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s3 += dev * dev * dev;\n    }\n    var m2 = s2 / l;\n    var m3 = s3 / l;\n\n    var g = m3 / (Math.pow(m2, 3 / 2.0));\n    if (unbiased) {\n        var a = Math.sqrt(l * (l - 1));\n        var b = l - 2;\n        return (a / b) * g;\n    } else {\n        return g;\n    }\n};\n\nexports.kurtosis = function kurtosis(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n    var n = values.length, s2 = 0, s4 = 0;\n\n    for (var i = 0; i < n; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s4 += dev * dev * dev * dev;\n    }\n    var m2 = s2 / n;\n    var m4 = s4 / n;\n\n    if (unbiased) {\n        var v = s2 / (n - 1);\n        var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n        var b = s4 / (v * v);\n        var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n\n        return a * b - 3 * c;\n    } else {\n        return m4 / (m2 * m2) - 3;\n    }\n};\n\nexports.entropy = function entropy(values, eps) {\n    if (typeof (eps) === 'undefined') eps = 0;\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * Math.log(values[i] + eps);\n    return -sum;\n};\n\nexports.weightedMean = function weightedMean(values, weights) {\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * weights[i];\n    return sum;\n};\n\nexports.weightedStandardDeviation = function weightedStandardDeviation(values, weights) {\n    return Math.sqrt(exports.weightedVariance(values, weights));\n};\n\nexports.weightedVariance = function weightedVariance(values, weights) {\n    var theMean = exports.weightedMean(values, weights);\n    var vari = 0, l = values.length;\n    var a = 0, b = 0;\n\n    for (var i = 0; i < l; i++) {\n        var z = values[i] - theMean;\n        var w = weights[i];\n\n        vari += w * (z * z);\n        b += w;\n        a += w * w;\n    }\n\n    return vari * (b / (b * b - a));\n};\n\nexports.center = function center(values, inPlace) {\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n\n    var result = values;\n    if (!inPlace)\n        result = [].concat(values);\n\n    var theMean = exports.mean(result), l = result.length;\n    for (var i = 0; i < l; i++)\n        result[i] -= theMean;\n};\n\nexports.standardize = function standardize(values, standardDev, inPlace) {\n    if (typeof (standardDev) === 'undefined') standardDev = exports.standardDeviation(values);\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n    var l = values.length;\n    var result = inPlace ? values : new Array(l);\n    for (var i = 0; i < l; i++)\n        result[i] = values[i] / standardDev;\n    return result;\n};\n\nexports.cumulativeSum = function cumulativeSum(array) {\n    var l = array.length;\n    var result = new Array(l);\n    result[0] = array[0];\n    for (var i = 1; i < l; i++)\n        result[i] = result[i - 1] + array[i];\n    return result;\n};\n","'use strict';\n\nvar arrayStat = require('./array');\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\nexports.max = function max(matrix) {\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return max;\n};\n\nexports.min = function min(matrix) {\n    var min = Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n        }\n    }\n    return min;\n};\n\nexports.minMax = function minMax(matrix) {\n    var min = Infinity;\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return {\n        min:min,\n        max:max\n    };\n};\n\nexports.entropy = function entropy(matrix, eps) {\n    if (typeof (eps) === 'undefined') {\n        eps = 0;\n    }\n    var sum = 0,\n        l1 = matrix.length,\n        l2 = matrix[0].length;\n    for (var i = 0; i < l1; i++) {\n        for (var j = 0; j < l2; j++) {\n            sum += matrix[i][j] * Math.log(matrix[i][j] + eps);\n        }\n    }\n    return -sum;\n};\n\nexports.mean = function mean(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theMean, N, i, j;\n\n    if (dimension === -1) {\n        theMean = [0];\n        N = rows * cols;\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theMean[0] += matrix[i][j];\n            }\n        }\n        theMean[0] /= N;\n    } else if (dimension === 0) {\n        theMean = new Array(cols);\n        N = rows;\n        for (j = 0; j < cols; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theMean[j] += matrix[i][j];\n            }\n            theMean[j] /= N;\n        }\n    } else if (dimension === 1) {\n        theMean = new Array(rows);\n        N = cols;\n        for (j = 0; j < rows; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theMean[j] += matrix[j][i];\n            }\n            theMean[j] /= N;\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theMean;\n};\n\nexports.sum = function sum(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theSum, i, j;\n\n    if (dimension === -1) {\n        theSum = [0];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theSum[0] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theSum = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theSum[j] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theSum = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theSum[j] += matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theSum;\n};\n\nexports.product = function product(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theProduct, i, j;\n\n    if (dimension === -1) {\n        theProduct = [1];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theProduct[0] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theProduct = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < rows; i++) {\n                theProduct[j] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theProduct = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < cols; i++) {\n                theProduct[j] *= matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theProduct;\n};\n\nexports.standardDeviation = function standardDeviation(matrix, means, unbiased) {\n    var vari = exports.variance(matrix, means, unbiased), l = vari.length;\n    for (var i = 0; i < l; i++) {\n        vari[i] = Math.sqrt(vari[i]);\n    }\n    return vari;\n};\n\nexports.variance = function variance(matrix, means, unbiased) {\n    if (typeof (unbiased) === 'undefined') {\n        unbiased = true;\n    }\n    means = means || exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum1 = 0, sum2 = 0, x = 0;\n        for (var i = 0; i < rows; i++) {\n            x = matrix[i][j] - means[j];\n            sum1 += x;\n            sum2 += x * x;\n        }\n        if (unbiased) {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / (rows - 1);\n        } else {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / rows;\n        }\n    }\n    return vari;\n};\n\nexports.median = function median(matrix) {\n    var rows = matrix.length, cols = matrix[0].length;\n    var medians = new Array(cols);\n\n    for (var i = 0; i < cols; i++) {\n        var data = new Array(rows);\n        for (var j = 0; j < rows; j++) {\n            data[j] = matrix[j][i];\n        }\n        data.sort(compareNumbers);\n        var N = data.length;\n        if (N % 2 === 0) {\n            medians[i] = (data[N / 2] + data[(N / 2) - 1]) * 0.5;\n        } else {\n            medians[i] = data[Math.floor(N / 2)];\n        }\n    }\n    return medians;\n};\n\nexports.mode = function mode(matrix) {\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        modes = new Array(cols),\n        i, j;\n    for (i = 0; i < cols; i++) {\n        var itemCount = new Array(rows);\n        for (var k = 0; k < rows; k++) {\n            itemCount[k] = 0;\n        }\n        var itemArray = new Array(rows);\n        var count = 0;\n\n        for (j = 0; j < rows; j++) {\n            var index = itemArray.indexOf(matrix[j][i]);\n            if (index >= 0) {\n                itemCount[index]++;\n            } else {\n                itemArray[count] = matrix[j][i];\n                itemCount[count] = 1;\n                count++;\n            }\n        }\n\n        var maxValue = 0, maxIndex = 0;\n        for (j = 0; j < count; j++) {\n            if (itemCount[j] > maxValue) {\n                maxValue = itemCount[j];\n                maxIndex = j;\n            }\n        }\n\n        modes[i] = itemArray[maxIndex];\n    }\n    return modes;\n};\n\nexports.skewness = function skewness(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, l = means.length;\n    var skew = new Array(l);\n\n    for (var j = 0; j < l; j++) {\n        var s2 = 0, s3 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\n            s2 += dev * dev;\n            s3 += dev * dev * dev;\n        }\n\n        var m2 = s2 / n;\n        var m3 = s3 / n;\n        var g = m3 / Math.pow(m2, 3 / 2);\n\n        if (unbiased) {\n            var a = Math.sqrt(n * (n - 1));\n            var b = n - 2;\n            skew[j] = (a / b) * g;\n        } else {\n            skew[j] = g;\n        }\n    }\n    return skew;\n};\n\nexports.kurtosis = function kurtosis(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, m = matrix[0].length;\n    var kurt = new Array(m);\n\n    for (var j = 0; j < m; j++) {\n        var s2 = 0, s4 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\n            s2 += dev * dev;\n            s4 += dev * dev * dev * dev;\n        }\n        var m2 = s2 / n;\n        var m4 = s4 / n;\n\n        if (unbiased) {\n            var v = s2 / (n - 1);\n            var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n            var b = s4 / (v * v);\n            var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n            kurt[j] = a * b - 3 * c;\n        } else {\n            kurt[j] = m4 / (m2 * m2) - 3;\n        }\n    }\n    return kurt;\n};\n\nexports.standardError = function standardError(matrix) {\n    var samples = matrix.length;\n    var standardDeviations = exports.standardDeviation(matrix);\n    var l = standardDeviations.length;\n    var standardErrors = new Array(l);\n    var sqrtN = Math.sqrt(samples);\n\n    for (var i = 0; i < l; i++) {\n        standardErrors[i] = standardDeviations[i] / sqrtN;\n    }\n    return standardErrors;\n};\n\nexports.covariance = function covariance(matrix, dimension) {\n    return exports.scatter(matrix, undefined, dimension);\n};\n\nexports.scatter = function scatter(matrix, divisor, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    if (typeof (divisor) === 'undefined') {\n        if (dimension === 0) {\n            divisor = matrix.length - 1;\n        } else if (dimension === 1) {\n            divisor = matrix[0].length - 1;\n        }\n    }\n    var means = exports.mean(matrix, dimension);\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, s, k;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n\nexports.correlation = function correlation(matrix) {\n    var means = exports.mean(matrix),\n        standardDeviations = exports.standardDeviation(matrix, true, means),\n        scores = exports.zScores(matrix, means, standardDeviations),\n        rows = matrix.length,\n        cols = matrix[0].length,\n        i, j;\n\n    var cor = new Array(cols);\n    for (i = 0; i < cols; i++) {\n        cor[i] = new Array(cols);\n    }\n    for (i = 0; i < cols; i++) {\n        for (j = i; j < cols; j++) {\n            var c = 0;\n            for (var k = 0, l = scores.length; k < l; k++) {\n                c += scores[k][j] * scores[k][i];\n            }\n            c /= rows - 1;\n            cor[i][j] = c;\n            cor[j][i] = c;\n        }\n    }\n    return cor;\n};\n\nexports.zScores = function zScores(matrix, means, standardDeviations) {\n    means = means || exports.mean(matrix);\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix, true, means);\n    return exports.standardize(exports.center(matrix, means, false), standardDeviations, true);\n};\n\nexports.center = function center(matrix, means, inPlace) {\n    means = means || exports.mean(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var row = result[i];\n        for (j = 0, jj = row.length; j < jj; j++) {\n            row[j] = matrix[i][j] - means[j];\n        }\n    }\n    return result;\n};\n\nexports.standardize = function standardize(matrix, standardDeviations, inPlace) {\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var resultRow = result[i];\n        var sourceRow = matrix[i];\n        for (j = 0, jj = resultRow.length; j < jj; j++) {\n            if (standardDeviations[j] !== 0 && !isNaN(standardDeviations[j])) {\n                resultRow[j] = sourceRow[j] / standardDeviations[j];\n            }\n        }\n    }\n    return result;\n};\n\nexports.weightedVariance = function weightedVariance(matrix, weights) {\n    var means = exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum = 0;\n        var a = 0, b = 0;\n\n        for (var i = 0; i < rows; i++) {\n            var z = matrix[i][j] - means[j];\n            var w = weights[i];\n\n            sum += w * (z * z);\n            b += w;\n            a += w * w;\n        }\n\n        vari[j] = sum * (b / (b * b - a));\n    }\n\n    return vari;\n};\n\nexports.weightedMean = function weightedMean(matrix, weights, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length,\n        means, i, ii, j, w, row;\n\n    if (dimension === 0) {\n        means = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            means[i] = 0;\n        }\n        for (i = 0; i < rows; i++) {\n            row = matrix[i];\n            w = weights[i];\n            for (j = 0; j < cols; j++) {\n                means[j] += row[j] * w;\n            }\n        }\n    } else if (dimension === 1) {\n        means = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            means[i] = 0;\n        }\n        for (j = 0; j < rows; j++) {\n            row = matrix[j];\n            w = weights[j];\n            for (i = 0; i < cols; i++) {\n                means[j] += row[i] * w;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    var weightSum = arrayStat.sum(weights);\n    if (weightSum !== 0) {\n        for (i = 0, ii = means.length; i < ii; i++) {\n            means[i] /= weightSum;\n        }\n    }\n    return means;\n};\n\nexports.weightedCovariance = function weightedCovariance(matrix, weights, means, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    var s1 = 0, s2 = 0;\n    for (var i = 0, ii = weights.length; i < ii; i++) {\n        s1 += weights[i];\n        s2 += weights[i] * weights[i];\n    }\n    var factor = s1 / (s1 * s1 - s2);\n    return exports.weightedScatter(matrix, weights, means, factor, dimension);\n};\n\nexports.weightedScatter = function weightedScatter(matrix, weights, means, factor, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    if (typeof (factor) === 'undefined') {\n        factor = 1;\n    }\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, k, s;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += weights[k] * (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += weights[k] * (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n","import { array as StatArray } from 'ml-stat';\nexport function normalize(array) {\n    const min = StatArray.min(array[1]);\n    const max = StatArray.max(array[1]);\n    const sum = StatArray.sum(array[1]);\n    const length = array[1] ? array[1].length : 0;\n    if (sum !== 0) {\n        for (let i = 0; i < length; i++) {\n            array[1][i] /= sum;\n        }\n    }\n    return {\n        sum,\n        min,\n        max,\n    };\n}\n//# sourceMappingURL=normalize.js.map","import { extract } from './extract';\nimport { getCommonArray } from './getCommonArray';\nimport { normalize } from './normalize';\nimport { COMMON_SECOND, COMMON_FIRST } from './index';\n// this method will systematically take care of both array\nexport function commonExtractAndNormalize(array1, array2, width, from, to, common) {\n    if (!Array.isArray(array1) || !Array.isArray(array2)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const extract1 = extract(array1, from, to);\n    const extract2 = extract(array2, from, to);\n    let common1, common2, info1, info2;\n    if (common & COMMON_SECOND) {\n        common1 = getCommonArray(extract1, extract2, width);\n        info1 = normalize(common1);\n    }\n    else {\n        common1 = extract1;\n        info1 = normalize(common1);\n    }\n    if (common & COMMON_FIRST) {\n        common2 = getCommonArray(extract2, extract1, width);\n        info2 = normalize(common2);\n    }\n    else {\n        common2 = extract2;\n        info2 = normalize(common2);\n    }\n    return {\n        info1,\n        info2,\n        data1: common1,\n        data2: common2,\n    };\n}\n//# sourceMappingURL=commonExtractAndNormalize.js.map","import { extract } from './extract';\nimport { normalize } from './normalize';\nexport function extractAndNormalize(array, from, to) {\n    if (!Array.isArray(array)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const newArray = extract(array, from, to);\n    const info = normalize(newArray);\n    return {\n        info,\n        data: newArray,\n    };\n}\n//# sourceMappingURL=extractAndNormalize.js.map","// Adapted from: http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nexport function getIntersection(segment1, segment2) {\n    const p0X = segment1[0][0];\n    const p0Y = segment1[0][1];\n    const p1X = segment1[1][0];\n    const p1Y = segment1[1][1];\n    const p2X = segment2[0][0];\n    const p2Y = segment2[0][1];\n    const p3X = segment2[1][0];\n    const p3Y = segment2[1][1];\n    const s1X = p1X - p0X;\n    const s1Y = p1Y - p0Y;\n    const s2X = p3X - p2X;\n    const s2Y = p3Y - p2Y;\n    const s = (-s1Y * (p0X - p2X) + s1X * (p0Y - p2Y)) / (-s2X * s1Y + s1X * s2Y);\n    const t = (s2X * (p0Y - p2Y) - s2Y * (p0X - p2X)) / (-s2X * s1Y + s1X * s2Y);\n    if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n        return {\n            x: p0X + t * s1X,\n            y: p0Y + t * s1Y,\n        };\n    }\n    return null; // No collision\n}\n//# sourceMappingURL=getIntersection.js.map","import { calculateOverlapFromDiff } from './calculateOverlapFromDiff';\nimport { checkPeaks } from './checkPeaks';\nimport { commonExtractAndNormalize } from './commonExtractAndNormalize';\nimport { extract } from './extract';\nimport { extractAndNormalize } from './extractAndNormalize';\nimport { getCommonArray } from './getCommonArray.js';\nimport { getIntersection } from './getIntersection';\nimport { normalize } from './normalize';\nexport const COMMON_NO = 0;\nexport const COMMON_FIRST = 1;\nexport const COMMON_SECOND = 2;\nexport const COMMON_BOTH = 3;\n/**\n * A number, or a string containing a number.\n * @typedef {([number[],number[]]|[number,number][]|{x:number[],y:number[]})} Peaks\n */\n/**\n * Create a comparator class\n * {object} [options={}]\n * {string} [options.common=''] should we take only common peaks 'first', 'second', 'both', ''\n * {number} [options.widthBottom=2] bottom trapezoid width for similarity evaluation\n * {number} [options.widthTop=1] top trapezoid width for similarity evaluation\n * {number} [options.from] from region used for similarity calculation\n * {number} [options.to] to region used for similarity calculation\n */\nexport class Comparator {\n    constructor(options = {}) {\n        this.array1 = [];\n        this.array2 = [];\n        this.setOptions(options);\n    }\n    /*\n       2 formats are allowed:\n       [[x1,x2,...],[y1,y2,...]] or [[x1,y1],[x2,y2], ...]\n      */\n    setOptions(options = {}) {\n        if (typeof options.common === 'string') {\n            if (options.common.toLowerCase() === 'first') {\n                this.common = COMMON_FIRST;\n            }\n            else if (options.common.toLowerCase() === 'second') {\n                this.common = COMMON_SECOND;\n            }\n            else if (options.common.toLowerCase() === 'both') {\n                this.common = COMMON_BOTH;\n            }\n            else {\n                this.common = COMMON_NO;\n            }\n        }\n        else if (options.common === true) {\n            this.common = COMMON_BOTH;\n        }\n        else {\n            this.common = COMMON_NO;\n        }\n        this.trapezoid = options.trapezoid;\n        this.commonFactor = options.commonFactor || this.commonFactor || 4;\n        const { widthBottom = this.widthBottom || 2, widthTop = this.widthTop || 1, from = this.from, to = this.to, } = options;\n        this.setTrapezoid(widthBottom, widthTop);\n        this.setFromTo(from, to);\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks1(peaks) {\n        this.array1 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract.data;\n            this.array1ExtractInfo = extract.info;\n        }\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks2(peaks) {\n        this.array2 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract.data;\n            this.array2ExtractInfo = extract.info;\n        }\n    }\n    getExtract1() {\n        return this.array1Extract;\n    }\n    getExtract2() {\n        return this.array2Extract;\n    }\n    getExtractInfo1() {\n        return this.array1ExtractInfo;\n    }\n    getExtractInfo2() {\n        return this.array2ExtractInfo;\n    }\n    /**\n     * Set the new bottom and top width of the trapezoid\n     * @param {number} newWidthBottom\n     * @param {number} newWidthTop\n     */\n    setTrapezoid(newWidthBottom, newWidthTop) {\n        this.widthTop = newWidthTop;\n        this.widthBottom = newWidthBottom;\n        this.widthSlope = (this.widthBottom - this.widthTop) / 2;\n        if (this.widthBottom < this.widthTop) {\n            throw new Error('widthBottom has to be larger than widthTop');\n        }\n    }\n    /**\n     * Set the from / to for comparison\n     * @param {number} newFrom - set the new from value\n     * @param {number} newTo - set the new to value\n     * @returns\n     */\n    setFromTo(newFrom, newTo) {\n        if (newFrom === this.from && newTo === this.to)\n            return;\n        this.from = newFrom;\n        this.to = newTo;\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common, this.commonFactor);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            let extract1 = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract1.data;\n            this.array1ExtractInfo = extract1.info;\n            let extract2 = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract2.data;\n            this.array2ExtractInfo = extract2.info;\n        }\n    }\n    /**\n     *\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns\n     */\n    getOverlap(x1, y1, x2, y2) {\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        // TAKE CARE !!! We multiply the diff by 2 !!!\n        const diff = Math.abs(x1 - x2) * 2;\n        if (diff > this.widthBottom)\n            return 0;\n        if (diff <= this.widthTop) {\n            return Math.min(y1, y2);\n        }\n        const maxValue = (Math.max(y1, y2) * (this.widthBottom - diff)) /\n            (this.widthBottom - this.widthTop);\n        return Math.min(y1, y2, maxValue);\n    }\n    /**\n     * This is the old trapezoid similarity\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @param {number} widthTop\n     * @param {number} widthBottom\n     * @returns\n     */\n    getOverlapTrapezoid(x1, y1, x2, y2, widthTop, widthBottom) {\n        // eslint-disable-next-line no-console\n        console.error('getOverlapTrapezoid should not be used anymore');\n        const factor = 2 / (widthTop + widthBottom); // correction for surface=1\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        if (x1 === x2) {\n            // they have the same position\n            return Math.min(y1, y2);\n        }\n        const diff = Math.abs(x1 - x2);\n        if (diff >= widthBottom)\n            return 0;\n        if (y1 === y2) {\n            // do they have the same height ???\n            // we need to find the common length\n            if (diff <= widthTop) {\n                return ((widthTop + widthBottom) / 2 - diff) * y1 * factor;\n            }\n            else if (diff <= widthBottom) {\n                return ((((((widthBottom - diff) * y1) / 2) * (diff - widthTop)) /\n                    (widthBottom - widthTop)) *\n                    factor);\n            }\n            return 0;\n        }\n        else {\n            // the height are different and not the same position ...\n            // we need to consider only one segment to find its intersection\n            const small = Math.min(y1, y2);\n            const big = Math.max(y1, y2);\n            const targets = [\n                [\n                    [0, 0],\n                    [this.widthSlope, small],\n                ],\n                [\n                    [this.widthSlope, small],\n                    [this.widthSlope + widthTop, small],\n                ],\n                [\n                    [widthTop + this.widthSlope, small],\n                    [widthBottom, 0],\n                ],\n            ];\n            let segment;\n            if ((x1 > x2 && y1 > y2) || (x1 < x2 && y1 < y2)) {\n                segment = [\n                    [diff, 0],\n                    [diff + this.widthSlope, big],\n                ];\n            }\n            else {\n                segment = [\n                    [diff + this.widthSlope, big],\n                    [diff, 0],\n                ];\n            }\n            for (let i = 0; i < 3; i++) {\n                const intersection = getIntersection(targets[i], segment);\n                if (intersection) {\n                    switch (i) {\n                        case 0:\n                            return small - ((diff * intersection.y) / 2) * factor;\n                        case 1: // to simplify ...\n                            //     console.log(\"           \",widthSlope,small,big,intersection.x)\n                            return ((((this.widthSlope * small) / (2 * big)) * small +\n                                (widthTop + this.widthSlope - intersection.x) * small +\n                                (this.widthSlope * small) / 2) *\n                                factor);\n                        case 2:\n                            return (((widthBottom - diff) * intersection.y) / 2) * factor;\n                        default:\n                            throw new Error(`unexpected intersection value: ${i}`);\n                    }\n                }\n            }\n        }\n        return NaN;\n    }\n    /**\n     * This method calculates the total diff. The sum of positive value will yield to overlap\n     * @returns\n     */\n    calculateDiff() {\n        // we need to take 2 pointers\n        // and travel progressively between them ...\n        const newFirst = [\n            this.array1Extract[0].slice(),\n            this.array1Extract[1].slice(),\n        ];\n        const newSecond = [\n            this.array2Extract[0].slice(),\n            this.array2Extract[1].slice(),\n        ];\n        const array1Length = this.array1Extract[0]\n            ? this.array1Extract[0].length\n            : 0;\n        const array2Length = this.array2Extract[0]\n            ? this.array2Extract[0].length\n            : 0;\n        let pos1 = 0;\n        let pos2 = 0;\n        let previous2 = 0;\n        while (pos1 < array1Length) {\n            const diff = newFirst[0][pos1] - this.array2Extract[0][pos2];\n            if (Math.abs(diff) < this.widthBottom) {\n                // there is some overlap\n                let overlap;\n                if (this.trapezoid) {\n                    // old trapezoid overlap similarity\n                    overlap = this.getOverlapTrapezoid(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                else {\n                    overlap = this.getOverlap(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                newFirst[1][pos1] -= overlap;\n                newSecond[1][pos2] -= overlap;\n                if (pos2 < array2Length - 1) {\n                    pos2++;\n                }\n                else {\n                    pos1++;\n                    pos2 = previous2;\n                }\n            }\n            else if (diff > 0 && pos2 < array2Length - 1) {\n                pos2++;\n                previous2 = pos2;\n            }\n            else {\n                pos1++;\n                pos2 = previous2;\n            }\n        }\n        return newSecond;\n    }\n    /**\n     * Set the new peaks and return info\n     * @param {Peaks} newPeaks1\n     * @param {Peaks} newPeaks2\n     * @returns\n     */\n    getSimilarity(newPeaks1, newPeaks2) {\n        if (newPeaks1)\n            this.setPeaks1(newPeaks1);\n        if (newPeaks2)\n            this.setPeaks2(newPeaks2);\n        const diff = this.calculateDiff();\n        return {\n            diff,\n            extract1: this.getExtract1(),\n            extract2: this.getExtract2(),\n            extractInfo1: this.getExtractInfo1(),\n            extractInfo2: this.getExtractInfo2(),\n            similarity: calculateOverlapFromDiff(diff),\n            widthBottom: this.widthBottom,\n            widthTop: this.widthTop,\n        };\n    }\n    /**\n     * This works mainly when you have a array1 that is fixed\n     * newPeaks2 have to be normalized ! (sum to 1)\n     * @param {Peaks} newPeaks2\n     * @param {number} from\n     * @param {number} to\n     * @returns\n     */\n    fastSimilarity(newPeaks2, from, to) {\n        this.array1Extract = extract(this.array1, from, to);\n        this.array2Extract = newPeaks2;\n        if (this.common & COMMON_SECOND) {\n            this.array1Extract = getCommonArray(this.array1Extract, this.array2Extract, this.widthBottom);\n        }\n        normalize(this.array1Extract);\n        const diff = this.calculateDiff();\n        return calculateOverlapFromDiff(diff);\n    }\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchSimilarity = searchSimilarity;\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\nSearch for an experimental monoisotopic mass and calculate the similarity\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten] - should we return the array as a flat result\n* @param {function} [options.onStep] - Callback to do after each step\n* @param {string}   [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n* @param {object}   [options.minSimilarity=0.5] - min similarity value\n\n* @param {object}   [options.filter={}]\n* @param {boolean}  [options.filter.forceIonization=false] - If true ignore existing ionizations\n* @param {number}   [options.filter.msem] - Observed monoisotopic mass in mass spectrometer\n* @param {number}   [options.filter.precision=1000] - The precision on the experimental mass\n* @param {number}   [options.filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [options.filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [options.filter.unsaturation={}]\n* @param {number}   [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [options.filter.atoms] - object of atom:{min, max}\n* @param {object}   [options.filter.callback] - a function to filter the MF\n* @param {object}   [options.similarity={}]\n* @param {number}   [options.similarity.widthBottom]\n* @param {number}   [options.similarity.widthTop]\n* @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n* @param {object}   [options.similarity.zone={}]\n* @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n* @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n* @param {boolean}  [options.similarity.zone.auto=false] - if true, low / high is determined based on the isotopic distribution and the threshold\n* @param {string}   [options.similarity.common]\n* @param {number}   [options.similarity.threshold=0.001] - when calculating similarity we only use the isotopic distribution with peaks over this relative threshold\n* @param {number}   [options.similarity.limit] - We may define the maximum number of peaks to keep\n* @returns {Promise}\n*/\nasync function searchSimilarity(emdb, options = {}) {\n    const { similarity = {}, minSimilarity = 0.5, filter = {}, onStep, flatten, } = options;\n    let width = {\n        bottom: similarity.widthBottom,\n        top: similarity.widthTop,\n    };\n    if (!emdb.experimentalSpectrum ||\n        emdb.experimentalSpectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    const experimentalData = emdb.experimentalSpectrum.data;\n    let sumY = emdb.experimentalSpectrum.sumY();\n    // the result of emdb query will be stored in a property 'ms'\n    let results = emdb.searchMSEM(filter.msem, options);\n    let flatEntries = [];\n    if (!flatten) {\n        for (let database of Object.keys(results)) {\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        flatEntries = results;\n    }\n    let { widthFunction, zone = {}, threshold = 0.001, limit } = similarity;\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    const { low = -0.5, high = 2.5, auto } = zone;\n    // we need to calculate the similarity of the isotopic distribution\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    for (let i = 0; i < flatEntries.length; i++) {\n        const entry = flatEntries[i];\n        if (onStep)\n            await onStep(i);\n        if (widthFunction) {\n            width = widthFunction(entry.ms.em);\n        }\n        let isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(entry.mf, {\n            allowNeutral: false,\n            ionizations: [entry.ionization],\n            fwhm: width.top / 2,\n            threshold,\n            limit,\n        });\n        let distribution = isotopicDistribution.getDistribution();\n        // we need to define the comparison zone that depends of the charge\n        let from, to;\n        if (auto) {\n            from = distribution.minX - 0.5;\n            to = distribution.maxX + 0.5;\n            similarityProcessor.setFromTo(from, to);\n        }\n        else {\n            from = entry.ms.em + low / Math.abs(entry.ms.charge);\n            to = entry.ms.em + high / Math.abs(entry.ms.charge);\n            similarityProcessor.setFromTo(from, to);\n        }\n        if (widthFunction) {\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([distribution.xs, distribution.ys]);\n        let result = similarityProcessor.getSimilarity();\n        result.extractInfo1.from = from;\n        result.extractInfo1.to = to;\n        if (result.similarity > minSimilarity) {\n            entry.ms.similarity = {\n                value: result.similarity,\n                experimental: result.extract1,\n                theoretical: result.extract2,\n                difference: result.diff,\n                experimentalInfo: result.extractInfo1,\n                thereoticalInfo: result.extractInfo2,\n                quantity: result.extractInfo1.sum / sumY,\n                factor: result.extractInfo1.max / result.extractInfo2.max, // by how much we should mulitply the extrat2 to reach the spectrum\n                width,\n            };\n        }\n    }\n    if (!flatten) {\n        for (let database of Object.keys(results)) {\n            results[database] = results[database]\n                .filter((entry) => entry.ms.similarity)\n                .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        results = results\n            .filter((entry) => entry.ms.similarity)\n            .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n    }\n    return results;\n}\n//# sourceMappingURL=searchSimilarity.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import median from 'ml-array-median';\nimport {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport class TheilSenRegression extends BaseRegression {\n  /**\n   * Theil–Sen estimator\n   * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n   * @param {Array<number>|boolean} x\n   * @param {Array<number>|object} y\n   * @constructor\n   */\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // loads the model\n      this.slope = y.slope;\n      this.intercept = y.intercept;\n      this.coefficients = y.coefficients;\n    } else {\n      // creates the model\n      checkArrayLength(x, y);\n      theilSen(this, x, y);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'TheilSenRegression',\n      slope: this.slope,\n      intercept: this.intercept,\n    };\n  }\n\n  _predict(input) {\n    return this.slope * input + this.intercept;\n  }\n\n  computeX(input) {\n    return (input - this.intercept) / this.slope;\n  }\n\n  toString(precision) {\n    let result = 'f(x) = ';\n    if (this.slope) {\n      let xFactor = maybeToPrecision(this.slope, precision);\n      result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n      if (this.intercept) {\n        let absIntercept = Math.abs(this.intercept);\n        let operator = absIntercept === this.intercept ? '+' : '-';\n        result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n      }\n    } else {\n      result += maybeToPrecision(this.intercept, precision);\n    }\n    return result;\n  }\n\n  toLaTeX(precision) {\n    return this.toString(precision);\n  }\n\n  static load(json) {\n    if (json.name !== 'TheilSenRegression') {\n      throw new TypeError('not a Theil-Sen model');\n    }\n    return new TheilSenRegression(true, json);\n  }\n}\n\nfunction theilSen(regression, x, y) {\n  let len = x.length;\n  let slopes = new Array(len * len);\n  let count = 0;\n  for (let i = 0; i < len; ++i) {\n    for (let j = i + 1; j < len; ++j) {\n      if (x[i] !== x[j]) {\n        slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n      }\n    }\n  }\n  slopes.length = count;\n  let medianSlope = median(slopes);\n\n  let cuts = new Array(len);\n  for (let i = 0; i < len; ++i) {\n    cuts[i] = y[i] - medianSlope * x[i];\n  }\n\n  regression.slope = medianSlope;\n  regression.intercept = median(cuts);\n  regression.coefficients = [regression.intercept, regression.slope];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massShifts = massShifts;\nconst ml_regression_theil_sen_1 = require(\"ml-regression-theil-sen\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Calculates a function that allows post-calibration on mass spectra based on the error in assignment\n * @param {*} similarities\n * @param {object} [options={}]\n * @returns\n */\nfunction massShifts(similarities, options = {}) {\n    const { minSimilarity = 0.95, minLength = 10 } = options;\n    let results = [];\n    if (!Array.isArray(similarities)) {\n        for (let key of results) {\n            for (let entry of results[key]) {\n                results.push(entry);\n            }\n        }\n    }\n    else {\n        results = similarities;\n    }\n    results = results.filter((result) => result.ms &&\n        result.ms.similarity &&\n        result.ms.similarity.value > minSimilarity);\n    if (results.length < minLength) {\n        throw new Error(`X rescale can not be applied. We need at least ${minLength} peaks with over ${Math.round(minSimilarity * 100)}% similarity`);\n    }\n    const data = results\n        .map((result) => {\n        return {\n            em: result.ms.em,\n            delta: result.ms.delta,\n        };\n    })\n        .toSorted((a, b) => a.em - b.em);\n    let shifts = { x: [], y: [] };\n    for (const datum of data) {\n        shifts.x.push(Number(datum.em));\n        shifts.y.push(Number(datum.delta));\n    }\n    const regression = new ml_regression_theil_sen_1.TheilSenRegression(shifts.x, shifts.y);\n    let minX = (0, ml_spectra_processing_1.xMinValue)(shifts.x);\n    let maxX = (0, ml_spectra_processing_1.xMaxValue)(shifts.x);\n    let shiftsPPM = { x: shifts.x, y: [] };\n    for (const datum of data) {\n        shiftsPPM.y.push(Number((datum.delta / datum.em) * 1e6));\n    }\n    let regressionChart = { x: [], y: [] };\n    for (let i = minX; i < maxX; i += (maxX - minX) / 1000) {\n        regressionChart.x.push(i);\n        regressionChart.y.push(regression.predict(i));\n    }\n    return {\n        shifts,\n        shiftsPPM,\n        fit: regressionChart,\n        score: regression.score(shifts.x, shifts.y),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        slope: regression.slope,\n        intercept: regression.intercept,\n        predictFctString: `${regression.slope} * mass + ${regression.intercept}`,\n    };\n}\n//# sourceMappingURL=massShifts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url) {\n    const result = await fetch(url);\n    return result.json();\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMDB = void 0;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst appendFragmentsInfo_js_1 = require(\"./append/appendFragmentsInfo.js\");\nconst fromArray_js_1 = require(\"./from/fromArray.js\");\nconst fromMolecules_js_1 = require(\"./from/fromMolecules.js\");\nconst fromNucleicSequence_js_1 = require(\"./from/fromNucleicSequence.js\");\nconst fromPeptidicSequence_js_1 = require(\"./from/fromPeptidicSequence.js\");\nconst fromRange_js_1 = require(\"./from/fromRange.js\");\nconst loadCommercials_js_1 = require(\"./loadCommercials.js\");\nconst loadGoogleSheet_js_1 = require(\"./loadGoogleSheet.js\");\nconst loadKnapSack_js_1 = require(\"./loadKnapSack.js\");\nconst search_js_1 = require(\"./search.js\");\nconst searchMSEM_js_1 = require(\"./searchMSEM.js\");\nconst searchSimilarity_js_1 = require(\"./searchSimilarity.js\");\n__exportStar(require(\"./massShifts.js\"), exports);\n__exportStar(require(\"./util/fetchJSON.js\"), exports);\n/**\n * A class that deals with database of monoisotopic mass and molecular formula\n */\nclass EMDB {\n    constructor() {\n        this.databases = {};\n        this.experimentalSpectrum = undefined;\n    }\n    /**\n     *\n     * @param {*} data\n     * @param {object} [options={}]\n     * @param {boolean} [options.normed=true] Should we normed (sum Y to 1) the experimental spectrum ?\n     * @param {number} [options.threshold=0.00025] Threshold used for peak picking\n     */\n    setExperimentalSpectrum(data, options = {}) {\n        const { normed = true, threshold = 0.00025 } = options;\n        this.experimentalSpectrum = new ms_spectrum_1.Spectrum(data, { threshold });\n        if (normed) {\n            this.experimentalSpectrum.normedY();\n        }\n        return this.experimentalSpectrum;\n    }\n    /**\n     * Add a new database using the KnapSack content\n     * @param {*} options\n     */\n    async loadKnapSack(options = {}) {\n        const { databaseName = 'knapSack', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadKnapSack_js_1.loadKnapSack)();\n    }\n    /**\n     * Add a new database of 12000 commercial products\n     * @param {*} options\n     */\n    async loadCommercials(options = {}) {\n        const { databaseName = 'commercials', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadCommercials_js_1.loadCommercials)();\n    }\n    get(databaseName) {\n        return this.databases[databaseName];\n    }\n    /**\n     * Load the contaminants database from a google sheet document\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='contaminants']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadContaminants(options = {}) {\n        const { databaseName = 'contaminants', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    /**\n     * Load a google sheet containing MF information\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='sheet']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadGoogleSheet(options = {}) {\n        const { databaseName = 'sheet', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    async loadTest() {\n        await this.fromArray(['C1-100'], {\n            databaseName: 'test',\n            ionizations: '+',\n        });\n    }\n    async loadNeutralTest(options = {}) {\n        const { maxC = 100 } = options;\n        await this.fromArray([`C1-${maxC}`], { databaseName: 'test' });\n    }\n    async fromMonoisotopicMass(mass, options = {}) {\n        const { databaseName = 'monoisotopic', append = false } = options;\n        let result = await (0, ms_spectrum_1.fromMonoisotopicMass)(mass, options);\n        replaceOrAppend(this, databaseName, result.mfs, append);\n        return result;\n    }\n    async fromArray(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromArray_js_1.fromArray)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromMolecules(entries, ocl, options = {}) {\n        const { databaseName = 'molecules', append = false } = options;\n        const results = await (0, fromMolecules_js_1.fromMolecules)(entries, ocl, options);\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromRange(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromRange_js_1.fromRange)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromPeptidicSequence(sequence, options = {}) {\n        const { databaseName = 'peptidic', append = false, estimate } = options;\n        const results = await (0, fromPeptidicSequence_js_1.fromPeptidicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    /**\n     *\n     * @param {string} databaseName\n     * @param {object} [options={}]\n     * @param {number} [options.precision=100]\n     * @param {string} [options.ionizations='']\n     * @returns\n     */\n    async appendFragmentsInfo(databaseName, options = {}) {\n        const database = this.databases[databaseName];\n        await (0, appendFragmentsInfo_js_1.appendFragmentsInfo)(this.experimentalSpectrum, database, options);\n        return database;\n    }\n    async fromNucleicSequence(sequence, options = {}) {\n        const { databaseName = 'nucleic', append = false, estimate } = options;\n        const results = await (0, fromNucleicSequence_js_1.fromNucleicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    listDatabases() {\n        return Object.keys(this.databases).toSorted();\n    }\n    getInfo() {\n        return {\n            databases: Object.keys(this.databases)\n                .toSorted()\n                .map((key) => {\n                return { name: key, nbEntries: this.databases[key].length };\n            }),\n        };\n    }\n    search(filter, options = {}) {\n        return (0, search_js_1.search)(this, filter, options);\n    }\n    searchMSEM(filter, options = {}) {\n        return (0, searchMSEM_js_1.searchMSEM)(this, filter, options);\n    }\n    searchSimilarity(options = {}) {\n        return (0, searchSimilarity_js_1.searchSimilarity)(this, options);\n    }\n}\nexports.EMDB = EMDB;\nfunction replaceOrAppend(emdb, databaseName, results, append = false) {\n    if (!emdb.databases[databaseName] || !append) {\n        emdb.databases[databaseName] = results;\n        return;\n    }\n    emdb.databases[databaseName] = emdb.databases[databaseName].concat(results);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessEARanges = preprocessEARanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessEARanges(ranges, targetEA) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            minCount: min, // value defined by the user\n            maxCount: max, // value defined by the user\n            targetEA: targetEA[range.mf],\n            mw: 0, // mw till this level\n            aw: 0, // atomic weight (mass * currentCount)\n            maxRatio: 0, // maximum ratio possible if all next elements are 0\n            currentValue: 0,\n            currentCount: min - 1,\n            currentUnsaturation: 0,\n            initialOrder: i,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.mass = info.mass;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        if (possibility.mf !== info.mf)\n            possibility.isGroup = true;\n    }\n    possibilities = possibilities.filter((r) => r.minCount !== 0 || r.maxCount !== 0);\n    possibilities.sort((a, b) => {\n        return b.targetEA - a.targetEA;\n    });\n    return possibilities;\n}\n//# sourceMappingURL=preprocessEARanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromEA = mfFromEA;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst preprocessEARanges_1 = require(\"./preprocessEARanges\");\n/**\n * Returns possible combinations\n * @param {object} [targetEA]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number} [options.maxElementError=0.003]\n * @param {number} [options.maxTotalError=0.01]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Array<object>}\n */\nfunction mfFromEA(targetEA, options = {}) {\n    const { unsaturation = {}, maxIterations = 1e8, minMW = 0, maxMW = +Infinity, ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], maxElementError = 0.003, maxTotalError = 0.01, } = options;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let results = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    let possibilities = (0, preprocessEARanges_1.preprocessEARanges)(ranges, targetEA, maxElementError);\n    orderMapping = getOrderMapping(possibilities);\n    if (possibilities.length === 0)\n        return { mfs: [] };\n    let currentPosition = 0;\n    let currentAtom;\n    //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n    mfWhile: while (true) {\n        while (currentPosition < possibilities.length && currentPosition >= 0) {\n            let previousAtom = currentPosition === 0 ? { mw: 0 } : possibilities[currentPosition - 1];\n            currentAtom = possibilities[currentPosition];\n            if (currentAtom.currentCount < currentAtom.maxCount) {\n                currentAtom.currentCount++;\n                currentAtom.aw = currentAtom.mass * currentAtom.currentCount;\n                currentAtom.mw = currentAtom.aw + previousAtom.mw;\n                currentAtom.maxRatio = currentAtom.aw / currentAtom.mw;\n                // we should check if we can reach the target\n                if (currentAtom.targetEA &&\n                    currentAtom.aw / currentAtom.mw - currentAtom.targetEA <\n                        -maxElementError) {\n                    // we already don't have enough quantity of this element and it can only become worse\n                    continue;\n                }\n                if (currentPosition < possibilities.length - 1) {\n                    currentPosition++;\n                }\n                else {\n                    break;\n                }\n            }\n            else {\n                currentAtom.currentCount = currentAtom.minCount - 1;\n                currentPosition--;\n            }\n        }\n        if (currentPosition < 0) {\n            break;\n        }\n        if (results.info.numberMFEvaluated++ > maxIterations) {\n            throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n        }\n        if (filterUnsaturation) {\n            let unsaturationValue = 0;\n            for (const possibility of possibilities) {\n                unsaturationValue +=\n                    possibility.unsaturation * possibility.currentCount;\n            }\n            let isOdd = Math.abs(unsaturationValue % 2);\n            if ((unsaturation.onlyInteger && isOdd === 1) ||\n                (unsaturation.onlyNonInteger && isOdd === 0) ||\n                fakeMinUnsaturation > unsaturationValue ||\n                fakeMaxUnsaturation < unsaturationValue) {\n                continue;\n            }\n        }\n        let mw = currentAtom.mw;\n        if (mw < minMW || mw > maxMW)\n            continue;\n        let totalError = 0;\n        for (let i = 0; i < possibilities.length; i++) {\n            const possibility = possibilities[i];\n            let ratio = (possibility.mass * possibility.currentCount) / mw;\n            if (possibility.targetEA !== undefined) {\n                let error = Math.abs(possibility.targetEA - ratio);\n                if (error > maxElementError) {\n                    continue mfWhile;\n                }\n                totalError += error;\n            }\n            possibility.currentValue = ratio;\n        }\n        if (Number.isNaN(totalError) || totalError > maxTotalError)\n            continue;\n        results.mfs.push(getResult(possibilities, totalError, orderMapping));\n        results.info.numberResults++;\n    }\n    results.mfs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return results;\n}\nfunction getResult(possibilities, totalError, orderMapping) {\n    const result = { mf: '', totalError };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                result.mf += `(${possibility.mf})`;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n        }\n        result.ea = possibilities.map((current) => ({\n            mf: current.mf,\n            value: current.currentValue,\n            expected: current.targetEA,\n            error: current.targetEA === undefined\n                ? undefined\n                : Math.abs(current.targetEA - current.currentValue),\n        }));\n    }\n    return result;\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromAtomicRatio = mfFromAtomicRatio;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * @typedef {object} AtomicRatioMF\n * @property {number} em\n * @property {number} mw\n * @property {string} mf\n * @property {Array<MFAtomicComposition>} mfAtomicComposition\n * @property {Array<AtomicRatio>} atomicRatios\n * @property {number} totalError\n */\n/**\n * @typedef {object} MFAtomicComposition\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n * @property {number} experimental\n * @property {number} error\n */\n/**\n * @typedef {object} AtomicRatio\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n */\n/**\n * Returns possible combinations\n * @param {object} [ratios]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-10 H0-10 O0-10 N0-10'] - range of mfs to search\n * @param {number} [options.maxElementError=0.05]\n * @param {number} [options.maxTotalError=0.1]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Promise<AtomicRatioMF[]>}\n */\nasync function mfFromAtomicRatio(ratios, options = {}) {\n    const { unsaturation = {}, minMW = 0, maxMW = +Infinity, ranges = 'C0-10 H0-10 O0-10 N0-10', maxElementError = 0.05, maxTotalError = 0.1, } = options;\n    const elements = Object.keys(ratios);\n    const mfs = await (0, mf_generator_1.generateMFs)([ranges], {\n        limit: 1e7,\n        filter: {\n            minMW,\n            maxMW,\n            unsaturation,\n        },\n    });\n    let sumComposition = 0;\n    for (const element of elements) {\n        sumComposition += ratios[element];\n    }\n    const relativeComposition = {};\n    for (const element of elements) {\n        relativeComposition[element] = ratios[element] / sumComposition;\n    }\n    for (const mf of mfs) {\n        appendInfo(mf, elements);\n    }\n    const filteredMFs = [];\n    mfFor: for (const mf of mfs) {\n        if (mf.nbCompositionAtoms === 0) {\n            continue;\n        }\n        mf.totalError = 0;\n        const atomicRatios = [];\n        for (const element of elements) {\n            const error = mf.atomicRatio[element] - relativeComposition[element];\n            let absError = Math.abs(error);\n            if (absError > maxElementError) {\n                continue mfFor;\n            }\n            mf.totalError += absError;\n            atomicRatios.push({\n                element,\n                experimental: mf.atomicRatio[element],\n                count: mf.atoms[element] || 0,\n                theoretical: relativeComposition[element],\n                error,\n            });\n        }\n        if (mf.totalError > maxTotalError) {\n            continue;\n        }\n        filteredMFs.push({\n            em: mf.em,\n            mw: mf.mw,\n            mf: mf.mf,\n            mfAtomicComposition: getMFAtomicComposition(mf.atoms),\n            atomicRatios,\n            totalError: mf.totalError,\n        });\n    }\n    filteredMFs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return filteredMFs;\n}\nfunction getMFAtomicComposition(atoms) {\n    const nbAtoms = Object.values(atoms).reduce((acc, val) => acc + val, 0);\n    const composition = [];\n    for (const [element, count] of Object.entries(atoms)) {\n        composition.push({\n            element,\n            count,\n            theoretical: count / nbAtoms,\n        });\n    }\n    return composition;\n}\nfunction appendInfo(mf, elements) {\n    const mfInfo = new mf_parser_1.MF(mf.mf).getInfo();\n    let nbCompositionAtoms = 0;\n    for (const element of elements) {\n        nbCompositionAtoms += mfInfo.atoms[element] || 0;\n    }\n    mf.nbCompositionAtoms = nbCompositionAtoms;\n    mf.atomicRatio = {};\n    for (const element of elements) {\n        mf.atomicRatio[element] = (mfInfo.atoms[element] || 0) / nbCompositionAtoms;\n    }\n}\n//# sourceMappingURL=mfFromAtomicRatio.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendAllDBRefs = appendAllDBRefs;\nfunction appendAllDBRefs(object, allDBRefs) {\n    if (Array.isArray(object)) {\n        for (let item of object) {\n            appendAllDBRefs(item, allDBRefs);\n        }\n    }\n    else if (typeof object === 'object' && object !== null) {\n        if (object.$ref && object.$id) {\n            allDBRefs.push(object);\n        }\n        for (let key of Object.keys(object)) {\n            appendAllDBRefs(object[key], allDBRefs);\n        }\n    }\n}\n//# sourceMappingURL=appendAllDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendURLs = appendURLs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nasync function appendURLs(object, options = {}) {\n    const { collections, force = false } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.url);\n    }\n    const unknowns = {};\n    for (const entry of allDBRefs) {\n        switch (entry.$ref) {\n            case 'compounds':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/compound/${entry.$id}`;\n                break;\n            case 'pubmeds':\n                entry.url = `https://pubmed.ncbi.nlm.nih.gov/${entry.$id}`;\n                break;\n            case 'gnps':\n                entry.url = `https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=${entry.$id}`;\n                break;\n            case 'patents':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/patent/${entry.$id}`;\n                break;\n            case 'bioassays':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/bioassay/${entry.$id.replace(/.*_/, '')}`;\n                break;\n            case 'npasses':\n                entry.url = `https://bidd.group/NPASS/compound.php?compoundID=${entry.$id}`;\n                break;\n            case 'cmaups':\n                entry.url = `https://bidd.group/CMAUP/ingredient.php?ingredient=${entry.$id}`;\n                break;\n            case 'coconuts':\n                entry.url = `https://coconut.naturalproducts.net/compound/coconut_id/${entry.$id}`;\n                break;\n            case 'lotuses':\n                entry.url = `https://lotus.naturalproducts.net/compound/lotus_id/${entry.$id}`;\n                break;\n            case 'npAtlases':\n                entry.url = `https://www.npatlas.org/explore/compounds/${entry.$id}`;\n                break;\n            case 'massBank':\n                entry.url = `https://massbank.eu/MassBank/RecordDisplay?id=${entry.$id}`;\n                break;\n            default:\n                unknowns[entry.$ref] = true;\n                break;\n        }\n    }\n    if (Object.keys(unknowns).length > 0) {\n        // eslint-disable-next-line no-console\n        console.error('Unknown url to original data for the following collections:', unknowns);\n    }\n}\n//# sourceMappingURL=appendURLs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url, data) {\n    if (data) {\n        try {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n        catch {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n    }\n    else {\n        const result = await fetch(url);\n        return result.json();\n    }\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.postFetchJSON = postFetchJSON;\nasync function postFetchJSON(url, data = {}) {\n    const formData = new FormData();\n    for (const name in data) {\n        formData.append(name, data[name]);\n    }\n    const result = await fetch(url, {\n        method: 'POST',\n        body: formData,\n    });\n    return result.json();\n}\n//# sourceMappingURL=postFetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.includeDBRefs = includeDBRefs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nconst postFetchJSON_js_1 = require(\"./postFetchJSON.js\");\n/**\n * Load the DBrefs and create a new property `data` for each DBRef\n * @param {any} object\n * @param {object} [options={}]\n * @param {string[]} [options.collections] - List of collections to include\n * @param {string[]} [options.excludedCollections] - List of collections to include\n * @param {boolean} [options.force=false] - Force the inclusion of the data even if it is already present\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function includeDBRefs(object, options = {}) {\n    const { collections, excludedCollections, force = false, baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (excludedCollections) {\n        allDBRefs = allDBRefs.filter((dbRef) => !excludedCollections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.data);\n    }\n    const groups = groupsByCollection(allDBRefs);\n    const promises = [];\n    for (const [collection, entries] of Object.entries(groups)) {\n        promises.push(addDataForOneCollection(collection, baseURL, entries));\n    }\n    await Promise.allSettled(promises);\n}\nasync function addDataForOneCollection(collection, baseURL, entries) {\n    const url = new URL(`${collection}/v1/ids`, baseURL).toString();\n    const searchParams = {\n        ids: entries.map((entry) => entry.$id).join(','),\n    };\n    const data = {};\n    const result = await (0, postFetchJSON_js_1.postFetchJSON)(url, searchParams);\n    if (!result.data) {\n        throw new Error(`No data for ${url}`);\n    }\n    for (const entry of result.data) {\n        data[entry._id] = entry.data;\n    }\n    for (let datum of entries) {\n        datum.data = data[datum.$id];\n    }\n}\nfunction groupsByCollection(allDBRefs) {\n    const groups = {};\n    for (let dbRef of allDBRefs) {\n        if (!groups[dbRef.$ref])\n            groups[dbRef.$ref] = [];\n        groups[dbRef.$ref].push(dbRef);\n    }\n    return groups;\n}\n//# sourceMappingURL=includeDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeActivities = normalizeActivities;\n/**\n * @description This function normalizes the activities of an entry of ActivesOrNaturals collection.\n * @param {Object} activeOrNatural - an entry of ActivesOrNaturals collection\n * @returns - ActiveOrNatural entry with normalized activities\n */\nfunction normalizeActivities(activeOrNatural) {\n    activeOrNatural = { ...activeOrNatural };\n    let activities = [];\n    for (let activity of activeOrNatural.data.activities) {\n        if (activity?.data?.activities !== undefined) {\n            for (let activityEntry of activity.data.activities) {\n                let normalizedActivity = {\n                    $ref: activity.$ref,\n                    $id: activity.$id,\n                    data: {\n                        ...activityEntry,\n                        ocl: activity.data.ocl,\n                    },\n                    url: activity.url,\n                };\n                if (activityEntry?.targetTaxonomies !== undefined) {\n                    normalizedActivity.data.targetTaxonomies = [\n                        activityEntry.targetTaxonomies,\n                    ];\n                }\n                activities.push(normalizedActivity);\n            }\n        }\n        else {\n            activities.push(activity);\n        }\n    }\n    activeOrNatural.data.activities = activities;\n    return activeOrNatural;\n}\n//# sourceMappingURL=normalizeActivities.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activeOrNaturalDetails = activeOrNaturalDetails;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst normalizeActivities_js_1 = require(\"./utils/normalizeActivities.js\");\n/**\n * Search for a specific natural or active compound using its ID\n * @param {object} [options={}]\n * @param {string} [options.fields='_id,data'] - List of fields to retrieve\n * @param {string} [options.route='activesOrNaturals/v1/id'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activeOrNaturalDetails(id, options = {}) {\n    const { route = 'activesOrNaturals/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', fields = '_id,data', } = options;\n    const activeOrNatural = await fetchActiveOrNatural(id, {\n        url: new URL(route, baseURL).toString(),\n        fields,\n    });\n    await (0, includeDBRefs_js_1.includeDBRefs)(activeOrNatural, { baseURL });\n    ensureArray(activeOrNatural);\n    (0, appendURLs_js_1.appendURLs)(activeOrNatural);\n    (0, normalizeActivities_js_1.normalizeActivities)(activeOrNatural);\n    return activeOrNatural;\n}\nfunction ensureArray(activeOrNatural) {\n    if (!activeOrNatural.data.activities) {\n        activeOrNatural.data.activities = [];\n    }\n    if (!activeOrNatural.data.pubmeds) {\n        activeOrNatural.data.pubmeds = [];\n    }\n    if (!activeOrNatural.data.patents) {\n        activeOrNatural.data.patents = [];\n    }\n    if (!activeOrNatural.data.taxonomies) {\n        activeOrNatural.data.taxonomies = [];\n    }\n}\nasync function fetchActiveOrNatural(id, options) {\n    const { fields, url } = options;\n    const searchParams = { id };\n    if (fields) {\n        searchParams.fields = fields;\n    }\n    const results = await (0, fetchJSON_js_1.fetchJSON)(url, searchParams);\n    return results.data;\n}\n//# sourceMappingURL=activeOrNaturalDetails.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseMasses = parseMasses;\nfunction parseMasses(masses) {\n    if (!masses)\n        return [];\n    if (Array.isArray(masses))\n        return masses;\n    if (typeof masses === 'number') {\n        return [masses];\n    }\n    if (typeof masses === 'string') {\n        return masses\n            .split(/[\\t\\n\\r ,;]+/)\n            .filter(Boolean)\n            .map(Number);\n    }\n    throw new Error('Cannot parse masses');\n}\n//# sourceMappingURL=parseMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAllowedEMs = getAllowedEMs;\nconst mf_finder_1 = require(\"mf-finder\");\nasync function getAllowedEMs(options) {\n    const { ranges, masses, precision, ionizations } = options;\n    if (!ranges)\n        return;\n    const allowedEMs = [];\n    for (let mass of masses) {\n        const { mfs } = await (0, mf_finder_1.findMFs)(mass, {\n            ionizations,\n            precision,\n            ranges,\n            limit: 100000,\n        });\n        for (const mf of mfs) {\n            allowedEMs.push(mf.em);\n        }\n    }\n    return Float64Array.from(allowedEMs).toSorted();\n}\n//# sourceMappingURL=getAllowedEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchWithIonizations = searchWithIonizations;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./fetchJSON.js\");\nconst getAllowedEMs_js_1 = require(\"./getAllowedEMs.js\");\nconst parseMasses_js_1 = require(\"./parseMasses.js\");\nasync function searchWithIonizations(options) {\n    const { realURL, fields, precision = 100, limit = 1000, searchParams = {}, ranges, } = options;\n    searchParams.precision = String(precision);\n    searchParams.limit = String(limit);\n    if (fields)\n        searchParams.fields = fields;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    // if we have ranges we need to filter the allowed EMs\n    const allowedEMs = await (0, getAllowedEMs_js_1.getAllowedEMs)({\n        ranges,\n        masses,\n        precision,\n        ionizations,\n    });\n    const promises = [];\n    for (let ionization of ionizations) {\n        for (let mass of masses) {\n            if (mass !== 0) {\n                const realMass = mass * Math.abs(ionization.charge || 1) -\n                    ionization.em +\n                    chemical_elements_1.ELECTRON_MASS * ionization.charge;\n                searchParams.em = String(realMass);\n            }\n            promises.push((0, fetchJSON_js_1.fetchJSON)(realURL, searchParams));\n        }\n    }\n    const results = await Promise.all(promises);\n    const entries = [];\n    let counter = 0;\n    for (const result of results) {\n        const ionization = ionizations[Math.floor(counter / masses.length)];\n        const targetMass = masses[counter % masses.length];\n        counter++;\n        for (const entry of result.data) {\n            if (allowedEMs &&\n                !allowedEMs.some((em) => Math.abs(em - entry.data.em) < 0.0000001)) {\n                continue;\n            }\n            try {\n                entry.mfInfo = new mf_parser_1.MF(entry.data?.mf || entry._id).getInfo({\n                    emFieldName: 'em',\n                    msemFieldName: 'msem',\n                });\n                entry.ionization = ionization;\n                entry.ms = (0, mf_utilities_1.getMsInfo)(entry.mfInfo, {\n                    targetMass,\n                    ionization,\n                }).ms;\n                entries.push(entry);\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.warn(`${error}`);\n            }\n        }\n    }\n    if (entries.length > limit) {\n        entries.length = limit;\n    }\n    return entries;\n}\n//# sourceMappingURL=searchWithIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturals = activesOrNaturals;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Search for natural or active compounds using various criteria\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.noStereoTautomerID=''] - ID of the compound to search from the results\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {string} [options.mf=''] - Search by molecular formula\n * @param {number} [options.precision=1000] - Precision of the monoisotopic mass in ppm\n * @param {string} [options.fields] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from the compound title\n * @param {string} [options.minNbMassSpectra] - Minimal number of mass spectra\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - Route to this specific webservice\n * @param {string[]|undefined} [options.includes] - Array of DBref collections to include\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - Base URL of the webservice\n */\nasync function activesOrNaturals(options = {}) {\n    const { route = 'activesOrNaturals/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', includes, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = prepareSearchParams(options);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    if (includes) {\n        await (0, includeDBRefs_js_1.includeDBRefs)(entries, { baseURL, collections: includes });\n    }\n    (0, appendURLs_js_1.appendURLs)(entries);\n    entries.sort((a, b) => {\n        if (a.data.nbMassSpectra > b.data.nbMassSpectra)\n            return -1;\n        if (a.data.nbMassSpectra < b.data.nbMassSpectra)\n            return 1;\n        if (a.data.nbPubmeds > b.data.nbPubmeds)\n            return -1;\n        if (a.data.nbPubmeds < b.data.nbPubmeds)\n            return 1;\n        if (a.data.nbPatents > b.data.nbPatents)\n            return -1;\n        if (a.data.nbPatents < b.data.nbPatents)\n            return 1;\n        return 0;\n    });\n    return entries;\n}\nfunction prepareSearchParams(options) {\n    const { noStereoTautomerID, kwTaxonomies, kwActiveAgainst, kwBioassays, kwMeshTerms, kwTitles, mf, minNbMassSpectra, } = options;\n    const searchParams = {};\n    if (noStereoTautomerID) {\n        searchParams.noStereoTautomerID = noStereoTautomerID;\n    }\n    if (kwTaxonomies) {\n        searchParams.kwTaxonomies = kwTaxonomies;\n    }\n    if (kwActiveAgainst) {\n        searchParams.kwActiveAgainst = kwActiveAgainst;\n    }\n    if (kwBioassays) {\n        searchParams.kwBioassays = kwBioassays;\n    }\n    if (kwMeshTerms) {\n        searchParams.kwMeshTerms = kwMeshTerms;\n    }\n    if (kwTitles) {\n        searchParams.kwTitles = kwTitles;\n    }\n    if (mf) {\n        searchParams.mf = mf;\n    }\n    if (minNbMassSpectra) {\n        searchParams.minNbMassSpectra = minNbMassSpectra;\n    }\n    return searchParams;\n}\n//# sourceMappingURL=activesOrNaturals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturalsByMF = activesOrNaturalsByMF;\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\n/**\n * Search for natural or active compounds and group them by molecular formula\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.fields='data.noStereoOcl,data.em,data.mf'] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from compound title\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activesOrNaturalsByMF(options = {}) {\n    const fields = 'data.noStereoOcl,data.mf,data.em,data.nbPatents,data.nbPubmeds,data.nbActivities,data.bioactive,data.nbMassSpectra,data.naturalProduct'.split(',');\n    if (options.fields)\n        fields.push(...options.fields.split(/[ ,]+/));\n    const entries = await (0, activesOrNaturals_js_1.activesOrNaturals)({\n        ...options,\n        fields: fields.join(','),\n    });\n    // we will now group the data per mf\n    const grouped = {};\n    for (const entry of entries) {\n        if (!grouped[entry.data.mf]) {\n            grouped[entry.data.mf] = {\n                mfInfo: entry.mfInfo,\n                ms: entry.ms,\n                ionization: entry.ionization,\n                nbNaturals: 0,\n                nbBioactives: 0,\n                nbPatents: 0,\n                nbPubmeds: 0,\n                nbMassSpectra: 0,\n            };\n        }\n        const currentGroup = grouped[entry.data.mf];\n        if (entry.data.naturalProduct)\n            currentGroup.nbNaturals++;\n        if (entry.data.bioactive)\n            currentGroup.nbBioactives++;\n        if (entry.data.nbMassSpectra) {\n            currentGroup.nbMassSpectra += entry.data.nbMassSpectra;\n        }\n        if (entry.data.nbPubmeds)\n            currentGroup.nbPubmeds += entry.data.nbPubmeds;\n        if (entry.data.nbPatents)\n            currentGroup.nbPatents += entry.data.nbPatents;\n    }\n    const groupedArray = Object.keys(grouped).map((key) => grouped[key]);\n    // because we can combine many ionizations we should resort the data\n    groupedArray.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return groupedArray;\n}\n//# sourceMappingURL=activesOrNaturalsByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compoundsFromMF = compoundsFromMF;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst postFetchJSON_js_1 = require(\"./utils/postFetchJSON.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {string} mf - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromMF'] - URL of the webservice\n * @param {string} [options.titleCompoundsURL='titleCompounds/v1/ids'] - URL of the webservice\n * @param {number} [options.limit=50000] - Maximal number of entries to return\n */\nasync function compoundsFromMF(mf, options = {}) {\n    const { route = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', limit = 50000, fields = 'data.ocl.idCode,data.ocl.index,data.iupac', } = options;\n    const searchParams = {\n        limit,\n        fields,\n        mf,\n    };\n    const realURL = new URL(route, baseURL).toString();\n    const { data } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const ids = data.map((datum) => datum._id);\n    const titles = await getTitles(ids, options);\n    for (const datum of data) {\n        if (titles[datum._id])\n            datum.data.title = titles[datum._id];\n    }\n    data.sort((a, b) => (a.data.title?.length || Number.MAX_SAFE_INTEGER) -\n        (b.data.title?.length || Number.MAX_SAFE_INTEGER));\n    return data;\n}\nasync function getTitles(ids, options) {\n    let { titleCompoundsURL = 'titleCompounds/v1/ids', baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    if (process.env.NODE_ENV === 'test') {\n        baseURL = 'https://octochemdb.cheminfo.org/';\n    }\n    const titlesURL = new URL(titleCompoundsURL, baseURL).toString();\n    const { data: titlesArray } = await (0, postFetchJSON_js_1.postFetchJSON)(titlesURL, { ids });\n    const titles = {};\n    for (const entry of titlesArray) {\n        if (entry.data.title.match(/CID /))\n            continue;\n        titles[entry._id] = entry.data.title;\n    }\n    return titles;\n}\n//# sourceMappingURL=compoundsFromMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMasses = searchMasses;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\n/**\n *\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed fragment masses\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma separated list of allowed modifications\n * @param {string} [options.route='massBank/v1/search'] - Route to use\n * @param {string} [options.link='https://massbank.eu/MassBank/RecordDisplay?id='] - Link to the database source\n */\nasync function searchMasses(options = {}) {\n    const { route = 'massBank/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, mf = '', link = '', } = options;\n    if (route === '') {\n        throw new Error('route is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses);\n    const modifications = (0, mf_utilities_1.preprocessIonizations)(options.modifications);\n    const allResults = [];\n    for (let modification of modifications) {\n        const massShift = modification.em;\n        const searchParams = {\n            masses: masses.map((mass) => mass + massShift).join(','),\n            precision,\n            limit,\n            mf,\n        };\n        const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n        for (const result of results) {\n            const modifiedResult = {\n                ...result,\n                modification,\n            };\n            if (link !== '') {\n                modifiedResult.url = link + result._id;\n            }\n            allResults.push(modifiedResult);\n        }\n    }\n    return allResults;\n}\n//# sourceMappingURL=searchMasses.js.map","\"use strict\";\n/**\n * This method will retrieve similar mass spectra\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma\n * @param {('massBank'|'gnps'|'inSilicoFragments')[]} [options.databases=['massBank','gnps']] - List of databases to search for mass spectra\n * @param {object} [options.routes] - Object that contains the routes to use for each database\n * @param {boolean} [options.uniqueMolecules=true] - If true, only one molecule per entry is returned\n * @param {object} [options.similarity={}]\n * @param {number} [options.similarity.nbPeaks=5] - Number of peaks to use for the similarity\n * @param {number} [options.similarity.massPower=1] - Power to use for the mass\n * @param {number} [options.similarity.minSimilarity=0.2] - Minimal similarity to return\n * @param {number} [options.similarity.intensityPower=0.6] - Power to use for the intensity\n * @param {number} [options.similarity.minNbCommonPeaks=0] - Minimal number of common peaks\n * @param {{x:number[],y:number[]}} [options.similarity.experimental=[]] - Experimental mass spectra to compare to\n *\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massSpectra = massSpectra;\nexports.uniqueMol = uniqueMol;\nexports.appendAndFilterSimilarity = appendAndFilterSimilarity;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nconst defaultRoutes = [\n    {\n        name: 'massBank',\n        url: 'https://octochemdb.cheminfo.org/massBank/v1/search',\n        link: 'https://massbank.eu/MassBank/RecordDisplay?id=',\n    },\n    {\n        name: 'gnps',\n        url: 'https://octochemdb.cheminfo.org/gnps/v1/search',\n        link: 'https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=',\n    },\n    {\n        name: 'inSilicoFragments',\n        url: 'https://octochemdb.cheminfo.org/inSilicoFragments/v1/search',\n    },\n];\nasync function massSpectra(options = {}) {\n    const { uniqueMolecules = true, databases = ['massBank', 'gnps'], routes = defaultRoutes, } = options;\n    const promises = [];\n    for (const route of routes) {\n        if (databases && databases.includes(route.name)) {\n            promises.push((0, searchMasses_js_1.searchMasses)({\n                ...options,\n                route: route.url,\n                link: route.link,\n            }).then((entries) => entries.map((entry) => ({ ...entry, database: route.name }))));\n        }\n    }\n    const allResults = await Promise.all(promises);\n    let results = allResults.flat();\n    results = appendAndFilterSimilarity(results, options);\n    if (uniqueMolecules) {\n        results = uniqueMol(results);\n    }\n    return results;\n}\nfunction uniqueMol(results) {\n    const unique = {};\n    for (const result of results) {\n        const ocl = result.data?.ocl;\n        // massBank / GNPS entries carry a real structure `idCode`; in-silico\n        // fragment entries only carry the no-stereo-tautomer id, so fall back to it\n        // (otherwise every in-silico result is dropped here).\n        const key = ocl?.idCode || ocl?.noStereoTautomerID;\n        if (!key)\n            continue;\n        if (!unique[key]) {\n            unique[key] = result;\n        }\n    }\n    return Object.values(unique);\n}\nfunction appendAndFilterSimilarity(results, options = {}) {\n    const { similarity } = options;\n    if (!similarity || !similarity.experimental)\n        return results;\n    const { experimental, nbPeaks = 5, massPower = 1, minSimilarity = 0.2, intensityPower = 0.6, minNbCommonPeaks = 0, } = similarity;\n    const precision = Number(options.precision) / 1e6;\n    const comparator = new ms_spectrum_1.MSComparator({\n        nbPeaks,\n        massPower,\n        intensityPower,\n        delta: (mass) => mass * precision,\n        minNbCommonPeaks,\n    });\n    const scored = [];\n    for (const result of results) {\n        const data = result.data?.spectrum?.data;\n        if (!data?.x?.length)\n            continue;\n        // In-silico fragment spectra list predicted m/z with no intensity (`y`):\n        // score them by mass overlap with `getSimilarityToMasses`, which borrows the\n        // experimental peak's intensity for each matched mass. `getSimilarity` would\n        // call `y.slice()` on the missing intensity and throw. Real reference\n        // spectra (massBank / GNPS) carry intensities, so use the full weighted\n        // cosine. A fresh `{ x, y }` gives the comparator a distinct cache key.\n        result.similarity = data.y\n            ? comparator.getSimilarity(experimental, { x: data.x, y: data.y })\n            : comparator.getSimilarityToMasses(experimental, data.x);\n        if (result.similarity.cosine >= minSimilarity)\n            scored.push(result);\n    }\n    scored.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return scored;\n}\n//# sourceMappingURL=massSpectra.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsFromEMs = mfsFromEMs;\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {number|string|number[]} masses - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ranges=''] - Range of allowed molecular formula\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.minCount=5] - Minimal number of molecules having a specific MF\n * @param {number} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromEM'] - URL of the webservice\n * @param {string} [options.compoundsURL='mfs/v1/fromMF'] - URL to retrieve corresponding compounds\n */\nasync function mfsFromEMs(masses, options = {}) {\n    const { route = 'mfs/v1/fromEM', compoundsURL = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', minCount = 5, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        minCount: String(minCount),\n    };\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    const realCompoundsURL = new URL(compoundsURL, baseURL).toString();\n    const searchParamsCompounds = new URLSearchParams();\n    for (const entry of entries) {\n        searchParamsCompounds.set('mf', String(entry._id));\n        entry.compoundsURL = `${realCompoundsURL}?${searchParamsCompounds.toString()}`;\n    }\n    // because we can combine many ionizations we should resort the data\n    entries.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return entries;\n}\n//# sourceMappingURL=mfsFromEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pubmedCompounds = pubmedCompounds;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\n/**\n * Retrieve the compounds from a pubmedID\n * @param {string} pubmedID\n * @param {object} [options={}]\n * @param {string} [options.route='pubmeds/v1/id'] - relative URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @returns\n */\nasync function pubmedCompounds(pubmedID, options = {}) {\n    const { route = 'pubmeds/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', limit = 1000, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        id: pubmedID,\n        fields: 'data.compounds',\n        limit,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    await (0, includeDBRefs_js_1.includeDBRefs)(results, { baseURL });\n    return results.data.compounds;\n}\n//# sourceMappingURL=pubmedCompounds.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMF = searchInSilicoSpectraByMF;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {string} mf - Molecular formula of the non ionized molecule\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n */\nasync function searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, massPower = 3, intensityPower = 0.6, } = options;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!mf) {\n        throw new Error('mf is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        limit,\n        mf,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMasses = searchInSilicoSpectraByMasses;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {number|string|number[]} [masses] - List of experimental monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ionizations=\"H+\"] - Comma separated list of allowed ionizations\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n * @param {object} [options.technique={}] - Technique used to generate the spectrum\n * @param {string} [options.technique.mode=\"positive\"] - Mode of the acquisition\n * @param {string} [options.technique.ionization=\"esi\"] - Ionization of the acquisition\n */\nasync function searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 10000, massPower = 3, intensityPower = 0.6, ionizations = 'H+', technique = {}, } = options;\n    const { mode = 'positive', ionization = 'esi' } = technique;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!masses) {\n        throw new Error('masses is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    let results = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        precision,\n        realURL,\n        masses,\n        limit,\n        ionizations,\n        searchParams: {\n            mode,\n            ionization,\n        },\n    });\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    // filter MDMA\n    // results = results.filter(result => result.data.ocl.idCode === 'dg~D@MBdie]v\\\\kahHBjh@@')\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OctoChemDB = void 0;\nconst activeOrNaturalDetails_js_1 = require(\"./activeOrNaturalDetails.js\");\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\nconst activesOrNaturalsByMF_js_1 = require(\"./activesOrNaturalsByMF.js\");\nconst compoundsFromMF_js_1 = require(\"./compoundsFromMF.js\");\nconst massSpectra_js_1 = require(\"./massSpectra.js\");\nconst mfsFromEMs_js_1 = require(\"./mfsFromEMs.js\");\nconst pubmedCompounds_js_1 = require(\"./pubmedCompounds.js\");\nconst searchInSilicoSpectraByMF_js_1 = require(\"./searchInSilicoSpectraByMF.js\");\nconst searchInSilicoSpectraByMasses_js_1 = require(\"./searchInSilicoSpectraByMasses.js\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nclass OctoChemDB {\n    /**\n     *\n     * @param {*} options\n     */\n    constructor(options = {}) {\n        this.baseURL = options.baseURL ?? 'https://octochemdb.cheminfo.org/';\n    }\n    async mfsFromEMs(masses, options = {}) {\n        return (0, mfsFromEMs_js_1.mfsFromEMs)(masses, { baseURL: this.baseURL, ...options });\n    }\n    async compoundsFromMF(mf, options = {}) {\n        return (0, compoundsFromMF_js_1.compoundsFromMF)(mf, { baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturals(options = {}) {\n        return (0, activesOrNaturals_js_1.activesOrNaturals)({ baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturalsByMF(options = {}) {\n        return (0, activesOrNaturalsByMF_js_1.activesOrNaturalsByMF)({ baseURL: this.baseURL, ...options });\n    }\n    async activeOrNaturalDetails(id, options = {}) {\n        return (0, activeOrNaturalDetails_js_1.activeOrNaturalDetails)(id, { baseURL: this.baseURL, ...options });\n    }\n    async searchMasses(options = {}) {\n        return (0, searchMasses_js_1.searchMasses)({ baseURL: this.baseURL, ...options });\n    }\n    async massSpectra(options = {}) {\n        return (0, massSpectra_js_1.massSpectra)({ baseURL: this.baseURL, ...options });\n    }\n    async searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n        return (0, searchInSilicoSpectraByMF_js_1.searchInSilicoSpectraByMF)(spectrum, mf, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n        return (0, searchInSilicoSpectraByMasses_js_1.searchInSilicoSpectraByMasses)(spectrum, masses, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async pubmedCompounds(pubmedID, options = {}) {\n        return (0, pubmedCompounds_js_1.pubmedCompounds)(pubmedID, { baseURL: this.baseURL, ...options });\n    }\n}\nexports.OctoChemDB = OctoChemDB;\n//# sourceMappingURL=OctoChemDB.js.map","export const STEMMERS = {\n    arabic: 'ar',\n    armenian: 'am',\n    bulgarian: 'bg',\n    czech: 'cz',\n    danish: 'dk',\n    dutch: 'nl',\n    english: 'en',\n    finnish: 'fi',\n    french: 'fr',\n    german: 'de',\n    greek: 'gr',\n    hungarian: 'hu',\n    indian: 'in',\n    indonesian: 'id',\n    irish: 'ie',\n    italian: 'it',\n    lithuanian: 'lt',\n    nepali: 'np',\n    norwegian: 'no',\n    portuguese: 'pt',\n    romanian: 'ro',\n    russian: 'ru',\n    serbian: 'rs',\n    slovenian: 'ru',\n    spanish: 'es',\n    swedish: 'se',\n    tamil: 'ta',\n    turkish: 'tr',\n    ukrainian: 'uk',\n    sanskrit: 'sk'\n};\nexport const SPLITTERS = {\n    dutch: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    english: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    french: /[^a-z0-9äâàéèëêïîöôùüûœç-]+/gim,\n    italian: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    norwegian: /[^a-z0-9_æøåÆØÅäÄöÖüÜ]+/gim,\n    portuguese: /[^a-z0-9à-úÀ-Ú]/gim,\n    russian: /[^a-z0-9а-яА-ЯёЁ]+/gim,\n    spanish: /[^a-z0-9A-Zá-úÁ-ÚñÑüÜ]+/gim,\n    swedish: /[^a-z0-9_åÅäÄöÖüÜ-]+/gim,\n    german: /[^a-z0-9A-ZäöüÄÖÜß]+/gim,\n    finnish: /[^a-z0-9äöÄÖ]+/gim,\n    danish: /[^a-z0-9æøåÆØÅ]+/gim,\n    hungarian: /[^a-z0-9áéíóöőúüűÁÉÍÓÖŐÚÜŰ]+/gim,\n    romanian: /[^a-z0-9ăâîșțĂÂÎȘȚ]+/gim,\n    serbian: /[^a-z0-9čćžšđČĆŽŠĐ]+/gim,\n    turkish: /[^a-z0-9çÇğĞıİöÖşŞüÜ]+/gim,\n    lithuanian: /[^a-z0-9ąčęėįšųūžĄČĘĖĮŠŲŪŽ]+/gim,\n    arabic: /[^a-z0-9أ-ي]+/gim,\n    nepali: /[^a-z0-9अ-ह]+/gim,\n    irish: /[^a-z0-9áéíóúÁÉÍÓÚ]+/gim,\n    indian: /[^a-z0-9अ-ह]+/gim,\n    armenian: /[^a-z0-9ա-ֆ]+/gim,\n    greek: /[^a-z0-9α-ωά-ώ]+/gim,\n    indonesian: /[^a-z0-9]+/gim,\n    ukrainian: /[^a-z0-9а-яА-ЯіїєІЇЄ]+/gim,\n    slovenian: /[^a-z0-9čžšČŽŠ]+/gim,\n    bulgarian: /[^a-z0-9а-яА-Я]+/gim,\n    tamil: /[^a-z0-9அ-ஹ]+/gim,\n    sanskrit: /[^a-z0-9A-Zāīūṛḷṃṁḥśṣṭḍṇṅñḻḹṝ]+/gim,\n    czech: /[^A-Z0-9a-zěščřžýáíéúůóťďĚŠČŘŽÝÁÍÉÓÚŮŤĎ-]+/gim\n};\nexport const SUPPORTED_LANGUAGES = Object.keys(STEMMERS);\nexport function getLocale(language) {\n    return language !== undefined && SUPPORTED_LANGUAGES.includes(language) ? STEMMERS[language] : undefined;\n}\n//# sourceMappingURL=languages.js.map","import { createError } from './errors.js';\nconst baseId = Date.now().toString().slice(5);\nlet lastId = 0;\nconst k = 1024;\nconst nano = BigInt(1e3);\nconst milli = BigInt(1e6);\nconst second = BigInt(1e9);\nexport const isServer = typeof window === 'undefined';\n/**\n * This value can be increased up to 100_000\n * But i don't know if this value change from nodejs to nodejs\n * So I will keep a safer value here.\n */\nexport const MAX_ARGUMENT_FOR_STACK = 65535;\n/**\n * This method is needed to used because of issues like: https://github.com/oramasearch/orama/issues/301\n * that issue is caused because the array that is pushed is huge (>100k)\n *\n * @example\n * ```ts\n * safeArrayPush(myArray, [1, 2])\n * ```\n */\nexport function safeArrayPush(arr, newArr) {\n    if (newArr.length < MAX_ARGUMENT_FOR_STACK) {\n        Array.prototype.push.apply(arr, newArr);\n    }\n    else {\n        const newArrLength = newArr.length;\n        for (let i = 0; i < newArrLength; i += MAX_ARGUMENT_FOR_STACK) {\n            Array.prototype.push.apply(arr, newArr.slice(i, i + MAX_ARGUMENT_FOR_STACK));\n        }\n    }\n}\nexport function sprintf(template, ...args) {\n    return template.replace(/%(?:(?<position>\\d+)\\$)?(?<width>-?\\d*\\.?\\d*)(?<type>[dfs])/g, function (...replaceArgs) {\n        const groups = replaceArgs[replaceArgs.length - 1];\n        const { width: rawWidth, type, position } = groups;\n        const replacement = position ? args[Number.parseInt(position) - 1] : args.shift();\n        const width = rawWidth === '' ? 0 : Number.parseInt(rawWidth);\n        switch (type) {\n            case 'd':\n                return replacement.toString().padStart(width, '0');\n            case 'f': {\n                let value = replacement;\n                const [padding, precision] = rawWidth.split('.').map((w) => Number.parseFloat(w));\n                if (typeof precision === 'number' && precision >= 0) {\n                    value = value.toFixed(precision);\n                }\n                return typeof padding === 'number' && padding >= 0 ? value.toString().padStart(width, '0') : value.toString();\n            }\n            case 's':\n                return width < 0\n                    ? replacement.toString().padEnd(-width, ' ')\n                    : replacement.toString().padStart(width, ' ');\n            default:\n                return replacement;\n        }\n    });\n}\nexport function formatBytes(bytes, decimals = 2) {\n    if (bytes === 0) {\n        return '0 Bytes';\n    }\n    const dm = decimals < 0 ? 0 : decimals;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\nexport function isInsideWebWorker() {\n    // @ts-expect-error - WebWorker global scope\n    return typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n}\nexport function isInsideNode() {\n    return typeof process !== 'undefined' && process.release && process.release.name === 'node';\n}\nexport function getNanosecondTimeViaPerformance() {\n    return BigInt(Math.floor(performance.now() * 1e6));\n}\nexport function formatNanoseconds(value) {\n    if (typeof value === 'number') {\n        value = BigInt(value);\n    }\n    if (value < nano) {\n        return `${value}ns`;\n    }\n    else if (value < milli) {\n        return `${value / nano}μs`;\n    }\n    else if (value < second) {\n        return `${value / milli}ms`;\n    }\n    return `${value / second}s`;\n}\nexport function getNanosecondsTime() {\n    if (isInsideWebWorker()) {\n        return getNanosecondTimeViaPerformance();\n    }\n    if (isInsideNode()) {\n        return process.hrtime.bigint();\n    }\n    if (typeof process !== 'undefined' && typeof process?.hrtime?.bigint === 'function') {\n        return process.hrtime.bigint();\n    }\n    if (typeof performance !== 'undefined') {\n        return getNanosecondTimeViaPerformance();\n    }\n    // @todo: fallback to V8 native method to get microtime\n    return BigInt(0);\n}\nexport function uniqueId() {\n    return `${baseId}-${lastId++}`;\n}\nexport function getOwnProperty(object, property) {\n    // Checks if `hasOwn` method is defined avoiding errors with older Node.js versions\n    if (Object.hasOwn === undefined) {\n        return Object.prototype.hasOwnProperty.call(object, property) ? object[property] : undefined;\n    }\n    return Object.hasOwn(object, property) ? object[property] : undefined;\n}\nexport function getTokenFrequency(token, tokens) {\n    let count = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            count++;\n        }\n    }\n    return count;\n}\nexport function insertSortedValue(arr, el, compareFn = sortTokenScorePredicate) {\n    let low = 0;\n    let high = arr.length;\n    let mid;\n    while (low < high) {\n        mid = (low + high) >>> 1;\n        if (compareFn(el, arr[mid]) < 0) {\n            high = mid;\n        }\n        else {\n            low = mid + 1;\n        }\n    }\n    arr.splice(low, 0, el);\n    return arr;\n}\nexport function sortTokenScorePredicate(a, b) {\n    if (b[1] === a[1]) {\n        return a[0] - b[0];\n    }\n    return b[1] - a[1];\n}\n// Intersection function taken from https://github.com/lovasoa/fast_array_intersect.\n// MIT Licensed at the time of writing.\nexport function intersect(arrays) {\n    if (arrays.length === 0) {\n        return [];\n    }\n    else if (arrays.length === 1) {\n        return arrays[0];\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        if (arrays[i].length < arrays[0].length) {\n            const tmp = arrays[0];\n            arrays[0] = arrays[i];\n            arrays[i] = tmp;\n        }\n    }\n    const set = new Map();\n    for (const elem of arrays[0]) {\n        set.set(elem, 1);\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        let found = 0;\n        for (const elem of arrays[i]) {\n            const count = set.get(elem);\n            if (count === i) {\n                set.set(elem, count + 1);\n                found++;\n            }\n        }\n        if (found === 0)\n            return [];\n    }\n    return arrays[0].filter((e) => {\n        const count = set.get(e);\n        if (count !== undefined)\n            set.set(e, 0);\n        return count === arrays.length;\n    });\n}\nexport function getDocumentProperties(doc, paths) {\n    const properties = {};\n    const pathsLength = paths.length;\n    for (let i = 0; i < pathsLength; i++) {\n        const path = paths[i];\n        const pathTokens = path.split('.');\n        let current = doc;\n        const pathTokensLength = pathTokens.length;\n        for (let j = 0; j < pathTokensLength; j++) {\n            current = current[pathTokens[j]];\n            // We found an object but we were supposed to be done\n            if (typeof current === 'object') {\n                if (current !== null &&\n                    'lat' in current &&\n                    'lon' in current &&\n                    typeof current.lat === 'number' &&\n                    typeof current.lon === 'number') {\n                    current = properties[path] = current;\n                    break;\n                }\n                else if (!Array.isArray(current) && current !== null && j === pathTokensLength - 1) {\n                    current = undefined;\n                    break;\n                }\n            }\n            else if ((current === null || typeof current !== 'object') && j < pathTokensLength - 1) {\n                // We can't recurse anymore but we were supposed to\n                current = undefined;\n                break;\n            }\n        }\n        if (typeof current !== 'undefined') {\n            properties[path] = current;\n        }\n    }\n    return properties;\n}\nexport function getNested(obj, path) {\n    const props = getDocumentProperties(obj, [path]);\n    return props[path];\n}\nexport function flattenObject(obj, prefix = '') {\n    const result = {};\n    for (const key in obj) {\n        const prop = `${prefix}${key}`;\n        const objKey = obj[key];\n        if (typeof objKey === 'object' && objKey !== null) {\n            Object.assign(result, flattenObject(objKey, `${prop}.`));\n        }\n        else {\n            result[prop] = objKey;\n        }\n    }\n    return result;\n}\nconst mapDistanceToMeters = {\n    cm: 0.01,\n    m: 1,\n    km: 1000,\n    ft: 0.3048,\n    yd: 0.9144,\n    mi: 1609.344\n};\nexport function convertDistanceToMeters(distance, unit) {\n    const ratio = mapDistanceToMeters[unit];\n    if (ratio === undefined) {\n        throw new Error(createError('INVALID_DISTANCE_SUFFIX', distance).message);\n    }\n    return distance * ratio;\n}\nexport function removeVectorsFromHits(searchResult, vectorProperties) {\n    searchResult.hits = searchResult.hits.map((result) => ({\n        ...result,\n        document: {\n            ...result.document,\n            // Remove embeddings from the result\n            ...vectorProperties.reduce((acc, prop) => {\n                const path = prop.split('.');\n                const lastKey = path.pop();\n                let obj = acc;\n                for (const key of path) {\n                    obj[key] = obj[key] ?? {};\n                    obj = obj[key];\n                }\n                obj[lastKey] = null;\n                return acc;\n            }, result.document)\n        }\n    }));\n}\nexport function isPromise(obj) {\n    return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n/**\n * Checks if the provided input is an async function or if the input is an array\n * containing at least one async function.\n *\n * @param func - A single function or an array of functions to check.\n *               Non-function values are ignored.\n * @returns `true` if the input is an async function or an array containing at least\n *          one async function, otherwise `false`.\n */\nexport function isAsyncFunction(func) {\n    if (Array.isArray(func)) {\n        return func.some((item) => isAsyncFunction(item));\n    }\n    return func?.constructor?.name === 'AsyncFunction';\n}\nconst withIntersection = 'intersection' in new Set();\nexport function setIntersection(...sets) {\n    // Fast path 1\n    if (sets.length === 0) {\n        return new Set();\n    }\n    // Fast path 2\n    if (sets.length === 1) {\n        return sets[0];\n    }\n    // Fast path 3\n    if (sets.length === 2) {\n        const set1 = sets[0];\n        const set2 = sets[1];\n        if (withIntersection) {\n            return set1.intersection(set2);\n        }\n        const result = new Set();\n        const base = set1.size < set2.size ? set1 : set2;\n        const other = base === set1 ? set2 : set1;\n        for (const value of base) {\n            if (other.has(value)) {\n                result.add(value);\n            }\n        }\n        return result;\n    }\n    // Slow path\n    // Find the smallest set\n    const min = {\n        index: 0,\n        size: sets[0].size\n    };\n    for (let i = 1; i < sets.length; i++) {\n        if (sets[i].size < min.size) {\n            min.index = i;\n            min.size = sets[i].size;\n        }\n    }\n    if (withIntersection) {\n        let base = sets[min.index];\n        for (let i = 0; i < sets.length; i++) {\n            if (i === min.index) {\n                continue;\n            }\n            base = base.intersection(sets[i]);\n        }\n        return base;\n    }\n    // manual implementation:\n    // intersect all sets with the smallest set\n    const base = sets[min.index];\n    for (let i = 0; i < sets.length; i++) {\n        if (i === min.index) {\n            continue;\n        }\n        const other = sets[i];\n        for (const value of base) {\n            if (!other.has(value)) {\n                base.delete(value);\n            }\n        }\n    }\n    return base;\n}\nconst withUnion = 'union' in new Set();\nexport function setUnion(set1, set2) {\n    if (withUnion) {\n        if (set1) {\n            return set1.union(set2);\n        }\n        return set2;\n    }\n    if (!set1) {\n        return new Set(set2);\n    }\n    return new Set([...set1, ...set2]);\n}\nexport function setDifference(set1, set2) {\n    const result = new Set();\n    for (const value of set1) {\n        if (!set2.has(value)) {\n            result.add(value);\n        }\n    }\n    return result;\n}\n// This code is taken from https://github.com/davidmarkclements/atomic-sleep, MIT licensed at the time of commit b8149d3ca276c84a54fa8fa1478f9cc79aabc15a.\n// All credits go to the original author (David Mark Clements, https://github.com/davidmarkclements).\nexport function sleep(ms) {\n    if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n        const nil = new Int32Array(new SharedArrayBuffer(4));\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        Atomics.wait(nil, 0, 0, Number(ms));\n    }\n    else {\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        const target = Date.now() + Number(ms);\n        while (target > Date.now()) {\n            /* empty */\n        }\n    }\n}\n//# sourceMappingURL=utils.js.map","import { SUPPORTED_LANGUAGES } from './components/tokenizer/languages.js';\nimport { sprintf } from './utils.js';\nconst allLanguages = SUPPORTED_LANGUAGES.join('\\n - ');\nconst errors = {\n    NO_LANGUAGE_WITH_CUSTOM_TOKENIZER: 'Do not pass the language option to create when using a custom tokenizer.',\n    LANGUAGE_NOT_SUPPORTED: `Language \"%s\" is not supported.\\nSupported languages are:\\n - ${allLanguages}`,\n    INVALID_STEMMER_FUNCTION_TYPE: `config.stemmer property must be a function.`,\n    MISSING_STEMMER: `As of version 1.0.0 @orama/orama does not ship non English stemmers by default. To solve this, please explicitly import and specify the \"%s\" stemmer from the package @orama/stemmers. See https://docs.orama.com/docs/orama-js/text-analysis/stemming for more information.`,\n    CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY: 'Custom stop words array must only contain strings.',\n    UNSUPPORTED_COMPONENT: `Unsupported component \"%s\".`,\n    COMPONENT_MUST_BE_FUNCTION: `The component \"%s\" must be a function.`,\n    COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS: `The component \"%s\" must be a function or an array of functions.`,\n    INVALID_SCHEMA_TYPE: `Unsupported schema type \"%s\" at \"%s\". Expected \"string\", \"boolean\" or \"number\" or array of them.`,\n    DOCUMENT_ID_MUST_BE_STRING: `Document id must be of type \"string\". Got \"%s\" instead.`,\n    DOCUMENT_ALREADY_EXISTS: `A document with id \"%s\" already exists.`,\n    DOCUMENT_DOES_NOT_EXIST: `A document with id \"%s\" does not exists.`,\n    MISSING_DOCUMENT_PROPERTY: `Missing searchable property \"%s\".`,\n    INVALID_DOCUMENT_PROPERTY: `Invalid document property \"%s\": expected \"%s\", got \"%s\"`,\n    UNKNOWN_INDEX: `Invalid property name \"%s\". Expected a wildcard string (\"*\") or array containing one of the following properties: %s`,\n    INVALID_BOOST_VALUE: `Boost value must be a number greater than, or less than 0.`,\n    INVALID_FILTER_OPERATION: `You can only use one operation per filter, you requested %d.`,\n    SCHEMA_VALIDATION_FAILURE: `Cannot insert document due schema validation failure on \"%s\" property.`,\n    INVALID_SORT_SCHEMA_TYPE: `Unsupported sort schema type \"%s\" at \"%s\". Expected \"string\" or \"number\".`,\n    CANNOT_SORT_BY_ARRAY: `Cannot configure sort for \"%s\" because it is an array (%s).`,\n    UNABLE_TO_SORT_ON_UNKNOWN_FIELD: `Unable to sort on unknown field \"%s\". Allowed fields: %s`,\n    SORT_DISABLED: `Sort is disabled. Please read the documentation at https://docs.orama.com/docs/orama-js for more information.`,\n    UNKNOWN_GROUP_BY_PROPERTY: `Unknown groupBy property \"%s\".`,\n    INVALID_GROUP_BY_PROPERTY: `Invalid groupBy property \"%s\". Allowed types: \"%s\", but given \"%s\".`,\n    UNKNOWN_FILTER_PROPERTY: `Unknown filter property \"%s\".`,\n    UNKNOWN_VECTOR_PROPERTY: `Unknown vector property \"%s\". Make sure the property exists in the schema and is configured as a vector.`,\n    INVALID_VECTOR_SIZE: `Vector size must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_VECTOR_VALUE: `Vector value must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_INPUT_VECTOR: `Property \"%s\" was declared as a %s-dimensional vector, but got a %s-dimensional vector instead.\\nInput vectors must be of the size declared in the schema, as calculating similarity between vectors of different sizes can lead to unexpected results.`,\n    WRONG_SEARCH_PROPERTY_TYPE: `Property \"%s\" is not searchable. Only \"string\" properties are searchable.`,\n    FACET_NOT_SUPPORTED: `Facet doens't support the type \"%s\".`,\n    INVALID_DISTANCE_SUFFIX: `Invalid distance suffix \"%s\". Valid suffixes are: cm, m, km, mi, yd, ft.`,\n    INVALID_SEARCH_MODE: `Invalid search mode \"%s\". Valid modes are: \"fulltext\", \"vector\", \"hybrid\".`,\n    MISSING_VECTOR_AND_SECURE_PROXY: `No vector was provided and no secure proxy was configured. Please provide a vector or configure an Orama Secure Proxy to perform hybrid search.`,\n    MISSING_TERM: `\"term\" is a required parameter when performing hybrid search. Please provide a search term.`,\n    INVALID_VECTOR_INPUT: `Invalid \"vector\" property. Expected an object with \"value\" and \"property\" properties, but got \"%s\" instead.`,\n    PLUGIN_CRASHED: `A plugin crashed during initialization. Please check the error message for more information:`,\n    PLUGIN_SECURE_PROXY_NOT_FOUND: `Could not find '@orama/secure-proxy-plugin' installed in your Orama instance.\\nPlease install it before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL: `Could not find a chat model defined in the secure proxy plugin configuration.\\nPlease provide a chat model before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT: `The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.`,\n    PLUGIN_COMPONENT_CONFLICT: `The component \"%s\" is already defined. The plugin \"%s\" is trying to redefine it.`\n};\nexport function createError(code, ...args) {\n    const error = new Error(sprintf(errors[code] ?? `Unsupported Orama Error code: ${code}`, ...args));\n    error.code = code;\n    if ('captureStackTrace' in Error.prototype) {\n        Error.captureStackTrace(error);\n    }\n    return error;\n}\n//# sourceMappingURL=errors.js.map","import { createError } from '../errors.js';\nimport { formatNanoseconds, uniqueId } from '../utils.js';\nexport { getDocumentProperties } from '../utils.js';\nexport function formatElapsedTime(n) {\n    return {\n        raw: Number(n),\n        formatted: formatNanoseconds(n)\n    };\n}\nexport function getDocumentIndexId(doc) {\n    if (doc.id) {\n        if (typeof doc.id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof doc.id);\n        }\n        return doc.id;\n    }\n    return uniqueId();\n}\nexport function validateSchema(doc, schema) {\n    for (const [prop, type] of Object.entries(schema)) {\n        const value = doc[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        if (type === 'geopoint' &&\n            typeof value === 'object' &&\n            typeof value.lon === 'number' &&\n            typeof value.lat === 'number') {\n            continue;\n        }\n        if (type === 'enum' && (typeof value === 'string' || typeof value === 'number')) {\n            continue;\n        }\n        if (type === 'enum[]' && Array.isArray(value)) {\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== 'string' && typeof value[i] !== 'number') {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (isVectorType(type)) {\n            const vectorSize = getVectorSize(type);\n            if (!Array.isArray(value) || value.length !== vectorSize) {\n                throw createError('INVALID_INPUT_VECTOR', prop, vectorSize, value.length);\n            }\n            continue;\n        }\n        if (isArrayType(type)) {\n            if (!Array.isArray(value)) {\n                return prop;\n            }\n            const expectedType = getInnerType(type);\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== expectedType) {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (typeof type === 'object') {\n            if (!value || typeof value !== 'object') {\n                return prop;\n            }\n            // using as ResultDocument is not exactly right but trying to be type-safe here is not useful\n            const subProp = validateSchema(value, type);\n            if (subProp) {\n                return prop + '.' + subProp;\n            }\n            continue;\n        }\n        if (typeof value !== type) {\n            return prop;\n        }\n    }\n    return undefined;\n}\nconst IS_ARRAY_TYPE = {\n    string: false,\n    number: false,\n    boolean: false,\n    enum: false,\n    geopoint: false,\n    'string[]': true,\n    'number[]': true,\n    'boolean[]': true,\n    'enum[]': true\n};\nconst INNER_TYPE = {\n    'string[]': 'string',\n    'number[]': 'number',\n    'boolean[]': 'boolean',\n    'enum[]': 'enum'\n};\nexport function isGeoPointType(type) {\n    return type === 'geopoint';\n}\nexport function isVectorType(type) {\n    return typeof type === 'string' && /^vector\\[\\d+\\]$/.test(type);\n}\nexport function isArrayType(type) {\n    return typeof type === 'string' && IS_ARRAY_TYPE[type];\n}\nexport function getInnerType(type) {\n    return INNER_TYPE[type];\n}\nexport function getVectorSize(type) {\n    const size = Number(type.slice(7, -1));\n    switch (true) {\n        case isNaN(size):\n            throw createError('INVALID_VECTOR_VALUE', type);\n        case size <= 0:\n            throw createError('INVALID_VECTOR_SIZE', type);\n        default:\n            return size;\n    }\n}\n//# sourceMappingURL=defaults.js.map","export function createInternalDocumentIDStore() {\n    return {\n        idToInternalId: new Map(),\n        internalIdToId: [],\n        save,\n        load\n    };\n}\nexport function save(store) {\n    return {\n        internalIdToId: store.internalIdToId\n    };\n}\nexport function load(orama, raw) {\n    const { internalIdToId } = raw;\n    orama.internalDocumentIDStore.idToInternalId.clear();\n    orama.internalDocumentIDStore.internalIdToId = [];\n    const internalIdToIdLength = internalIdToId.length;\n    for (let i = 0; i < internalIdToIdLength; i++) {\n        const internalIdItem = internalIdToId[i];\n        orama.internalDocumentIDStore.idToInternalId.set(internalIdItem, i + 1);\n        orama.internalDocumentIDStore.internalIdToId.push(internalIdItem);\n    }\n}\nexport function getInternalDocumentId(store, id) {\n    if (typeof id === 'string') {\n        const internalId = store.idToInternalId.get(id);\n        if (internalId) {\n            return internalId;\n        }\n        const currentId = store.idToInternalId.size + 1;\n        store.idToInternalId.set(id, currentId);\n        store.internalIdToId.push(id);\n        return currentId;\n    }\n    if (id > store.internalIdToId.length) {\n        return getInternalDocumentId(store, id.toString());\n    }\n    return id;\n}\nexport function getDocumentIdFromInternalId(store, internalId) {\n    if (store.internalIdToId.length < internalId) {\n        throw new Error(`Invalid internalId ${internalId}`);\n    }\n    return store.internalIdToId[internalId - 1];\n}\n//# sourceMappingURL=internal-document-id-store.js.map","import { getInternalDocumentId } from './internal-document-id-store.js';\nexport function create(_, sharedInternalDocumentStore) {\n    return {\n        sharedInternalDocumentStore,\n        docs: {},\n        count: 0\n    };\n}\nexport function get(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    return store.docs[internalId];\n}\nexport function getMultiple(store, ids) {\n    const idsLength = ids.length;\n    const found = Array.from({ length: idsLength });\n    for (let i = 0; i < idsLength; i++) {\n        const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, ids[i]);\n        found[i] = store.docs[internalId];\n    }\n    return found;\n}\nexport function getAll(store) {\n    return store.docs;\n}\nexport function store(store, id, internalId, doc) {\n    if (typeof store.docs[internalId] !== 'undefined') {\n        return false;\n    }\n    store.docs[internalId] = doc;\n    store.count++;\n    return true;\n}\nexport function remove(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    if (typeof store.docs[internalId] === 'undefined') {\n        return false;\n    }\n    delete store.docs[internalId];\n    store.count--;\n    return true;\n}\nexport function count(store) {\n    return store.count;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    return {\n        docs: rawDocument.docs,\n        count: rawDocument.count,\n        sharedInternalDocumentStore\n    };\n}\nexport function save(store) {\n    return {\n        docs: store.docs,\n        count: store.count\n    };\n}\nexport function createDocumentsStore() {\n    return {\n        create,\n        get,\n        getMultiple,\n        getAll,\n        store,\n        remove,\n        count,\n        load,\n        save\n    };\n}\n//# sourceMappingURL=documents-store.js.map","import { createError } from '../errors.js';\nexport const AVAILABLE_PLUGIN_HOOKS = [\n    'beforeInsert',\n    'afterInsert',\n    'beforeRemove',\n    'afterRemove',\n    'beforeUpdate',\n    'afterUpdate',\n    'beforeUpsert',\n    'afterUpsert',\n    'beforeSearch',\n    'afterSearch',\n    'beforeInsertMultiple',\n    'afterInsertMultiple',\n    'beforeRemoveMultiple',\n    'afterRemoveMultiple',\n    'beforeUpdateMultiple',\n    'afterUpdateMultiple',\n    'beforeUpsertMultiple',\n    'afterUpsertMultiple',\n    'beforeLoad',\n    'afterLoad',\n    'afterCreate'\n];\nexport function getAllPluginsByHook(orama, hook) {\n    const pluginsToRun = [];\n    const pluginsLength = orama.plugins?.length;\n    if (!pluginsLength) {\n        return pluginsToRun;\n    }\n    for (let i = 0; i < pluginsLength; i++) {\n        try {\n            const plugin = orama.plugins[i];\n            if (typeof plugin[hook] === 'function') {\n                pluginsToRun.push(plugin[hook]);\n            }\n        }\n        catch (error) {\n            console.error('Caught error in getAllPluginsByHook:', error);\n            throw createError('PLUGIN_CRASHED');\n        }\n    }\n    return pluginsToRun;\n}\n//# sourceMappingURL=plugins.js.map","import { isAsyncFunction } from '../utils.js';\nexport const OBJECT_COMPONENTS = ['tokenizer', 'index', 'documentsStore', 'sorter', 'pinning'];\nexport const FUNCTION_COMPONENTS = [\n    'validateSchema',\n    'getDocumentIndexId',\n    'getDocumentProperties',\n    'formatElapsedTime'\n];\nexport const SINGLE_OR_ARRAY_COMPONENTS = [\n/* deprecated with v2.0.0-beta.5 */\n];\nexport function runSingleHook(hooks, orama, id, doc) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, id, doc);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, id, doc);\n        }\n    }\n}\nexport function runMultipleHook(hooks, orama, docsOrIds) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, docsOrIds);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, docsOrIds);\n        }\n    }\n}\nexport function runAfterSearch(hooks, db, params, language, results) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language, results);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language, results);\n        }\n    }\n}\nexport function runBeforeSearch(hooks, db, params, language) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language);\n        }\n    }\n}\nexport function runAfterCreate(hooks, db) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db);\n        }\n    }\n}\n//# sourceMappingURL=hooks.js.map","export class AVLNode {\n    k;\n    v;\n    l = null;\n    r = null;\n    h = 1;\n    constructor(key, value) {\n        this.k = key;\n        this.v = new Set(value);\n    }\n    updateHeight() {\n        this.h = Math.max(AVLNode.getHeight(this.l), AVLNode.getHeight(this.r)) + 1;\n    }\n    static getHeight(node) {\n        return node ? node.h : 0;\n    }\n    getBalanceFactor() {\n        return AVLNode.getHeight(this.l) - AVLNode.getHeight(this.r);\n    }\n    rotateLeft() {\n        const newRoot = this.r;\n        this.r = newRoot.l;\n        newRoot.l = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    rotateRight() {\n        const newRoot = this.l;\n        this.l = newRoot.r;\n        newRoot.r = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    toJSON() {\n        return {\n            k: this.k,\n            v: Array.from(this.v),\n            l: this.l ? this.l.toJSON() : null,\n            r: this.r ? this.r.toJSON() : null,\n            h: this.h\n        };\n    }\n    static fromJSON(json) {\n        const node = new AVLNode(json.k, json.v);\n        node.l = json.l ? AVLNode.fromJSON(json.l) : null;\n        node.r = json.r ? AVLNode.fromJSON(json.r) : null;\n        node.h = json.h;\n        return node;\n    }\n}\nexport class AVLTree {\n    root = null;\n    insertCount = 0;\n    constructor(key, value) {\n        if (key !== undefined && value !== undefined) {\n            this.root = new AVLNode(key, value);\n        }\n    }\n    insert(key, value, rebalanceThreshold = 1000) {\n        this.root = this.insertNode(this.root, key, value, rebalanceThreshold);\n    }\n    insertMultiple(key, value, rebalanceThreshold = 1000) {\n        for (const v of value) {\n            this.insert(key, v, rebalanceThreshold);\n        }\n    }\n    // Rebalance the tree if the insert count reaches the threshold.\n    // This will improve insertion performance since we won't be rebalancing the tree on every insert.\n    // When inserting docs using `insertMultiple`, the threshold will be set to the number of docs being inserted.\n    // We can force rebalancing the tree by setting the threshold to 1 (default).\n    rebalance() {\n        if (this.root) {\n            this.root = this.rebalanceNode(this.root);\n        }\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null,\n            insertCount: this.insertCount\n        };\n    }\n    static fromJSON(json) {\n        const tree = new AVLTree();\n        tree.root = json.root ? AVLNode.fromJSON(json.root) : null;\n        tree.insertCount = json.insertCount || 0;\n        return tree;\n    }\n    insertNode(node, key, value, rebalanceThreshold) {\n        if (node === null) {\n            return new AVLNode(key, [value]);\n        }\n        const path = [];\n        let current = node;\n        let parent = null;\n        while (current !== null) {\n            path.push({ parent, node: current });\n            if (key < current.k) {\n                if (current.l === null) {\n                    current.l = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.l });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.l;\n                }\n            }\n            else if (key > current.k) {\n                if (current.r === null) {\n                    current.r = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.r });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.r;\n                }\n            }\n            else {\n                // Key already exists\n                current.v.add(value);\n                /*\n                if (Array.isArray(current.v)) {\n                  if (Array.isArray(value)) {\n                    ;(current.v as any[]).push(...(value as V[]))\n                  } else {\n                    ;(current.v as any[]).push(value)\n                  }\n                } else {\n                  current.v = new Set([value])\n                }\n                */\n                return node;\n            }\n        }\n        // Update heights and rebalance if necessary\n        let needRebalance = false;\n        if (this.insertCount++ % rebalanceThreshold === 0) {\n            needRebalance = true;\n        }\n        for (let i = path.length - 1; i >= 0; i--) {\n            const { parent, node: currentNode } = path[i];\n            currentNode.updateHeight();\n            if (needRebalance) {\n                const rebalancedNode = this.rebalanceNode(currentNode);\n                if (parent) {\n                    if (parent.l === currentNode) {\n                        parent.l = rebalancedNode;\n                    }\n                    else if (parent.r === currentNode) {\n                        parent.r = rebalancedNode;\n                    }\n                }\n                else {\n                    // This is the root node\n                    node = rebalancedNode;\n                }\n            }\n        }\n        return node;\n    }\n    rebalanceNode(node) {\n        const balanceFactor = node.getBalanceFactor();\n        if (balanceFactor > 1) {\n            // Left heavy\n            if (node.l && node.l.getBalanceFactor() >= 0) {\n                // Left Left Case\n                return node.rotateRight();\n            }\n            else if (node.l) {\n                // Left Right Case\n                node.l = node.l.rotateLeft();\n                return node.rotateRight();\n            }\n        }\n        if (balanceFactor < -1) {\n            // Right heavy\n            if (node.r && node.r.getBalanceFactor() <= 0) {\n                // Right Right Case\n                return node.rotateLeft();\n            }\n            else if (node.r) {\n                // Right Left Case\n                node.r = node.r.rotateRight();\n                return node.rotateLeft();\n            }\n        }\n        return node;\n    }\n    find(key) {\n        const node = this.findNodeByKey(key);\n        return node ? node.v : null;\n    }\n    contains(key) {\n        return this.find(key) !== null;\n    }\n    getSize() {\n        let count = 0;\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            count++;\n            current = current.r;\n        }\n        return count;\n    }\n    isBalanced() {\n        if (!this.root)\n            return true;\n        const stack = [this.root];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            const balanceFactor = node.getBalanceFactor();\n            if (Math.abs(balanceFactor) > 1) {\n                return false;\n            }\n            if (node.l)\n                stack.push(node.l);\n            if (node.r)\n                stack.push(node.r);\n        }\n        return true;\n    }\n    remove(key) {\n        this.root = this.removeNode(this.root, key);\n    }\n    removeDocument(key, id) {\n        const node = this.findNodeByKey(key);\n        if (!node) {\n            return;\n        }\n        if (node.v.size === 1) {\n            this.root = this.removeNode(this.root, key);\n        }\n        else {\n            node.v = new Set([...node.v.values()].filter((v) => v !== id));\n        }\n    }\n    findNodeByKey(key) {\n        let node = this.root;\n        while (node) {\n            if (key < node.k) {\n                node = node.l;\n            }\n            else if (key > node.k) {\n                node = node.r;\n            }\n            else {\n                return node;\n            }\n        }\n        return null;\n    }\n    removeNode(node, key) {\n        if (node === null)\n            return null;\n        const path = [];\n        let current = node;\n        while (current !== null && current.k !== key) {\n            path.push(current);\n            if (key < current.k) {\n                current = current.l;\n            }\n            else {\n                current = current.r;\n            }\n        }\n        if (current === null) {\n            // Key not found\n            return node;\n        }\n        // Node with only one child or no child\n        if (current.l === null || current.r === null) {\n            const child = current.l ? current.l : current.r;\n            if (path.length === 0) {\n                // Node to be deleted is root\n                node = child;\n            }\n            else {\n                const parent = path[path.length - 1];\n                if (parent.l === current) {\n                    parent.l = child;\n                }\n                else {\n                    parent.r = child;\n                }\n            }\n        }\n        else {\n            // Node with two children: Get the inorder successor\n            let successorParent = current;\n            let successor = current.r;\n            while (successor.l !== null) {\n                successorParent = successor;\n                successor = successor.l;\n            }\n            // Copy the successor's content to current node\n            current.k = successor.k;\n            current.v = successor.v;\n            // Delete the successor\n            if (successorParent.l === successor) {\n                successorParent.l = successor.r;\n            }\n            else {\n                successorParent.r = successor.r;\n            }\n            current = successorParent;\n        }\n        // Update heights and rebalance\n        path.push(current);\n        for (let i = path.length - 1; i >= 0; i--) {\n            const currentNode = path[i];\n            currentNode.updateHeight();\n            const rebalancedNode = this.rebalanceNode(currentNode);\n            if (i > 0) {\n                const parent = path[i - 1];\n                if (parent.l === currentNode) {\n                    parent.l = rebalancedNode;\n                }\n                else if (parent.r === currentNode) {\n                    parent.r = rebalancedNode;\n                }\n            }\n            else {\n                // Root node\n                node = rebalancedNode;\n            }\n        }\n        return node;\n    }\n    rangeSearch(min, max) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if (current.k >= min && current.k <= max) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            if (current.k > max) {\n                break;\n            }\n            current = current.r;\n        }\n        return result;\n    }\n    greaterThan(key, inclusive = false) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.r; // Traverse right subtree first\n            }\n            current = stack.pop();\n            if ((inclusive && current.k >= key) || (!inclusive && current.k > key)) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            else if (current.k <= key) {\n                break; // Since we're traversing in descending order, we can break early\n            }\n            current = current.l;\n        }\n        return result;\n    }\n    lessThan(key, inclusive = false) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if ((inclusive && current.k <= key) || (!inclusive && current.k < key)) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            else if (current.k > key) {\n                break; // Since we're traversing in ascending order, we can break early\n            }\n            current = current.r;\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=avl.js.map","export class FlatTree {\n    numberToDocumentId;\n    constructor() {\n        this.numberToDocumentId = new Map();\n    }\n    insert(key, value) {\n        if (this.numberToDocumentId.has(key)) {\n            this.numberToDocumentId.get(key).add(value);\n        }\n        else {\n            this.numberToDocumentId.set(key, new Set([value]));\n        }\n    }\n    find(key) {\n        const idSet = this.numberToDocumentId.get(key);\n        return idSet ? Array.from(idSet) : null;\n    }\n    remove(key) {\n        this.numberToDocumentId.delete(key);\n    }\n    removeDocument(id, key) {\n        const idSet = this.numberToDocumentId.get(key);\n        if (idSet) {\n            idSet.delete(id);\n            if (idSet.size === 0) {\n                this.numberToDocumentId.delete(key);\n            }\n        }\n    }\n    contains(key) {\n        return this.numberToDocumentId.has(key);\n    }\n    getSize() {\n        let size = 0;\n        for (const idSet of this.numberToDocumentId.values()) {\n            size += idSet.size;\n        }\n        return size;\n    }\n    filter(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'eq': {\n                const value = operation[operationType];\n                const idSet = this.numberToDocumentId.get(value);\n                return idSet ? Array.from(idSet) : [];\n            }\n            case 'in': {\n                const values = operation[operationType];\n                const resultSet = new Set();\n                for (const value of values) {\n                    const idSet = this.numberToDocumentId.get(value);\n                    if (idSet) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            case 'nin': {\n                const excludeValues = new Set(operation[operationType]);\n                const resultSet = new Set();\n                for (const [key, idSet] of this.numberToDocumentId.entries()) {\n                    if (!excludeValues.has(key)) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    filterArr(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'containsAll': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const intersection = idSets.reduce((prev, curr) => {\n                    return new Set([...prev].filter((id) => curr.has(id)));\n                });\n                return Array.from(intersection);\n            }\n            case 'containsAny': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const union = idSets.reduce((prev, curr) => {\n                    return new Set([...prev, ...curr]);\n                });\n                return Array.from(union);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    static fromJSON(json) {\n        if (!json.numberToDocumentId) {\n            throw new Error('Invalid Flat Tree JSON');\n        }\n        const tree = new FlatTree();\n        for (const [key, ids] of json.numberToDocumentId) {\n            tree.numberToDocumentId.set(key, new Set(ids));\n        }\n        return tree;\n    }\n    toJSON() {\n        return {\n            numberToDocumentId: Array.from(this.numberToDocumentId.entries()).map(([key, idSet]) => [key, Array.from(idSet)])\n        };\n    }\n}\n//# sourceMappingURL=flat.js.map","/**\n * Inspired by:\n * https://github.com/Yomguithereal/talisman/blob/86ae55cbd040ff021d05e282e0e6c71f2dde21f8/src/metrics/levenshtein.js#L218-L340\n */\nfunction _boundedLevenshtein(term, word, tolerance) {\n    // Handle base cases\n    if (tolerance < 0)\n        return -1;\n    if (term === word)\n        return 0;\n    const m = term.length;\n    const n = word.length;\n    // Special case for empty strings\n    if (m === 0)\n        return n <= tolerance ? n : -1;\n    if (n === 0)\n        return m <= tolerance ? m : -1;\n    // term = term.toLowerCase()\n    // word = word.toLowerCase()\n    const diff = Math.abs(m - n);\n    // Special case for prefixes\n    // If the searching word starts with the indexed word, return early.\n    if (term.startsWith(word)) {\n        // We just check if the remaining characters are within the tolerance\n        return diff <= tolerance ? diff : -1;\n    }\n    // If the indexed word starts with the searching word, return early.\n    if (word.startsWith(term)) {\n        // any prefixed word is within the tolerance\n        return 0;\n    }\n    // If the length difference is greater than the tolerance, return early\n    if (diff > tolerance)\n        return -1;\n    // Initialize the matrix\n    const matrix = [];\n    for (let i = 0; i <= m; i++) {\n        matrix[i] = [i];\n        for (let j = 1; j <= n; j++) {\n            matrix[i][j] = i === 0 ? j : 0;\n        }\n    }\n    // Fill the matrix\n    for (let i = 1; i <= m; i++) {\n        let rowMin = Infinity;\n        for (let j = 1; j <= n; j++) {\n            if (term[i - 1] === word[j - 1]) {\n                matrix[i][j] = matrix[i - 1][j - 1];\n            }\n            else {\n                matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n                matrix[i][j - 1] + 1, // insertion\n                matrix[i - 1][j - 1] + 1 // substitution\n                );\n            }\n            rowMin = Math.min(rowMin, matrix[i][j]);\n        }\n        // Early termination if all values in this row exceed tolerance\n        if (rowMin > tolerance) {\n            return -1;\n        }\n    }\n    return matrix[m][n] <= tolerance ? matrix[m][n] : -1;\n}\n/**\n * Computes the Levenshtein distance between two strings (a, b), returning early with -1 if the distance\n * is greater than the given tolerance.\n * It assumes that:\n * - tolerance >= ||a| - |b|| >= 0\n */\nexport function boundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\n// This is only used internally, keep in sync with the previous one\nexport function syncBoundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\nexport function levenshtein(a, b) {\n    /* c8 ignore next 3 */\n    if (!a.length) {\n        return b.length;\n    }\n    /* c8 ignore next 3 */\n    if (!b.length) {\n        return a.length;\n    }\n    const swap = a;\n    if (a.length > b.length) {\n        a = b;\n        b = swap;\n    }\n    const row = Array.from({ length: a.length + 1 }, (_, i) => i);\n    let val = 0;\n    for (let i = 1; i <= b.length; i++) {\n        let prev = i;\n        for (let j = 1; j <= a.length; j++) {\n            if (b[i - 1] === a[j - 1]) {\n                val = row[j - 1];\n            }\n            else {\n                val = Math.min(row[j - 1] + 1, Math.min(prev + 1, row[j] + 1));\n            }\n            row[j - 1] = prev;\n            prev = val;\n        }\n        row[a.length] = prev;\n    }\n    return row[a.length];\n}\n//# sourceMappingURL=levenshtein.js.map","/* eslint-disable @typescript-eslint/no-this-alias */\nimport { syncBoundedLevenshtein } from '../components/levenshtein.js';\nimport { getOwnProperty } from '../utils.js';\nexport class RadixNode {\n    // Node key\n    k;\n    // Node subword\n    s;\n    // Node children\n    c = new Map();\n    // Node documents\n    d = new Set();\n    // Node end\n    e;\n    // Node word\n    w = '';\n    constructor(key, subWord, end) {\n        this.k = key;\n        this.s = subWord;\n        this.e = end;\n    }\n    updateParent(parent) {\n        this.w = parent.w + this.s;\n    }\n    addDocument(docID) {\n        this.d.add(docID);\n    }\n    removeDocument(docID) {\n        return this.d.delete(docID);\n    }\n    findAllWords(output, term, exact, tolerance) {\n        const stack = [this];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (exact && w !== term) {\n                    continue;\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) !== null) {\n                    if (tolerance) {\n                        const difference = Math.abs(term.length - w.length);\n                        if (difference <= tolerance && syncBoundedLevenshtein(term, w, tolerance).isBounded) {\n                            output[w] = [];\n                        }\n                        else {\n                            continue;\n                        }\n                    }\n                    else {\n                        output[w] = [];\n                    }\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) != null && docIDs.size > 0) {\n                    const docs = output[w];\n                    for (const docID of docIDs) {\n                        if (!docs.includes(docID)) {\n                            docs.push(docID);\n                        }\n                    }\n                }\n            }\n            if (node.c.size > 0) {\n                stack.push(...node.c.values());\n            }\n        }\n        return output;\n    }\n    insert(word, docId) {\n        let node = this;\n        let i = 0;\n        const wordLength = word.length;\n        while (i < wordLength) {\n            const currentCharacter = word[i];\n            const childNode = node.c.get(currentCharacter);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                // Find the common prefix length between edgeLabel and the remaining word\n                while (j < edgeLabelLength && i + j < wordLength && edgeLabel[j] === word[i + j]) {\n                    j++;\n                }\n                if (j === edgeLabelLength) {\n                    // Edge label fully matches; proceed to the child node\n                    node = childNode;\n                    i += j;\n                    if (i === wordLength) {\n                        // The word is a prefix of an existing word\n                        if (!childNode.e) {\n                            childNode.e = true;\n                        }\n                        childNode.addDocument(docId);\n                        return;\n                    }\n                    continue;\n                }\n                // Split the edgeLabel at the common prefix\n                const commonPrefix = edgeLabel.slice(0, j);\n                const newEdgeLabel = edgeLabel.slice(j);\n                const newWordLabel = word.slice(i + j);\n                // Create an intermediate node for the common prefix\n                const inbetweenNode = new RadixNode(commonPrefix[0], commonPrefix, false);\n                node.c.set(commonPrefix[0], inbetweenNode);\n                inbetweenNode.updateParent(node);\n                // Update the existing childNode\n                childNode.s = newEdgeLabel;\n                childNode.k = newEdgeLabel[0];\n                inbetweenNode.c.set(newEdgeLabel[0], childNode);\n                childNode.updateParent(inbetweenNode);\n                if (newWordLabel) {\n                    // Create a new node for the remaining part of the word\n                    const newNode = new RadixNode(newWordLabel[0], newWordLabel, true);\n                    newNode.addDocument(docId);\n                    inbetweenNode.c.set(newWordLabel[0], newNode);\n                    newNode.updateParent(inbetweenNode);\n                }\n                else {\n                    // The word ends at the inbetweenNode\n                    inbetweenNode.e = true;\n                    inbetweenNode.addDocument(docId);\n                }\n                return;\n            }\n            else {\n                // No matching child; create a new node\n                const newNode = new RadixNode(currentCharacter, word.slice(i), true);\n                newNode.addDocument(docId);\n                node.c.set(currentCharacter, newNode);\n                newNode.updateParent(node);\n                return;\n            }\n        }\n        // If we reach here, the word already exists in the tree\n        if (!node.e) {\n            node.e = true;\n        }\n        node.addDocument(docId);\n    }\n    _findLevenshtein(term, index, tolerance, originalTolerance, output) {\n        const stack = [{ node: this, index, tolerance }];\n        while (stack.length > 0) {\n            const { node, index, tolerance } = stack.pop();\n            if (node.w.startsWith(term)) {\n                node.findAllWords(output, term, false, 0);\n                continue;\n            }\n            if (tolerance < 0) {\n                continue;\n            }\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (w) {\n                    if (syncBoundedLevenshtein(term, w, originalTolerance).isBounded) {\n                        output[w] = [];\n                    }\n                    if (getOwnProperty(output, w) !== undefined && docIDs.size > 0) {\n                        const docs = new Set(output[w]);\n                        for (const docID of docIDs) {\n                            docs.add(docID);\n                        }\n                        output[w] = Array.from(docs);\n                    }\n                }\n            }\n            if (index >= term.length) {\n                continue;\n            }\n            const currentChar = term[index];\n            // 1. If node has child matching term[index], push { node: childNode, index +1, tolerance }\n            if (node.c.has(currentChar)) {\n                const childNode = node.c.get(currentChar);\n                stack.push({ node: childNode, index: index + 1, tolerance });\n            }\n            // 2. Push { node, index +1, tolerance -1 } (Delete operation)\n            stack.push({ node: node, index: index + 1, tolerance: tolerance - 1 });\n            // 3. For each child:\n            for (const [character, childNode] of node.c) {\n                // a) Insert operation\n                stack.push({ node: childNode, index: index, tolerance: tolerance - 1 });\n                // b) Substitute operation\n                if (character !== currentChar) {\n                    stack.push({ node: childNode, index: index + 1, tolerance: tolerance - 1 });\n                }\n            }\n        }\n    }\n    find(params) {\n        const { term, exact, tolerance } = params;\n        if (tolerance && !exact) {\n            const output = {};\n            this._findLevenshtein(term, 0, tolerance, tolerance, output);\n            return output;\n        }\n        else {\n            let node = this;\n            let i = 0;\n            const termLength = term.length;\n            while (i < termLength) {\n                const character = term[i];\n                const childNode = node.c.get(character);\n                if (childNode) {\n                    const edgeLabel = childNode.s;\n                    const edgeLabelLength = edgeLabel.length;\n                    let j = 0;\n                    // Compare edge label with the term starting from position i\n                    while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                        j++;\n                    }\n                    if (j === edgeLabelLength) {\n                        // Full match of edge label; proceed to the child node\n                        node = childNode;\n                        i += j;\n                    }\n                    else if (i + j === termLength) {\n                        // The term ends in the middle of the edge label - FIX: this handles prefix matches like 'p' matching 'phone'\n                        // Check if the term matches from the beginning of the edge label\n                        if (j === termLength - i) {\n                            // Term is a prefix of the edge label\n                            if (exact) {\n                                // Exact match required but term doesn't end at a node\n                                return {};\n                            }\n                            else {\n                                // Partial match; collect words starting from this node\n                                const output = {};\n                                // Just call findAllWords on the child node to collect all words in this subtree\n                                childNode.findAllWords(output, term, exact, tolerance);\n                                return output;\n                            }\n                        }\n                        else {\n                            // Mismatch found\n                            return {};\n                        }\n                    }\n                    else {\n                        // Mismatch found\n                        return {};\n                    }\n                }\n                else {\n                    // No matching child node\n                    return {};\n                }\n            }\n            // Term fully matched; collect words starting from this node\n            const output = {};\n            node.findAllWords(output, term, exact, tolerance);\n            return output;\n        }\n    }\n    contains(term) {\n        let node = this;\n        let i = 0;\n        const termLength = term.length;\n        while (i < termLength) {\n            const character = term[i];\n            const childNode = node.c.get(character);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                    j++;\n                }\n                if (j < edgeLabelLength) {\n                    return false;\n                }\n                i += edgeLabelLength;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    removeWord(term) {\n        if (!term) {\n            return false;\n        }\n        let node = this;\n        const termLength = term.length;\n        const stack = [];\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                stack.push({ parent: node, character });\n                i += childNode.s.length - 1;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        // Remove documents from the node\n        node.d.clear();\n        node.e = false;\n        // Clean up any nodes that no longer lead to a word\n        while (stack.length > 0 && node.c.size === 0 && !node.e && node.d.size === 0) {\n            const { parent, character } = stack.pop();\n            parent.c.delete(character);\n            node = parent;\n        }\n        return true;\n    }\n    removeDocumentByWord(term, docID, exact = true) {\n        if (!term) {\n            return true;\n        }\n        let node = this;\n        const termLength = term.length;\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                i += childNode.s.length - 1;\n                node = childNode;\n                if (exact && node.w !== term) {\n                    // Do nothing if the exact condition is not met.\n                }\n                else {\n                    node.removeDocument(docID);\n                }\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    static getCommonPrefix(a, b) {\n        const len = Math.min(a.length, b.length);\n        let i = 0;\n        while (i < len && a.charCodeAt(i) === b.charCodeAt(i)) {\n            i++;\n        }\n        return a.slice(0, i);\n    }\n    toJSON() {\n        return {\n            w: this.w,\n            s: this.s,\n            e: this.e,\n            k: this.k,\n            d: Array.from(this.d),\n            c: Array.from(this.c?.entries())?.map(([key, node]) => [key, node.toJSON()])\n        };\n    }\n    static fromJSON(json) {\n        const node = new RadixNode(json.k, json.s, json.e);\n        node.w = json.w;\n        node.d = new Set(json.d);\n        node.c = new Map(json?.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]) || []);\n        return node;\n    }\n}\nexport class RadixTree extends RadixNode {\n    constructor() {\n        super('', '', false);\n    }\n    static fromJSON(json) {\n        const tree = new RadixTree();\n        tree.w = json.w;\n        tree.s = json.s;\n        tree.e = json.e;\n        tree.k = json.k;\n        tree.d = new Set(json.d);\n        tree.c = new Map(json?.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]) || []);\n        return tree;\n    }\n    toJSON() {\n        return super.toJSON();\n    }\n}\n//# sourceMappingURL=radix.js.map","const K = 2; // 2D points\nconst EARTH_RADIUS = 6371e3; // Earth radius in meters\nclass BKDNode {\n    point;\n    docIDs;\n    left;\n    right;\n    parent;\n    constructor(point, docIDs) {\n        this.point = point;\n        this.docIDs = new Set(docIDs);\n        this.left = null;\n        this.right = null;\n        this.parent = null;\n    }\n    toJSON() {\n        return {\n            point: this.point,\n            docIDs: Array.from(this.docIDs),\n            left: this.left ? this.left.toJSON() : null,\n            right: this.right ? this.right.toJSON() : null\n        };\n    }\n    static fromJSON(json, parent = null) {\n        const node = new BKDNode(json.point, json.docIDs);\n        node.parent = parent;\n        if (json.left) {\n            node.left = BKDNode.fromJSON(json.left, node);\n        }\n        if (json.right) {\n            node.right = BKDNode.fromJSON(json.right, node);\n        }\n        return node;\n    }\n}\nexport class BKDTree {\n    root;\n    nodeMap;\n    constructor() {\n        this.root = null;\n        this.nodeMap = new Map();\n    }\n    getPointKey(point) {\n        return `${point.lon},${point.lat}`;\n    }\n    insert(point, docIDs) {\n        const pointKey = this.getPointKey(point);\n        const existingNode = this.nodeMap.get(pointKey);\n        if (existingNode) {\n            docIDs.forEach((id) => existingNode.docIDs.add(id));\n            return;\n        }\n        const newNode = new BKDNode(point, docIDs);\n        this.nodeMap.set(pointKey, newNode);\n        if (this.root == null) {\n            this.root = newNode;\n            return;\n        }\n        let node = this.root;\n        let depth = 0;\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const axis = depth % K;\n            if (axis === 0) {\n                if (point.lon < node.point.lon) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            else {\n                if (point.lat < node.point.lat) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            depth++;\n        }\n    }\n    contains(point) {\n        const pointKey = this.getPointKey(point);\n        return this.nodeMap.has(pointKey);\n    }\n    getDocIDsByCoordinates(point) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            return Array.from(node.docIDs);\n        }\n        return null;\n    }\n    removeDocByID(point, docID) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            node.docIDs.delete(docID);\n            if (node.docIDs.size === 0) {\n                this.nodeMap.delete(pointKey);\n                this.deleteNode(node);\n            }\n        }\n    }\n    deleteNode(node) {\n        const parent = node.parent;\n        const child = node.left ? node.left : node.right;\n        if (child) {\n            child.parent = parent;\n        }\n        if (parent) {\n            if (parent.left === node) {\n                parent.left = child;\n            }\n            else if (parent.right === node) {\n                parent.right = child;\n            }\n        }\n        else {\n            this.root = child;\n            if (this.root) {\n                this.root.parent = null;\n            }\n        }\n    }\n    searchByRadius(center, radius, inclusive = true, sort = 'asc', highPrecision = false) {\n        const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            const dist = distanceFn(center, node.point);\n            if (inclusive ? dist <= radius : dist > radius) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n        }\n        if (sort) {\n            result.sort((a, b) => {\n                const distA = distanceFn(center, a.point);\n                const distB = distanceFn(center, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    searchByPolygon(polygon, inclusive = true, sort = null, highPrecision = false) {\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n            const isInsidePolygon = BKDTree.isPointInPolygon(polygon, node.point);\n            if ((isInsidePolygon && inclusive) || (!isInsidePolygon && !inclusive)) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n        }\n        const centroid = BKDTree.calculatePolygonCentroid(polygon);\n        if (sort) {\n            const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n            result.sort((a, b) => {\n                const distA = distanceFn(centroid, a.point);\n                const distB = distanceFn(centroid, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null\n        };\n    }\n    static fromJSON(json) {\n        const tree = new BKDTree();\n        if (json.root) {\n            tree.root = BKDNode.fromJSON(json.root);\n            tree.buildNodeMap(tree.root);\n        }\n        return tree;\n    }\n    buildNodeMap(node) {\n        if (node == null)\n            return;\n        const pointKey = this.getPointKey(node.point);\n        this.nodeMap.set(pointKey, node);\n        if (node.left) {\n            this.buildNodeMap(node.left);\n        }\n        if (node.right) {\n            this.buildNodeMap(node.right);\n        }\n    }\n    static calculatePolygonCentroid(polygon) {\n        let totalArea = 0;\n        let centroidX = 0;\n        let centroidY = 0;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const areaSegment = xi * yj - xj * yi;\n            totalArea += areaSegment;\n            centroidX += (xi + xj) * areaSegment;\n            centroidY += (yi + yj) * areaSegment;\n        }\n        totalArea /= 2;\n        const centroidCoordinate = 6 * totalArea;\n        centroidX /= centroidCoordinate;\n        centroidY /= centroidCoordinate;\n        return { lon: centroidX, lat: centroidY };\n    }\n    static isPointInPolygon(polygon, point) {\n        let isInside = false;\n        const x = point.lon;\n        const y = point.lat;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n            if (intersect)\n                isInside = !isInside;\n        }\n        return isInside;\n    }\n    static haversineDistance(coord1, coord2) {\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLat = (coord2.lat - coord1.lat) * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\n            Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);\n        const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n        return EARTH_RADIUS * c;\n    }\n    static vincentyDistance(coord1, coord2) {\n        const a = 6378137;\n        const f = 1 / 298.257223563;\n        const b = (1 - f) * a;\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const U1 = Math.atan((1 - f) * Math.tan(lat1));\n        const U2 = Math.atan((1 - f) * Math.tan(lat2));\n        const sinU1 = Math.sin(U1);\n        const cosU1 = Math.cos(U1);\n        const sinU2 = Math.sin(U2);\n        const cosU2 = Math.cos(U2);\n        let lambda = deltaLon;\n        let prevLambda;\n        let iterationLimit = 1000;\n        let sinSigma;\n        let cosSigma;\n        let sigma;\n        let sinAlpha;\n        let cos2Alpha;\n        let cos2SigmaM;\n        do {\n            const sinLambda = Math.sin(lambda);\n            const cosLambda = Math.cos(lambda);\n            sinSigma = Math.sqrt(cosU2 * sinLambda * (cosU2 * sinLambda) +\n                (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n            if (sinSigma === 0)\n                return 0; // co-incident points\n            cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n            sigma = Math.atan2(sinSigma, cosSigma);\n            sinAlpha = (cosU1 * cosU2 * sinLambda) / sinSigma;\n            cos2Alpha = 1 - sinAlpha * sinAlpha;\n            cos2SigmaM = cosSigma - (2 * sinU1 * sinU2) / cos2Alpha;\n            if (isNaN(cos2SigmaM))\n                cos2SigmaM = 0;\n            const C = (f / 16) * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n            prevLambda = lambda;\n            lambda =\n                deltaLon +\n                    (1 - C) *\n                        f *\n                        sinAlpha *\n                        (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n        } while (Math.abs(lambda - prevLambda) > 1e-12 && --iterationLimit > 0);\n        if (iterationLimit === 0) {\n            return NaN;\n        }\n        const uSquared = (cos2Alpha * (a * a - b * b)) / (b * b);\n        const A = 1 + (uSquared / 16384) * (4096 + uSquared * (-768 + uSquared * (320 - 175 * uSquared)));\n        const B = (uSquared / 1024) * (256 + uSquared * (-128 + uSquared * (74 - 47 * uSquared)));\n        const deltaSigma = B *\n            sinSigma *\n            (cos2SigmaM +\n                (B / 4) *\n                    (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) -\n                        (B / 6) * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n        const s = b * A * (sigma - deltaSigma);\n        return s;\n    }\n}\n//# sourceMappingURL=bkd.js.map","export class BoolNode {\n    true;\n    false;\n    constructor() {\n        this.true = new Set();\n        this.false = new Set();\n    }\n    insert(value, bool) {\n        if (bool) {\n            this.true.add(value);\n        }\n        else {\n            this.false.add(value);\n        }\n    }\n    delete(value, bool) {\n        if (bool) {\n            this.true.delete(value);\n        }\n        else {\n            this.false.delete(value);\n        }\n    }\n    getSize() {\n        return this.true.size + this.false.size;\n    }\n    toJSON() {\n        return {\n            true: Array.from(this.true),\n            false: Array.from(this.false)\n        };\n    }\n    static fromJSON(json) {\n        const node = new BoolNode();\n        node.true = new Set(json.true);\n        node.false = new Set(json.false);\n        return node;\n    }\n}\n//# sourceMappingURL=bool.js.map","import { createError } from '../errors.js';\nexport function prioritizeTokenScores(arrays, boost, threshold = 0, keywordsCount) {\n    if (boost === 0) {\n        throw createError('INVALID_BOOST_VALUE');\n    }\n    const tokenScoresMap = new Map();\n    const mapsLength = arrays.length;\n    for (let i = 0; i < mapsLength; i++) {\n        const arr = arrays[i];\n        const entriesLength = arr.length;\n        for (let j = 0; j < entriesLength; j++) {\n            const [token, score] = arr[j];\n            const boostScore = score * boost;\n            const oldScore = tokenScoresMap.get(token)?.[0];\n            if (oldScore !== undefined) {\n                tokenScoresMap.set(token, [oldScore * 1.5 + boostScore, (tokenScoresMap?.get(token)?.[1] || 0) + 1]);\n            }\n            else {\n                tokenScoresMap.set(token, [boostScore, 1]);\n            }\n        }\n    }\n    const tokenScores = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScores.push([tokenScoreEntry[0], tokenScoreEntry[1][0]]);\n    }\n    const results = tokenScores.sort((a, b) => b[1] - a[1]);\n    // If threshold is 1, it means we will return all the results with at least one search term,\n    // prioritizing the ones that contains more search terms (fuzzy match)\n    if (threshold === 1) {\n        return results;\n    }\n    // For threshold = 0 when keywordsCount is 1 (single term search),\n    // we return all matches since they automatically contain 100% of keywords\n    if (threshold === 0 && keywordsCount === 1) {\n        return results;\n    }\n    // Prepare keywords count tracking for threshold handling\n    const allResults = results.length;\n    const tokenScoreWithKeywordsCount = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScoreWithKeywordsCount.push([tokenScoreEntry[0], tokenScoreEntry[1][0], tokenScoreEntry[1][1]]);\n    }\n    // Find the index of the last result with all keywords.\n    // Order the documents by the number of keywords they contain, and then by the score.\n    const keywordsPerToken = tokenScoreWithKeywordsCount.sort((a, b) => {\n        // Compare by the third element, higher numbers first\n        if (a[2] > b[2])\n            return -1;\n        if (a[2] < b[2])\n            return 1;\n        // If the third elements are equal, compare by the second element, higher numbers first\n        if (a[1] > b[1])\n            return -1;\n        if (a[1] < b[1])\n            return 1;\n        // If both the second and third elements are equal, consider the elements equal\n        return 0;\n    });\n    let lastTokenWithAllKeywords = undefined;\n    for (let i = 0; i < allResults; i++) {\n        if (keywordsPerToken[i][2] === keywordsCount) {\n            lastTokenWithAllKeywords = i;\n        }\n        else {\n            break;\n        }\n    }\n    // If no results had all the keywords, either bail out earlier or normalize\n    if (typeof lastTokenWithAllKeywords === 'undefined') {\n        if (threshold === 0) {\n            return [];\n        }\n        lastTokenWithAllKeywords = 0;\n    }\n    const keywordsPerTokenLength = keywordsPerToken.length;\n    const resultsWithIdAndScore = new Array(keywordsPerTokenLength);\n    for (let i = 0; i < keywordsPerTokenLength; i++) {\n        resultsWithIdAndScore[i] = [keywordsPerToken[i][0], keywordsPerToken[i][1]];\n    }\n    // If threshold is 0, it means we will only return all the results that contains ALL the search terms (exact match)\n    if (threshold === 0) {\n        return resultsWithIdAndScore.slice(0, lastTokenWithAllKeywords + 1);\n    }\n    // If the threshold is between 0 and 1, we will return all the results that contains at least the threshold of search terms\n    // For example, if threshold is 0.5, we will return all the results that contains at least 50% of the search terms\n    // (fuzzy match with a minimum threshold)\n    const thresholdLength = lastTokenWithAllKeywords + Math.ceil((threshold * 100 * (allResults - lastTokenWithAllKeywords)) / 100);\n    return resultsWithIdAndScore.slice(0, Math.min(allResults, thresholdLength));\n}\nexport function BM25(tf, matchingCount, docsCount, fieldLength, averageFieldLength, { k, b, d }) {\n    const idf = Math.log(1 + (docsCount - matchingCount + 0.5) / (matchingCount + 0.5));\n    return (idf * (d + tf * (k + 1))) / (tf + k * (1 - b + (b * fieldLength) / averageFieldLength));\n}\n//# sourceMappingURL=algorithms.js.map","export const DEFAULT_SIMILARITY = 0.8;\nexport class VectorIndex {\n    size;\n    vectors = new Map();\n    constructor(size) {\n        this.size = size;\n    }\n    add(internalDocumentId, value) {\n        if (!(value instanceof Float32Array)) {\n            value = new Float32Array(value);\n        }\n        const magnitude = getMagnitude(value, this.size);\n        this.vectors.set(internalDocumentId, [magnitude, value]);\n    }\n    remove(internalDocumentId) {\n        this.vectors.delete(internalDocumentId);\n    }\n    find(vector, similarity, whereFiltersIDs) {\n        if (!(vector instanceof Float32Array)) {\n            vector = new Float32Array(vector);\n        }\n        const results = findSimilarVectors(vector, whereFiltersIDs, this.vectors, this.size, similarity);\n        return results;\n    }\n    toJSON() {\n        const vectors = [];\n        for (const [id, [magnitude, vector]] of this.vectors) {\n            vectors.push([id, [magnitude, Array.from(vector)]]);\n        }\n        return {\n            size: this.size,\n            vectors\n        };\n    }\n    static fromJSON(json) {\n        const raw = json;\n        const index = new VectorIndex(raw.size);\n        for (const [id, [magnitude, vector]] of raw.vectors) {\n            index.vectors.set(id, [magnitude, new Float32Array(vector)]);\n        }\n        return index;\n    }\n}\nexport function getMagnitude(vector, vectorLength) {\n    let magnitude = 0;\n    for (let i = 0; i < vectorLength; i++) {\n        magnitude += vector[i] * vector[i];\n    }\n    return Math.sqrt(magnitude);\n}\n// @todo: Write plugins for Node and Browsers to use parallel computation for this function\nexport function findSimilarVectors(targetVector, keys, vectors, length, threshold) {\n    const targetMagnitude = getMagnitude(targetVector, length);\n    const similarVectors = [];\n    const base = keys ? keys : vectors.keys();\n    for (const vectorId of base) {\n        const entry = vectors.get(vectorId);\n        if (!entry) {\n            continue;\n        }\n        const magnitude = entry[0];\n        const vector = entry[1];\n        let dotProduct = 0;\n        for (let i = 0; i < length; i++) {\n            dotProduct += targetVector[i] * vector[i];\n        }\n        const similarity = dotProduct / (targetMagnitude * magnitude);\n        if (similarity >= threshold) {\n            similarVectors.push([vectorId, similarity]);\n        }\n    }\n    return similarVectors;\n}\n//# sourceMappingURL=vector.js.map","import { createError } from '../errors.js';\nimport { AVLTree } from '../trees/avl.js';\nimport { FlatTree } from '../trees/flat.js';\nimport { RadixTree } from '../trees/radix.js';\nimport { BKDTree } from '../trees/bkd.js';\nimport { BoolNode } from '../trees/bool.js';\nimport { convertDistanceToMeters, setIntersection, setUnion, setDifference } from '../utils.js';\nimport { BM25 } from './algorithms.js';\nimport { getInnerType, getVectorSize, isArrayType, isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { VectorIndex } from '../trees/vector.js';\nexport function insertDocumentScoreParameters(index, prop, id, tokens, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    index.avgFieldLength[prop] = ((index.avgFieldLength[prop] ?? 0) * (docsCount - 1) + tokens.length) / docsCount;\n    index.fieldLengths[prop][internalId] = tokens.length;\n    index.frequencies[prop][internalId] = {};\n}\nexport function insertTokenScoreParameters(index, prop, id, tokens, token) {\n    let tokenFrequency = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            tokenFrequency++;\n        }\n    }\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    const tf = tokenFrequency / tokens.length;\n    index.frequencies[prop][internalId][token] = tf;\n    if (!(token in index.tokenOccurrences[prop])) {\n        index.tokenOccurrences[prop][token] = 0;\n    }\n    // increase a token counter that may not yet exist\n    index.tokenOccurrences[prop][token] = (index.tokenOccurrences[prop][token] ?? 0) + 1;\n}\nexport function removeDocumentScoreParameters(index, prop, id, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    if (docsCount > 1) {\n        index.avgFieldLength[prop] =\n            (index.avgFieldLength[prop] * docsCount - index.fieldLengths[prop][internalId]) / (docsCount - 1);\n    }\n    else {\n        index.avgFieldLength[prop] = undefined;\n    }\n    index.fieldLengths[prop][internalId] = undefined;\n    index.frequencies[prop][internalId] = undefined;\n}\nexport function removeTokenScoreParameters(index, prop, token) {\n    index.tokenOccurrences[prop][token]--;\n}\nexport function create(orama, sharedInternalDocumentStore, schema, index, prefix = '') {\n    if (!index) {\n        index = {\n            sharedInternalDocumentStore,\n            indexes: {},\n            vectorIndexes: {},\n            searchableProperties: [],\n            searchablePropertiesWithTypes: {},\n            frequencies: {},\n            tokenOccurrences: {},\n            avgFieldLength: {},\n            fieldLengths: {}\n        };\n    }\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            create(orama, sharedInternalDocumentStore, type, index, path);\n            continue;\n        }\n        if (isVectorType(type)) {\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n            index.vectorIndexes[path] = {\n                type: 'Vector',\n                node: new VectorIndex(getVectorSize(type)),\n                isArray: false\n            };\n        }\n        else {\n            const isArray = /\\[/.test(type);\n            switch (type) {\n                case 'boolean':\n                case 'boolean[]':\n                    index.indexes[path] = { type: 'Bool', node: new BoolNode(), isArray };\n                    break;\n                case 'number':\n                case 'number[]':\n                    index.indexes[path] = { type: 'AVL', node: new AVLTree(0, []), isArray };\n                    break;\n                case 'string':\n                case 'string[]':\n                    index.indexes[path] = { type: 'Radix', node: new RadixTree(), isArray };\n                    index.avgFieldLength[path] = 0;\n                    index.frequencies[path] = {};\n                    index.tokenOccurrences[path] = {};\n                    index.fieldLengths[path] = {};\n                    break;\n                case 'enum':\n                case 'enum[]':\n                    index.indexes[path] = { type: 'Flat', node: new FlatTree(), isArray };\n                    break;\n                case 'geopoint':\n                    index.indexes[path] = { type: 'BKD', node: new BKDTree(), isArray };\n                    break;\n                default:\n                    throw createError('INVALID_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n        }\n    }\n    return index;\n}\nfunction insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options) {\n    return (value) => {\n        const { type, node } = index.indexes[prop];\n        switch (type) {\n            case 'Bool': {\n                node[value ? 'true' : 'false'].add(internalId);\n                break;\n            }\n            case 'AVL': {\n                const avlRebalanceThreshold = options?.avlRebalanceThreshold ?? 1;\n                node.insert(value, internalId, avlRebalanceThreshold);\n                break;\n            }\n            case 'Radix': {\n                const tokens = tokenizer.tokenize(value, language, prop, false);\n                implementation.insertDocumentScoreParameters(index, prop, internalId, tokens, docsCount);\n                for (const token of tokens) {\n                    implementation.insertTokenScoreParameters(index, prop, internalId, tokens, token);\n                    node.insert(token, internalId);\n                }\n                break;\n            }\n            case 'Flat': {\n                node.insert(value, internalId);\n                break;\n            }\n            case 'BKD': {\n                node.insert(value, [internalId]);\n                break;\n            }\n        }\n    };\n}\nexport function insert(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount, options) {\n    if (isVectorType(schemaType)) {\n        return insertVector(index, prop, value, id, internalId);\n    }\n    const insertScalar = insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options);\n    if (!isArrayType(schemaType)) {\n        return insertScalar(value);\n    }\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        insertScalar(elements[i]);\n    }\n}\nexport function insertVector(index, prop, value, id, internalDocumentId) {\n    index.vectorIndexes[prop].node.add(internalDocumentId, value);\n}\nfunction removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (isVectorType(schemaType)) {\n        index.vectorIndexes[prop].node.remove(internalId);\n        return true;\n    }\n    const { type, node } = index.indexes[prop];\n    switch (type) {\n        case 'AVL': {\n            node.removeDocument(value, internalId);\n            return true;\n        }\n        case 'Bool': {\n            node[value ? 'true' : 'false'].delete(internalId);\n            return true;\n        }\n        case 'Radix': {\n            const tokens = tokenizer.tokenize(value, language, prop);\n            implementation.removeDocumentScoreParameters(index, prop, id, docsCount);\n            for (const token of tokens) {\n                implementation.removeTokenScoreParameters(index, prop, token);\n                node.removeDocumentByWord(token, internalId);\n            }\n            return true;\n        }\n        case 'Flat': {\n            node.removeDocument(internalId, value);\n            return true;\n        }\n        case 'BKD': {\n            node.removeDocByID(value, internalId);\n            return false;\n        }\n    }\n}\nexport function remove(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (!isArrayType(schemaType)) {\n        return removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount);\n    }\n    const innerSchemaType = getInnerType(schemaType);\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        removeScalar(implementation, index, prop, id, internalId, elements[i], innerSchemaType, language, tokenizer, docsCount);\n    }\n    return true;\n}\nexport function calculateResultScores(index, prop, term, ids, docsCount, bm25Relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap) {\n    const documentIDs = Array.from(ids);\n    const avgFieldLength = index.avgFieldLength[prop];\n    const fieldLengths = index.fieldLengths[prop];\n    const oramaOccurrences = index.tokenOccurrences[prop];\n    const oramaFrequencies = index.frequencies[prop];\n    // oramaOccurrences[term] can be undefined, 0, string, or { [k: string]: number }\n    const termOccurrences = typeof oramaOccurrences[term] === 'number' ? (oramaOccurrences[term] ?? 0) : 0;\n    // Calculate TF-IDF value for each term, in each document, for each index.\n    const documentIDsLength = documentIDs.length;\n    for (let k = 0; k < documentIDsLength; k++) {\n        const internalId = documentIDs[k];\n        if (whereFiltersIDs && !whereFiltersIDs.has(internalId)) {\n            continue;\n        }\n        // Track keyword matches per property\n        if (!keywordMatchesMap.has(internalId)) {\n            keywordMatchesMap.set(internalId, new Map());\n        }\n        const propertyMatches = keywordMatchesMap.get(internalId);\n        propertyMatches.set(prop, (propertyMatches.get(prop) || 0) + 1);\n        const tf = oramaFrequencies?.[internalId]?.[term] ?? 0;\n        const bm25 = BM25(tf, termOccurrences, docsCount, fieldLengths[internalId], avgFieldLength, bm25Relevance);\n        if (resultsMap.has(internalId)) {\n            resultsMap.set(internalId, resultsMap.get(internalId) + bm25 * boostPerProperty);\n        }\n        else {\n            resultsMap.set(internalId, bm25 * boostPerProperty);\n        }\n    }\n}\nexport function search(index, term, tokenizer, language, propertiesToSearch, exact, tolerance, boost, relevance, docsCount, whereFiltersIDs, threshold = 0) {\n    const tokens = tokenizer.tokenize(term, language);\n    const keywordsCount = tokens.length || 1;\n    // Track keyword matches per document and property\n    const keywordMatchesMap = new Map();\n    // Track which tokens were found in the search\n    const tokenFoundMap = new Map();\n    const resultsMap = new Map();\n    for (const prop of propertiesToSearch) {\n        if (!(prop in index.indexes)) {\n            continue;\n        }\n        const tree = index.indexes[prop];\n        const { type } = tree;\n        if (type !== 'Radix') {\n            throw createError('WRONG_SEARCH_PROPERTY_TYPE', prop);\n        }\n        const boostPerProperty = boost[prop] ?? 1;\n        if (boostPerProperty <= 0) {\n            throw createError('INVALID_BOOST_VALUE', boostPerProperty);\n        }\n        // if the tokenizer returns an empty array, we returns all the documents\n        if (tokens.length === 0 && !term) {\n            tokens.push('');\n        }\n        // Process each token in the search term\n        const tokenLength = tokens.length;\n        for (let i = 0; i < tokenLength; i++) {\n            const token = tokens[i];\n            const searchResult = tree.node.find({ term: token, exact, tolerance });\n            // See if this token was found (for threshold=0 filtering)\n            const termsFound = Object.keys(searchResult);\n            if (termsFound.length > 0) {\n                tokenFoundMap.set(token, true);\n            }\n            // Process each matching term\n            const termsFoundLength = termsFound.length;\n            for (let j = 0; j < termsFoundLength; j++) {\n                const word = termsFound[j];\n                const ids = searchResult[word];\n                calculateResultScores(index, prop, word, ids, docsCount, relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap);\n            }\n        }\n    }\n    // Convert to array and sort by score\n    const results = Array.from(resultsMap.entries())\n        .map(([id, score]) => [id, score])\n        .sort((a, b) => b[1] - a[1]);\n    if (results.length === 0) {\n        return [];\n    }\n    // If threshold is 1, return all results\n    if (threshold === 1) {\n        return results;\n    }\n    // For threshold=0, check if all tokens were found\n    if (threshold === 0) {\n        // Quick return for single tokens - already validated\n        if (keywordsCount === 1) {\n            return results;\n        }\n        // For multiple tokens, verify that ALL tokens were found\n        // If any token wasn't found, return an empty result\n        for (const token of tokens) {\n            if (!tokenFoundMap.get(token)) {\n                return [];\n            }\n        }\n        // Find documents that have all keywords in at least one property\n        const fullMatches = results.filter(([id]) => {\n            const propertyMatches = keywordMatchesMap.get(id);\n            if (!propertyMatches)\n                return false;\n            // Check if any property has all keywords\n            return Array.from(propertyMatches.values()).some((matches) => matches === keywordsCount);\n        });\n        return fullMatches;\n    }\n    // Find documents that have all keywords in at least one property\n    const fullMatches = results.filter(([id]) => {\n        const propertyMatches = keywordMatchesMap.get(id);\n        if (!propertyMatches)\n            return false;\n        // Check if any property has all keywords\n        return Array.from(propertyMatches.values()).some((matches) => matches === keywordsCount);\n    });\n    // If we have full matches and threshold < 1, return full matches plus a percentage of partial matches\n    if (fullMatches.length > 0) {\n        const remainingResults = results.filter(([id]) => !fullMatches.some(([fid]) => fid === id));\n        const additionalResults = Math.ceil(remainingResults.length * threshold);\n        return [...fullMatches, ...remainingResults.slice(0, additionalResults)];\n    }\n    // If no full matches, return all results\n    return results;\n}\nexport function searchByWhereClause(index, tokenizer, filters, language) {\n    // Handle logical operators\n    if ('and' in filters && filters.and && Array.isArray(filters.and)) {\n        const andFilters = filters.and;\n        if (andFilters.length === 0) {\n            return new Set();\n        }\n        const results = andFilters.map((filter) => searchByWhereClause(index, tokenizer, filter, language));\n        return setIntersection(...results);\n    }\n    if ('or' in filters && filters.or && Array.isArray(filters.or)) {\n        const orFilters = filters.or;\n        if (orFilters.length === 0) {\n            return new Set();\n        }\n        const results = orFilters.map((filter) => searchByWhereClause(index, tokenizer, filter, language));\n        // Use reduce to union all sets\n        return results.reduce((acc, set) => setUnion(acc, set), new Set());\n    }\n    if ('not' in filters && filters.not) {\n        const notFilter = filters.not;\n        // Get all document IDs from the internal document store\n        const allDocs = new Set();\n        // Get all document IDs from the internal document store\n        const docsStore = index.sharedInternalDocumentStore;\n        for (let i = 1; i <= docsStore.internalIdToId.length; i++) {\n            allDocs.add(i);\n        }\n        const notResult = searchByWhereClause(index, tokenizer, notFilter, language);\n        return setDifference(allDocs, notResult);\n    }\n    // Handle regular property filters (existing logic)\n    const filterKeys = Object.keys(filters);\n    const filtersMap = filterKeys.reduce((acc, key) => ({\n        [key]: new Set(),\n        ...acc\n    }), {});\n    for (const param of filterKeys) {\n        const operation = filters[param];\n        if (typeof index.indexes[param] === 'undefined') {\n            throw createError('UNKNOWN_FILTER_PROPERTY', param);\n        }\n        const { node, type, isArray } = index.indexes[param];\n        if (type === 'Bool') {\n            const idx = node;\n            const filteredIDs = operation ? idx.true : idx.false;\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n            continue;\n        }\n        if (type === 'BKD') {\n            let reqOperation;\n            if ('radius' in operation) {\n                reqOperation = 'radius';\n            }\n            else if ('polygon' in operation) {\n                reqOperation = 'polygon';\n            }\n            else {\n                throw new Error(`Invalid operation ${operation}`);\n            }\n            if (reqOperation === 'radius') {\n                const { value, coordinates, unit = 'm', inside = true, highPrecision = false } = operation[reqOperation];\n                const distanceInMeters = convertDistanceToMeters(value, unit);\n                const ids = node.searchByRadius(coordinates, distanceInMeters, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            else {\n                const { coordinates, inside = true, highPrecision = false } = operation[reqOperation];\n                const ids = node.searchByPolygon(coordinates, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            continue;\n        }\n        if (type === 'Radix' && (typeof operation === 'string' || Array.isArray(operation))) {\n            for (const raw of [operation].flat()) {\n                const term = tokenizer.tokenize(raw, language, param);\n                for (const t of term) {\n                    const filteredIDsResults = node.find({ term: t, exact: true });\n                    filtersMap[param] = addFindResult(filtersMap[param], filteredIDsResults);\n                }\n            }\n            continue;\n        }\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length > 1) {\n            throw createError('INVALID_FILTER_OPERATION', operationKeys.length);\n        }\n        if (type === 'Flat') {\n            const results = new Set(isArray\n                ? node.filterArr(operation)\n                : node.filter(operation));\n            filtersMap[param] = setUnion(filtersMap[param], results);\n            continue;\n        }\n        if (type === 'AVL') {\n            const operationOpt = operationKeys[0];\n            const operationValue = operation[operationOpt];\n            let filteredIDs;\n            switch (operationOpt) {\n                case 'gt': {\n                    filteredIDs = node.greaterThan(operationValue, false);\n                    break;\n                }\n                case 'gte': {\n                    filteredIDs = node.greaterThan(operationValue, true);\n                    break;\n                }\n                case 'lt': {\n                    filteredIDs = node.lessThan(operationValue, false);\n                    break;\n                }\n                case 'lte': {\n                    filteredIDs = node.lessThan(operationValue, true);\n                    break;\n                }\n                case 'eq': {\n                    const ret = node.find(operationValue);\n                    filteredIDs = ret ?? new Set();\n                    break;\n                }\n                case 'between': {\n                    const [min, max] = operationValue;\n                    filteredIDs = node.rangeSearch(min, max);\n                    break;\n                }\n                default:\n                    throw createError('INVALID_FILTER_OPERATION', operationOpt);\n            }\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n        }\n    }\n    // AND operation: calculate the intersection between all the IDs in filterMap\n    return setIntersection(...Object.values(filtersMap));\n}\nexport function getSearchableProperties(index) {\n    return index.searchableProperties;\n}\nexport function getSearchablePropertiesWithTypes(index) {\n    return index.searchablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const { indexes: rawIndexes, vectorIndexes: rawVectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = raw;\n    const indexes = {};\n    const vectorIndexes = {};\n    for (const prop of Object.keys(rawIndexes)) {\n        const { node, type, isArray } = rawIndexes[prop];\n        switch (type) {\n            case 'Radix':\n                indexes[prop] = {\n                    type: 'Radix',\n                    node: RadixTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Flat':\n                indexes[prop] = {\n                    type: 'Flat',\n                    node: FlatTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'AVL':\n                indexes[prop] = {\n                    type: 'AVL',\n                    node: AVLTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'BKD':\n                indexes[prop] = {\n                    type: 'BKD',\n                    node: BKDTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Bool':\n                indexes[prop] = {\n                    type: 'Bool',\n                    node: BoolNode.fromJSON(node),\n                    isArray\n                };\n                break;\n            default:\n                indexes[prop] = rawIndexes[prop];\n        }\n    }\n    for (const idx of Object.keys(rawVectorIndexes)) {\n        vectorIndexes[idx] = {\n            type: 'Vector',\n            isArray: false,\n            node: VectorIndex.fromJSON(rawVectorIndexes[idx])\n        };\n    }\n    return {\n        sharedInternalDocumentStore,\n        indexes,\n        vectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function save(index) {\n    const { indexes, vectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = index;\n    const dumpVectorIndexes = {};\n    for (const idx of Object.keys(vectorIndexes)) {\n        dumpVectorIndexes[idx] = vectorIndexes[idx].node.toJSON();\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const savedIndexes = {};\n    for (const name of Object.keys(indexes)) {\n        const { type, node, isArray } = indexes[name];\n        if (type === 'Flat' || type === 'Radix' || type === 'AVL' || type === 'BKD' || type === 'Bool') {\n            savedIndexes[name] = {\n                type,\n                node: node.toJSON(),\n                isArray\n            };\n        }\n        else {\n            savedIndexes[name] = indexes[name];\n            savedIndexes[name].node = savedIndexes[name].node.toJSON();\n        }\n    }\n    return {\n        indexes: savedIndexes,\n        vectorIndexes: dumpVectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function createIndex() {\n    return {\n        create,\n        insert,\n        remove,\n        insertDocumentScoreParameters,\n        insertTokenScoreParameters,\n        removeDocumentScoreParameters,\n        removeTokenScoreParameters,\n        calculateResultScores,\n        search,\n        searchByWhereClause,\n        getSearchableProperties,\n        getSearchablePropertiesWithTypes,\n        load,\n        save\n    };\n}\nfunction addGeoResult(set, ids) {\n    if (!set) {\n        set = new Set();\n    }\n    const idsLength = ids.length;\n    for (let i = 0; i < idsLength; i++) {\n        const entry = ids[i].docIDs;\n        const idsLength = entry.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(entry[j]);\n        }\n    }\n    return set;\n}\nfunction createGeoTokenScores(ids, centerPoint, highPrecision = false) {\n    const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n    const results = [];\n    // Calculate distances for all results to find the maximum\n    const distances = [];\n    for (const { point } of ids) {\n        distances.push(distanceFn(centerPoint, point));\n    }\n    const maxDistance = Math.max(...distances);\n    // Create results with inverse distance scores (higher score = closer)\n    let index = 0;\n    for (const { docIDs } of ids) {\n        const distance = distances[index];\n        // Use inverse score: closer points get higher scores\n        // Add 1 to avoid division by zero for points at exact center\n        const score = maxDistance - distance + 1;\n        for (const docID of docIDs) {\n            results.push([docID, score]);\n        }\n        index++;\n    }\n    // Sort by score (higher first - closer points)\n    results.sort((a, b) => b[1] - a[1]);\n    return results;\n}\nfunction isGeosearchOnlyQuery(filters, index) {\n    const filterKeys = Object.keys(filters);\n    if (filterKeys.length !== 1) {\n        return { isGeoOnly: false };\n    }\n    const param = filterKeys[0];\n    const operation = filters[param];\n    if (typeof index.indexes[param] === 'undefined') {\n        return { isGeoOnly: false };\n    }\n    const { type } = index.indexes[param];\n    if (type === 'BKD' && operation && ('radius' in operation || 'polygon' in operation)) {\n        return { isGeoOnly: true, geoProperty: param, geoOperation: operation };\n    }\n    return { isGeoOnly: false };\n}\nexport function searchByGeoWhereClause(index, filters) {\n    const indexTyped = index;\n    const geoInfo = isGeosearchOnlyQuery(filters, indexTyped);\n    if (!geoInfo.isGeoOnly || !geoInfo.geoProperty || !geoInfo.geoOperation) {\n        return null;\n    }\n    const { node } = indexTyped.indexes[geoInfo.geoProperty];\n    const operation = geoInfo.geoOperation;\n    // Cast node to BKDTree since we already verified it's type 'BKD'\n    const bkdNode = node;\n    let results;\n    if ('radius' in operation) {\n        const { value, coordinates, unit = 'm', inside = true, highPrecision = false } = operation.radius;\n        const centerPoint = coordinates;\n        const distanceInMeters = convertDistanceToMeters(value, unit);\n        results = bkdNode.searchByRadius(centerPoint, distanceInMeters, inside, 'asc', highPrecision);\n        return createGeoTokenScores(results, centerPoint, highPrecision);\n    }\n    else if ('polygon' in operation) {\n        const { coordinates, inside = true, highPrecision = false } = operation.polygon;\n        results = bkdNode.searchByPolygon(coordinates, inside, 'asc', highPrecision);\n        const centroid = BKDTree.calculatePolygonCentroid(coordinates);\n        return createGeoTokenScores(results, centroid, highPrecision);\n    }\n    return null;\n}\nfunction addFindResult(set, filteredIDsResults) {\n    if (!set) {\n        set = new Set();\n    }\n    const keys = Object.keys(filteredIDsResults);\n    const keysLength = keys.length;\n    for (let i = 0; i < keysLength; i++) {\n        const ids = filteredIDsResults[keys[i]];\n        const idsLength = ids.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(ids[j]);\n        }\n    }\n    return set;\n}\n//# sourceMappingURL=index.js.map","import { createError } from '../errors.js';\nimport { isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { safeArrayPush } from '../utils.js';\nimport { getLocale } from './tokenizer/languages.js';\nfunction innerCreate(orama, sharedInternalDocumentStore, schema, sortableDeniedProperties, prefix) {\n    const sorter = {\n        language: orama.tokenizer.language,\n        sharedInternalDocumentStore,\n        enabled: true,\n        isSorted: true,\n        sortableProperties: [],\n        sortablePropertiesWithTypes: {},\n        sorts: {}\n    };\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (sortableDeniedProperties.includes(path)) {\n            continue;\n        }\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            const ret = innerCreate(orama, sharedInternalDocumentStore, type, sortableDeniedProperties, path);\n            safeArrayPush(sorter.sortableProperties, ret.sortableProperties);\n            sorter.sorts = {\n                ...sorter.sorts,\n                ...ret.sorts\n            };\n            sorter.sortablePropertiesWithTypes = {\n                ...sorter.sortablePropertiesWithTypes,\n                ...ret.sortablePropertiesWithTypes\n            };\n            continue;\n        }\n        if (!isVectorType(type)) {\n            switch (type) {\n                case 'boolean':\n                case 'number':\n                case 'string':\n                    sorter.sortableProperties.push(path);\n                    sorter.sortablePropertiesWithTypes[path] = type;\n                    sorter.sorts[path] = {\n                        docs: new Map(),\n                        orderedDocsToRemove: new Map(),\n                        orderedDocs: [],\n                        type: type\n                    };\n                    break;\n                case 'geopoint':\n                case 'enum':\n                    // We don't allow to sort by enums or geopoints\n                    continue;\n                case 'enum[]':\n                case 'boolean[]':\n                case 'number[]':\n                case 'string[]':\n                    // We don't allow to sort by arrays\n                    continue;\n                default:\n                    throw createError('INVALID_SORT_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n        }\n    }\n    return sorter;\n}\nfunction create(orama, sharedInternalDocumentStore, schema, config) {\n    const isSortEnabled = config?.enabled !== false;\n    if (!isSortEnabled) {\n        return {\n            disabled: true\n        };\n    }\n    return innerCreate(orama, sharedInternalDocumentStore, schema, (config || {}).unsortableProperties || [], '');\n}\nfunction insert(sorter, prop, id, value) {\n    if (!sorter.enabled) {\n        return;\n    }\n    sorter.isSorted = false;\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const s = sorter.sorts[prop];\n    // This happen during a document updating\n    // Because we re-use the same internalId\n    // We need to clean-up the data structure before re-inserting\n    // to avoid duplicates in the orderedDocs array\n    // See: https://github.com/oramasearch/orama/issues/629\n    if (s.orderedDocsToRemove.has(internalId)) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n    s.docs.set(internalId, s.orderedDocs.length);\n    s.orderedDocs.push([internalId, value]);\n}\nfunction ensureIsSorted(sorter) {\n    if (sorter.isSorted || !sorter.enabled) {\n        return;\n    }\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensurePropertyIsSorted(sorter, prop);\n    }\n    sorter.isSorted = true;\n}\nfunction stringSort(language, value, d) {\n    return value[1].localeCompare(d[1], getLocale(language));\n}\nfunction numberSort(value, d) {\n    return value[1] - d[1];\n}\nfunction booleanSort(value, d) {\n    return d[1] ? -1 : 1;\n}\nfunction ensurePropertyIsSorted(sorter, prop) {\n    const s = sorter.sorts[prop];\n    let predicate;\n    switch (s.type) {\n        case 'string':\n            predicate = stringSort.bind(null, sorter.language);\n            break;\n        case 'number':\n            predicate = numberSort.bind(null);\n            break;\n        case 'boolean':\n            predicate = booleanSort.bind(null);\n            break;\n    }\n    s.orderedDocs.sort(predicate);\n    // Increment position for the greather documents\n    const orderedDocsLength = s.orderedDocs.length;\n    for (let i = 0; i < orderedDocsLength; i++) {\n        const docId = s.orderedDocs[i][0];\n        s.docs.set(docId, i);\n    }\n}\nfunction ensureOrderedDocsAreDeleted(sorter) {\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n}\nfunction ensureOrderedDocsAreDeletedByProperty(sorter, prop) {\n    const s = sorter.sorts[prop];\n    if (!s.orderedDocsToRemove.size)\n        return;\n    s.orderedDocs = s.orderedDocs.filter((doc) => !s.orderedDocsToRemove.has(doc[0]));\n    s.orderedDocsToRemove.clear();\n}\nfunction remove(sorter, prop, id) {\n    if (!sorter.enabled) {\n        return;\n    }\n    const s = sorter.sorts[prop];\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const index = s.docs.get(internalId);\n    if (!index)\n        return;\n    s.docs.delete(internalId);\n    s.orderedDocsToRemove.set(internalId, true);\n}\nfunction sortBy(sorter, docIds, by) {\n    if (!sorter.enabled) {\n        throw createError('SORT_DISABLED');\n    }\n    const property = by.property;\n    const isDesc = by.order === 'DESC';\n    const s = sorter.sorts[property];\n    if (!s) {\n        throw createError('UNABLE_TO_SORT_ON_UNKNOWN_FIELD', property, sorter.sortableProperties.join(', '));\n    }\n    ensureOrderedDocsAreDeletedByProperty(sorter, property);\n    ensureIsSorted(sorter);\n    docIds.sort((a, b) => {\n        // This sort algorithm works leveraging on\n        // that s.docs is a map of docId -> position\n        // If a document is not indexed, it will be not present in the map\n        const indexOfA = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, a[0]));\n        const indexOfB = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, b[0]));\n        const isAIndexed = typeof indexOfA !== 'undefined';\n        const isBIndexed = typeof indexOfB !== 'undefined';\n        if (!isAIndexed && !isBIndexed) {\n            return 0;\n        }\n        // unindexed documents are always at the end\n        if (!isAIndexed) {\n            return 1;\n        }\n        if (!isBIndexed) {\n            return -1;\n        }\n        return isDesc ? indexOfB - indexOfA : indexOfA - indexOfB;\n    });\n    return docIds;\n}\nfunction getSortableProperties(sorter) {\n    if (!sorter.enabled) {\n        return [];\n    }\n    return sorter.sortableProperties;\n}\nfunction getSortablePropertiesWithTypes(sorter) {\n    if (!sorter.enabled) {\n        return {};\n    }\n    return sorter.sortablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    if (!rawDocument.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    const sorts = Object.keys(rawDocument.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = rawDocument.sorts[prop];\n        acc[prop] = {\n            docs: new Map(Object.entries(docs).map(([k, v]) => [+k, v])),\n            orderedDocsToRemove: new Map(),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        sharedInternalDocumentStore,\n        language: rawDocument.language,\n        sortableProperties: rawDocument.sortableProperties,\n        sortablePropertiesWithTypes: rawDocument.sortablePropertiesWithTypes,\n        sorts,\n        enabled: true,\n        isSorted: rawDocument.isSorted\n    };\n}\nexport function save(sorter) {\n    if (!sorter.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    ensureOrderedDocsAreDeleted(sorter);\n    ensureIsSorted(sorter);\n    const sorts = Object.keys(sorter.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = sorter.sorts[prop];\n        acc[prop] = {\n            docs: Object.fromEntries(docs.entries()),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        language: sorter.language,\n        sortableProperties: sorter.sortableProperties,\n        sortablePropertiesWithTypes: sorter.sortablePropertiesWithTypes,\n        sorts,\n        enabled: sorter.enabled,\n        isSorted: sorter.isSorted\n    };\n}\nexport function createSorter() {\n    return {\n        create,\n        insert,\n        remove,\n        save,\n        load,\n        sortBy,\n        getSortableProperties,\n        getSortablePropertiesWithTypes\n    };\n}\n//# sourceMappingURL=sorter.js.map","const DIACRITICS_CHARCODE_START = 192;\nconst DIACRITICS_CHARCODE_END = 383;\nconst CHARCODE_REPLACE_MAPPING = [\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    67,\n    69,\n    69,\n    69,\n    69,\n    73,\n    73,\n    73,\n    73,\n    69,\n    78,\n    79,\n    79,\n    79,\n    79,\n    79,\n    null,\n    79,\n    85,\n    85,\n    85,\n    85,\n    89,\n    80,\n    115,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    99,\n    101,\n    101,\n    101,\n    101,\n    105,\n    105,\n    105,\n    105,\n    101,\n    110,\n    111,\n    111,\n    111,\n    111,\n    111,\n    null,\n    111,\n    117,\n    117,\n    117,\n    117,\n    121,\n    112,\n    121,\n    65,\n    97,\n    65,\n    97,\n    65,\n    97,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    68,\n    100,\n    68,\n    100,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    72,\n    104,\n    72,\n    104,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    74,\n    106,\n    75,\n    107,\n    107,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    78,\n    110,\n    78,\n    110,\n    78,\n    110,\n    110,\n    78,\n    110,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    82,\n    114,\n    82,\n    114,\n    82,\n    114,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    84,\n    116,\n    84,\n    116,\n    84,\n    116,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    87,\n    119,\n    89,\n    121,\n    89,\n    90,\n    122,\n    90,\n    122,\n    90,\n    122,\n    115\n];\nfunction replaceChar(charCode) {\n    if (charCode < DIACRITICS_CHARCODE_START || charCode > DIACRITICS_CHARCODE_END)\n        return charCode;\n    /* c8 ignore next  */\n    return CHARCODE_REPLACE_MAPPING[charCode - DIACRITICS_CHARCODE_START] || charCode;\n}\nexport function replaceDiacritics(str) {\n    const stringCharCode = [];\n    for (let idx = 0; idx < str.length; idx++) {\n        stringCharCode[idx] = replaceChar(str.charCodeAt(idx));\n    }\n    return String.fromCharCode(...stringCharCode);\n}\n//# sourceMappingURL=diacritics.js.map","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst step2List = {\n    ational: 'ate',\n    tional: 'tion',\n    enci: 'ence',\n    anci: 'ance',\n    izer: 'ize',\n    bli: 'ble',\n    alli: 'al',\n    entli: 'ent',\n    eli: 'e',\n    ousli: 'ous',\n    ization: 'ize',\n    ation: 'ate',\n    ator: 'ate',\n    alism: 'al',\n    iveness: 'ive',\n    fulness: 'ful',\n    ousness: 'ous',\n    aliti: 'al',\n    iviti: 'ive',\n    biliti: 'ble',\n    logi: 'log'\n};\nconst step3List = {\n    icate: 'ic',\n    ative: '',\n    alize: 'al',\n    iciti: 'ic',\n    ical: 'ic',\n    ful: '',\n    ness: ''\n};\n// Consonant\nconst c = '[^aeiou]';\n// Vowel\nconst v = '[aeiouy]';\n// Consonant sequence\nconst C = c + '[^aeiouy]*';\n// Vowel sequence\nconst V = v + '[aeiou]*';\n// [C]VC... is m>0\nconst mgr0 = '^(' + C + ')?' + V + C;\n// [C]VC[V] is m=1\nconst meq1 = '^(' + C + ')?' + V + C + '(' + V + ')?$';\n// [C]VCVC... is m>1\nconst mgr1 = '^(' + C + ')?' + V + C + V + C;\n// vowel in stem\nconst s_v = '^(' + C + ')?' + v;\nexport function stemmer(w) {\n    let stem;\n    let suffix;\n    let re;\n    let re2;\n    let re3;\n    let re4;\n    if (w.length < 3) {\n        return w;\n    }\n    const firstch = w.substring(0, 1);\n    if (firstch == 'y') {\n        w = firstch.toUpperCase() + w.substring(1);\n    }\n    re = /^(.+?)(ss|i)es$/;\n    re2 = /^(.+?)([^s])s$/;\n    if (re.test(w)) {\n        w = w.replace(re, '$1$2');\n    }\n    else if (re2.test(w)) {\n        w = w.replace(re2, '$1$2');\n    }\n    re = /^(.+?)eed$/;\n    re2 = /^(.+?)(ed|ing)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        re = new RegExp(mgr0);\n        if (re.test(fp[1])) {\n            re = /.$/;\n            w = w.replace(re, '');\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp[1];\n        re2 = new RegExp(s_v);\n        if (re2.test(stem)) {\n            w = stem;\n            re2 = /(at|bl|iz)$/;\n            re3 = new RegExp('([^aeiouylsz])\\\\1$');\n            re4 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n            if (re2.test(w)) {\n                w = w + 'e';\n            }\n            else if (re3.test(w)) {\n                re = /.$/;\n                w = w.replace(re, '');\n            }\n            else if (re4.test(w)) {\n                w = w + 'e';\n            }\n        }\n    }\n    re = /^(.+?)y$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(s_v);\n        if (stem && re.test(stem)) {\n            w = stem + 'i';\n        }\n    }\n    re =\n        /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step2List[suffix];\n        }\n    }\n    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step3List[suffix];\n        }\n    }\n    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n    re2 = /^(.+?)(s|t)(ion)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        if (stem && re.test(stem)) {\n            w = stem;\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp?.[1] ?? '' + fp?.[2] ?? '';\n        re2 = new RegExp(mgr1);\n        if (re2.test(stem)) {\n            w = stem;\n        }\n    }\n    re = /^(.+?)e$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        re2 = new RegExp(meq1);\n        re3 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n        if (stem && (re.test(stem) || (re2.test(stem) && !re3.test(stem)))) {\n            w = stem;\n        }\n    }\n    re = /ll$/;\n    re2 = new RegExp(mgr1);\n    if (re.test(w) && re2.test(w)) {\n        re = /.$/;\n        w = w.replace(re, '');\n    }\n    if (firstch == 'y') {\n        w = firstch.toLowerCase() + w.substring(1);\n    }\n    return w;\n}\n//# sourceMappingURL=english-stemmer.js.map","import { createError } from '../../errors.js';\nimport { replaceDiacritics } from './diacritics.js';\nimport { SPLITTERS, SUPPORTED_LANGUAGES } from './languages.js';\nimport { stemmer as english } from './english-stemmer.js';\nexport function normalizeToken(prop, token, withCache = true) {\n    const key = `${this.language}:${prop}:${token}`;\n    if (withCache && this.normalizationCache.has(key)) {\n        return this.normalizationCache.get(key);\n    }\n    // Remove stopwords if enabled\n    if (this.stopWords?.includes(token)) {\n        if (withCache) {\n            this.normalizationCache.set(key, '');\n        }\n        return '';\n    }\n    // Apply stemming if enabled\n    if (this.stemmer && !this.stemmerSkipProperties.has(prop)) {\n        token = this.stemmer(token);\n    }\n    token = replaceDiacritics(token);\n    if (withCache) {\n        this.normalizationCache.set(key, token);\n    }\n    return token;\n}\n/* c8 ignore next 10 */\nfunction trim(text) {\n    while (text[text.length - 1] === '') {\n        text.pop();\n    }\n    while (text[0] === '') {\n        text.shift();\n    }\n    return text;\n}\nfunction tokenize(input, language, prop, withCache = true) {\n    if (language && language !== this.language) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', language);\n    }\n    /* c8 ignore next 3 */\n    if (typeof input !== 'string') {\n        return [input];\n    }\n    const normalizeToken = this.normalizeToken.bind(this, prop ?? '');\n    let tokens;\n    if (prop && this.tokenizeSkipProperties.has(prop)) {\n        tokens = [normalizeToken(input, withCache)];\n    }\n    else {\n        const splitRule = SPLITTERS[this.language];\n        tokens = input\n            .toLowerCase()\n            .split(splitRule)\n            .map((t) => normalizeToken(t, withCache))\n            .filter(Boolean);\n    }\n    const trimTokens = trim(tokens);\n    if (!this.allowDuplicates) {\n        return Array.from(new Set(trimTokens));\n    }\n    return trimTokens;\n}\nexport function createTokenizer(config = {}) {\n    if (!config.language) {\n        config.language = 'english';\n    }\n    else if (!SUPPORTED_LANGUAGES.includes(config.language)) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', config.language);\n    }\n    // Handle stemming - It is disabled by default\n    let stemmer;\n    if (config.stemming || (config.stemmer && !('stemming' in config))) {\n        if (config.stemmer) {\n            if (typeof config.stemmer !== 'function') {\n                throw createError('INVALID_STEMMER_FUNCTION_TYPE');\n            }\n            stemmer = config.stemmer;\n        }\n        else {\n            if (config.language === 'english') {\n                stemmer = english;\n            }\n            else {\n                throw createError('MISSING_STEMMER', config.language);\n            }\n        }\n    }\n    // Handle stopwords\n    let stopWords;\n    if (config.stopWords !== false) {\n        stopWords = [];\n        if (Array.isArray(config.stopWords)) {\n            stopWords = config.stopWords;\n        }\n        else if (typeof config.stopWords === 'function') {\n            stopWords = config.stopWords(stopWords);\n        }\n        else if (config.stopWords) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        // Make sure stopWords is just an array of strings\n        if (!Array.isArray(stopWords)) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        for (const s of stopWords) {\n            if (typeof s !== 'string') {\n                throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n            }\n        }\n    }\n    // Create the tokenizer\n    const tokenizer = {\n        tokenize,\n        language: config.language,\n        stemmer,\n        stemmerSkipProperties: new Set(config.stemmerSkipProperties ? [config.stemmerSkipProperties].flat() : []),\n        tokenizeSkipProperties: new Set(config.tokenizeSkipProperties ? [config.tokenizeSkipProperties].flat() : []),\n        stopWords,\n        allowDuplicates: Boolean(config.allowDuplicates),\n        normalizeToken,\n        normalizationCache: new Map()\n    };\n    tokenizer.tokenize = tokenize.bind(tokenizer);\n    tokenizer.normalizeToken = normalizeToken;\n    return tokenizer;\n}\n//# sourceMappingURL=index.js.map","function create(sharedInternalDocumentStore) {\n    return {\n        sharedInternalDocumentStore,\n        rules: new Map()\n    };\n}\nfunction addRule(store, rule) {\n    if (store.rules.has(rule.id)) {\n        throw new Error(`PINNING_RULE_ALREADY_EXISTS: A pinning rule with id \"${rule.id}\" already exists. Use updateRule to modify it.`);\n    }\n    store.rules.set(rule.id, rule);\n}\nfunction updateRule(store, rule) {\n    if (!store.rules.has(rule.id)) {\n        throw new Error(`PINNING_RULE_NOT_FOUND: Cannot update pinning rule with id \"${rule.id}\" because it does not exist. Use addRule to create it.`);\n    }\n    store.rules.set(rule.id, rule);\n}\nfunction removeRule(store, ruleId) {\n    return store.rules.delete(ruleId);\n}\nfunction getRule(store, ruleId) {\n    return store.rules.get(ruleId);\n}\nfunction getAllRules(store) {\n    return Array.from(store.rules.values());\n}\nfunction matchesCondition(term, condition) {\n    const normalizedTerm = term.toLowerCase().trim();\n    const normalizedPattern = condition.pattern.toLowerCase().trim();\n    switch (condition.anchoring) {\n        case 'is':\n            return normalizedTerm === normalizedPattern;\n        case 'starts_with':\n            return normalizedTerm.startsWith(normalizedPattern);\n        case 'contains':\n            return normalizedTerm.includes(normalizedPattern);\n        default:\n            return false;\n    }\n}\nfunction matchesRule(term, rule) {\n    if (!term) {\n        return false;\n    }\n    // All conditions must match (AND logic)\n    return rule.conditions.every((condition) => matchesCondition(term, condition));\n}\nexport function getMatchingRules(store, term) {\n    if (!term) {\n        return [];\n    }\n    const matchingRules = [];\n    for (const rule of store.rules.values()) {\n        if (matchesRule(term, rule)) {\n            matchingRules.push(rule);\n        }\n    }\n    return matchingRules;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawStore = raw;\n    return {\n        sharedInternalDocumentStore,\n        rules: new Map(rawStore?.rules ?? [])\n    };\n}\nexport function save(store) {\n    return {\n        rules: Array.from(store.rules.entries())\n    };\n}\nexport function createPinning() {\n    return {\n        create,\n        addRule,\n        updateRule,\n        removeRule,\n        getRule,\n        getAllRules,\n        getMatchingRules,\n        load,\n        save\n    };\n}\n//# sourceMappingURL=pinning.js.map","import { formatElapsedTime, getDocumentIndexId, getDocumentProperties, validateSchema } from '../components/defaults.js';\nimport { createDocumentsStore } from '../components/documents-store.js';\nimport { AVAILABLE_PLUGIN_HOOKS, getAllPluginsByHook } from '../components/plugins.js';\nimport { FUNCTION_COMPONENTS, OBJECT_COMPONENTS, runAfterCreate } from '../components/hooks.js';\nimport { createIndex } from '../components/index.js';\nimport { createInternalDocumentIDStore } from '../components/internal-document-id-store.js';\nimport { createSorter } from '../components/sorter.js';\nimport { createTokenizer } from '../components/tokenizer/index.js';\nimport { createPinning } from '../components/pinning.js';\nimport { createError } from '../errors.js';\nimport { uniqueId } from '../utils.js';\nfunction validateComponents(components) {\n    const defaultComponents = {\n        formatElapsedTime,\n        getDocumentIndexId,\n        getDocumentProperties,\n        validateSchema\n    };\n    for (const rawKey of FUNCTION_COMPONENTS) {\n        const key = rawKey;\n        if (components[key]) {\n            if (typeof components[key] !== 'function') {\n                throw createError('COMPONENT_MUST_BE_FUNCTION', key);\n            }\n        }\n        else {\n            components[key] = defaultComponents[key];\n        }\n    }\n    for (const rawKey of Object.keys(components)) {\n        if (!OBJECT_COMPONENTS.includes(rawKey) && !FUNCTION_COMPONENTS.includes(rawKey)) {\n            throw createError('UNSUPPORTED_COMPONENT', rawKey);\n        }\n    }\n}\nexport function create({ schema, sort, language, components, id, plugins }) {\n    if (!components) {\n        components = {};\n    }\n    for (const plugin of plugins ?? []) {\n        if (!('getComponents' in plugin)) {\n            continue;\n        }\n        if (typeof plugin.getComponents !== 'function') {\n            continue;\n        }\n        const pluginComponents = plugin.getComponents(schema);\n        const keys = Object.keys(pluginComponents);\n        for (const key of keys) {\n            if (components[key]) {\n                throw createError('PLUGIN_COMPONENT_CONFLICT', key, plugin.name);\n            }\n        }\n        components = {\n            ...components,\n            ...pluginComponents\n        };\n    }\n    if (!id) {\n        id = uniqueId();\n    }\n    let tokenizer = components.tokenizer;\n    let index = components.index;\n    let documentsStore = components.documentsStore;\n    let sorter = components.sorter;\n    let pinning = components.pinning;\n    if (!tokenizer) {\n        // Use the default tokenizer\n        tokenizer = createTokenizer({ language: language ?? 'english' });\n    }\n    else if (!tokenizer.tokenize) {\n        // If there is no tokenizer function, we assume this is a TokenizerConfig\n        tokenizer = createTokenizer(tokenizer);\n    }\n    else {\n        const customTokenizer = tokenizer;\n        tokenizer = customTokenizer;\n    }\n    if (components.tokenizer && language) {\n        // Accept language only if a tokenizer is not provided\n        throw createError('NO_LANGUAGE_WITH_CUSTOM_TOKENIZER');\n    }\n    const internalDocumentStore = createInternalDocumentIDStore();\n    index ||= createIndex();\n    sorter ||= createSorter();\n    documentsStore ||= createDocumentsStore();\n    pinning ||= createPinning();\n    // Validate all other components\n    validateComponents(components);\n    // Assign only recognized components and hooks\n    const { getDocumentProperties, getDocumentIndexId, validateSchema, formatElapsedTime } = components;\n    const orama = {\n        data: {},\n        caches: {},\n        schema,\n        tokenizer,\n        index,\n        sorter,\n        documentsStore,\n        pinning,\n        internalDocumentIDStore: internalDocumentStore,\n        getDocumentProperties,\n        getDocumentIndexId,\n        validateSchema,\n        beforeInsert: [],\n        afterInsert: [],\n        beforeRemove: [],\n        afterRemove: [],\n        beforeUpdate: [],\n        afterUpdate: [],\n        beforeUpsert: [],\n        afterUpsert: [],\n        beforeSearch: [],\n        afterSearch: [],\n        beforeInsertMultiple: [],\n        afterInsertMultiple: [],\n        beforeRemoveMultiple: [],\n        afterRemoveMultiple: [],\n        beforeUpdateMultiple: [],\n        afterUpdateMultiple: [],\n        beforeUpsertMultiple: [],\n        afterUpsertMultiple: [],\n        afterCreate: [],\n        formatElapsedTime,\n        id,\n        plugins,\n        version: getVersion()\n    };\n    orama.data = {\n        index: orama.index.create(orama, internalDocumentStore, schema),\n        docs: orama.documentsStore.create(orama, internalDocumentStore),\n        sorting: orama.sorter.create(orama, internalDocumentStore, schema, sort),\n        pinning: orama.pinning.create(internalDocumentStore)\n    };\n    for (const hook of AVAILABLE_PLUGIN_HOOKS) {\n        orama[hook] = (orama[hook] ?? []).concat(getAllPluginsByHook(orama, hook));\n    }\n    const afterCreate = orama['afterCreate'];\n    if (afterCreate) {\n        runAfterCreate(afterCreate, orama);\n    }\n    return orama;\n}\nfunction getVersion() {\n    return '{{VERSION}}';\n}\n//# sourceMappingURL=create.js.map","export function getByID(db, id) {\n    return db.documentsStore.get(db.data.docs, id);\n}\nexport function count(db) {\n    return db.documentsStore.count(db.data.docs);\n}\n//# sourceMappingURL=docs.js.map","import { isArrayType, isGeoPointType, isVectorType } from '../components.js';\nimport { isAsyncFunction, sleep } from '../utils.js';\nimport { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nexport function insert(orama, doc, language, skipHooks, options) {\n    const errorProperty = orama.validateSchema(doc, orama.schema);\n    if (errorProperty) {\n        throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n    }\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertAsync(orama, doc, language, skipHooks, options);\n    }\n    return innerInsertSync(orama, doc, language, skipHooks, options);\n}\nconst ENUM_TYPE = new Set(['enum', 'enum[]']);\nconst STRING_NUMBER_TYPE = new Set(['string', 'number']);\nasync function innerInsertAsync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    await indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        await runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    return id;\n}\nfunction innerInsertSync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    return id;\n}\nfunction validateDocumentProperty(actualType, expectedType, key, value) {\n    if (isGeoPointType(expectedType) &&\n        typeof value === 'object' &&\n        typeof value.lon === 'number' &&\n        typeof value.lat === 'number') {\n        return;\n    }\n    if (isVectorType(expectedType) && Array.isArray(value))\n        return;\n    if (isArrayType(expectedType) && Array.isArray(value))\n        return;\n    if (ENUM_TYPE.has(expectedType) && STRING_NUMBER_TYPE.has(actualType))\n        return;\n    if (actualType !== expectedType) {\n        throw createError('INVALID_DOCUMENT_PROPERTY', key, expectedType, actualType);\n    }\n}\nasync function indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        await orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        const internalId = orama.internalDocumentIDStore.idToInternalId.get(id);\n        await orama.index.insert(orama.index, orama.data.index, prop, id, internalId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        await orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nfunction indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        const internalDocumentId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n        orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        orama.index.insert(orama.index, orama.data.index, prop, id, internalDocumentId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nexport function insertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsertMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\nasync function innerInsertMultipleAsync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    const processNextBatch = async (startIndex) => {\n        const endIndex = Math.min(startIndex + batchSize, docs.length);\n        const batch = docs.slice(startIndex, endIndex);\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = await insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        return endIndex;\n    };\n    const processAllBatches = async () => {\n        let currentIndex = 0;\n        while (currentIndex < docs.length) {\n            const startTime = Date.now();\n            currentIndex = await processNextBatch(currentIndex);\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                const waitTime = timeout - elapsedTime;\n                if (waitTime > 0) {\n                    sleep(waitTime);\n                }\n            }\n        }\n    };\n    await processAllBatches();\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nfunction innerInsertMultipleSync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    let i = 0;\n    function processNextBatch() {\n        const batch = docs.slice(i * batchSize, (i + 1) * batchSize);\n        if (batch.length === 0)\n            return false;\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        i++;\n        return true;\n    }\n    function processAllBatches() {\n        const startTime = Date.now();\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const hasMoreBatches = processNextBatch();\n            if (!hasMoreBatches)\n                break;\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                if (elapsedTime >= timeout) {\n                    const remainingTime = timeout - (elapsedTime % timeout);\n                    if (remainingTime > 0) {\n                        sleep(remainingTime);\n                    }\n                }\n            }\n        }\n    }\n    processAllBatches();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nexport function innerInsertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\n//# sourceMappingURL=insert.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { getDocumentIdFromInternalId, getInternalDocumentId } from '../components/internal-document-id-store.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function remove(orama, id, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove);\n    if (asyncNeeded) {\n        return removeAsync(orama, id, language, skipHooks);\n    }\n    return removeSync(orama, id, language, skipHooks);\n}\nasync function removeAsync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        await orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!(await orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount))) {\n            result = false;\n        }\n        await orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = await orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = await orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        await runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    return result;\n}\nfunction removeSync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount)) {\n            result = false;\n        }\n        orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    return result;\n}\nexport function removeMultiple(orama, ids, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple);\n    if (asyncNeeded) {\n        return removeMultipleAsync(orama, ids, batchSize, language, skipHooks);\n    }\n    return removeMultipleSync(orama, ids, batchSize, language, skipHooks);\n}\nasync function removeMultipleAsync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    await new Promise((resolve, reject) => {\n        let i = 0;\n        async function _removeMultiple() {\n            const batch = ids.slice(i * batchSize, ++i * batchSize);\n            if (!batch.length) {\n                return resolve();\n            }\n            for (const doc of batch) {\n                try {\n                    if (await remove(orama, doc, language, skipHooks)) {\n                        result++;\n                    }\n                }\n                catch (err) {\n                    reject(err);\n                }\n            }\n            setTimeout(_removeMultiple, 0);\n        }\n        setTimeout(_removeMultiple, 0);\n    });\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\nfunction removeMultipleSync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    let i = 0;\n    function _removeMultipleSync() {\n        const batch = ids.slice(i * batchSize, ++i * batchSize);\n        if (!batch.length)\n            return;\n        for (const doc of batch) {\n            if (remove(orama, doc, language, skipHooks)) {\n                result++;\n            }\n        }\n        setTimeout(_removeMultipleSync, 0);\n    }\n    _removeMultipleSync();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\n//# sourceMappingURL=remove.js.map","export const MODE_FULLTEXT_SEARCH = 'fulltext';\nexport const MODE_HYBRID_SEARCH = 'hybrid';\nexport const MODE_VECTOR_SEARCH = 'vector';\n//# sourceMappingURL=constants.js.map","import { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nfunction sortAsc(a, b) {\n    return a[1] - b[1];\n}\nfunction sortDesc(a, b) {\n    return b[1] - a[1];\n}\nfunction sortingPredicateBuilder(order = 'desc') {\n    return order.toLowerCase() === 'asc' ? sortAsc : sortDesc;\n}\nexport function getFacets(orama, results, facetsConfig) {\n    const facets = {};\n    const allIDs = results.map(([id]) => id);\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const facetKeys = Object.keys(facetsConfig);\n    const properties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (const facet of facetKeys) {\n        let values;\n        // Hack to guarantee the same order of ranges as specified by the user\n        // TODO: Revisit this once components land\n        if (properties[facet] === 'number') {\n            const { ranges } = facetsConfig[facet];\n            const rangesLength = ranges.length;\n            const tmp = Array.from({ length: rangesLength });\n            for (let i = 0; i < rangesLength; i++) {\n                const range = ranges[i];\n                tmp[i] = [`${range.from}-${range.to}`, 0];\n            }\n            values = Object.fromEntries(tmp);\n        }\n        facets[facet] = {\n            count: 0,\n            values: values ?? {}\n        };\n    }\n    const allDocsLength = allDocs.length;\n    for (let i = 0; i < allDocsLength; i++) {\n        const doc = allDocs[i];\n        for (const facet of facetKeys) {\n            const facetValue = facet.includes('.') ? getNested(doc, facet) : doc[facet];\n            const propertyType = properties[facet];\n            const facetValues = facets[facet].values;\n            switch (propertyType) {\n                case 'number': {\n                    const ranges = facetsConfig[facet].ranges;\n                    calculateNumberFacetBuilder(ranges, facetValues)(facetValue);\n                    break;\n                }\n                case 'number[]': {\n                    const alreadyInsertedValues = new Set();\n                    const ranges = facetsConfig[facet].ranges;\n                    const calculateNumberFacet = calculateNumberFacetBuilder(ranges, facetValues, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateNumberFacet(v);\n                    }\n                    break;\n                }\n                case 'boolean':\n                case 'enum':\n                case 'string': {\n                    calculateBooleanStringOrEnumFacetBuilder(facetValues, propertyType)(facetValue);\n                    break;\n                }\n                case 'boolean[]':\n                case 'enum[]':\n                case 'string[]': {\n                    const alreadyInsertedValues = new Set();\n                    const innerType = propertyType === 'boolean[]' ? 'boolean' : 'string';\n                    const calculateBooleanStringOrEnumFacet = calculateBooleanStringOrEnumFacetBuilder(facetValues, innerType, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateBooleanStringOrEnumFacet(v);\n                    }\n                    break;\n                }\n                default:\n                    throw createError('FACET_NOT_SUPPORTED', propertyType);\n            }\n        }\n    }\n    // TODO: We are looping again with the same previous keys, should we creat a single loop instead?\n    for (const facet of facetKeys) {\n        const currentFacet = facets[facet];\n        // Count the number of values for each facet\n        currentFacet.count = Object.keys(currentFacet.values).length;\n        // Sort only string-based facets\n        if (properties[facet] === 'string') {\n            const stringFacetDefinition = facetsConfig[facet];\n            const sortingPredicate = sortingPredicateBuilder(stringFacetDefinition.sort);\n            currentFacet.values = Object.fromEntries(Object.entries(currentFacet.values)\n                .sort(sortingPredicate)\n                .slice(stringFacetDefinition.offset ?? 0, stringFacetDefinition.limit ?? 10));\n        }\n    }\n    return facets;\n}\nfunction calculateNumberFacetBuilder(ranges, values, alreadyInsertedValues) {\n    return (facetValue) => {\n        for (const range of ranges) {\n            const value = `${range.from}-${range.to}`;\n            if (alreadyInsertedValues?.has(value)) {\n                continue;\n            }\n            if (facetValue >= range.from && facetValue <= range.to) {\n                if (values[value] === undefined) {\n                    values[value] = 1;\n                }\n                else {\n                    values[value]++;\n                    alreadyInsertedValues?.add(value);\n                }\n            }\n        }\n    };\n}\nfunction calculateBooleanStringOrEnumFacetBuilder(values, propertyType, alreadyInsertedValues) {\n    const defaultValue = propertyType === 'boolean' ? 'false' : '';\n    return (facetValue) => {\n        // String or boolean based facets\n        const value = facetValue?.toString() ?? defaultValue;\n        if (alreadyInsertedValues?.has(value)) {\n            return;\n        }\n        values[value] = (values[value] ?? 0) + 1;\n        alreadyInsertedValues?.add(value);\n    };\n}\n//# sourceMappingURL=facets.js.map","import { createError } from '../errors.js';\nimport { getNested, intersect, safeArrayPush } from '../utils.js';\nimport { getDocumentIdFromInternalId } from './internal-document-id-store.js';\nconst DEFAULT_REDUCE = {\n    reducer: (_, acc, res, index) => {\n        acc[index] = res;\n        return acc;\n    },\n    getInitialValue: (length) => Array.from({ length })\n};\nconst ALLOWED_TYPES = ['string', 'number', 'boolean'];\nexport function getGroups(orama, results, groupBy) {\n    const properties = groupBy.properties;\n    const propertiesLength = properties.length;\n    const schemaProperties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (let i = 0; i < propertiesLength; i++) {\n        const property = properties[i];\n        if (typeof schemaProperties[property] === 'undefined') {\n            throw createError('UNKNOWN_GROUP_BY_PROPERTY', property);\n        }\n        if (!ALLOWED_TYPES.includes(schemaProperties[property])) {\n            throw createError('INVALID_GROUP_BY_PROPERTY', property, ALLOWED_TYPES.join(', '), schemaProperties[property]);\n        }\n    }\n    const allIDs = results.map(([id]) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, id));\n    // allDocs is already sorted by the sortBy algorithm\n    // We leverage on that to limit the number of documents returned\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const allDocsLength = allDocs.length;\n    const returnedCount = groupBy.maxResult || Number.MAX_SAFE_INTEGER;\n    const listOfValues = [];\n    // We want to understand which documents have which values\n    // and group them by the property and values\n    const g = {};\n    for (let i = 0; i < propertiesLength; i++) {\n        const groupByKey = properties[i];\n        const group = {\n            property: groupByKey,\n            perValue: {}\n        };\n        const values = new Set();\n        for (let j = 0; j < allDocsLength; j++) {\n            const doc = allDocs[j];\n            const value = getNested(doc, groupByKey);\n            // we don't want to consider undefined values\n            if (typeof value === 'undefined') {\n                continue;\n            }\n            const keyValue = typeof value !== 'boolean' ? value : '' + value;\n            const perValue = group.perValue[keyValue] ?? {\n                indexes: [],\n                count: 0\n            };\n            if (perValue.count >= returnedCount) {\n                // We stop early because for this value we react the limit\n                continue;\n            }\n            // We use the index to keep track of the original order\n            perValue.indexes.push(j);\n            perValue.count++;\n            group.perValue[keyValue] = perValue;\n            values.add(value);\n        }\n        listOfValues.push(Array.from(values));\n        g[groupByKey] = group;\n    }\n    const combinations = calculateCombination(listOfValues);\n    const combinationsLength = combinations.length;\n    const groups = [];\n    for (let i = 0; i < combinationsLength; i++) {\n        const combination = combinations[i];\n        const combinationLength = combination.length;\n        const group = {\n            values: [],\n            indexes: []\n        };\n        const indexes = [];\n        for (let j = 0; j < combinationLength; j++) {\n            const value = combination[j];\n            const property = properties[j];\n            indexes.push(g[property].perValue[(typeof value !== 'boolean' ? value : '' + value)].indexes);\n            group.values.push(value);\n        }\n        // We leverage on the index to sort the results by the original order\n        group.indexes = intersect(indexes).sort((a, b) => a - b);\n        // don't generate empty groups\n        if (group.indexes.length === 0) {\n            continue;\n        }\n        groups.push(group);\n    }\n    const groupsLength = groups.length;\n    const res = Array.from({ length: groupsLength });\n    for (let i = 0; i < groupsLength; i++) {\n        const group = groups[i];\n        const reduce = (groupBy.reduce || DEFAULT_REDUCE);\n        const docs = group.indexes.map((index) => {\n            return {\n                id: allIDs[index],\n                score: results[index][1],\n                document: allDocs[index]\n            };\n        });\n        const func = reduce.reducer.bind(null, group.values);\n        const initialValue = reduce.getInitialValue(group.indexes.length);\n        const aggregationValue = docs.reduce(func, initialValue);\n        res[i] = {\n            values: group.values,\n            result: aggregationValue\n        };\n    }\n    return res;\n}\nfunction calculateCombination(arrs, index = 0) {\n    if (index + 1 === arrs.length)\n        return arrs[index].map((item) => [item]);\n    const head = arrs[index];\n    const c = calculateCombination(arrs, index + 1);\n    const combinations = [];\n    for (const value of head) {\n        for (const combination of c) {\n            const result = [value];\n            safeArrayPush(result, combination);\n            combinations.push(result);\n        }\n    }\n    return combinations;\n}\n//# sourceMappingURL=groups.js.map","import { getInternalDocumentId } from './internal-document-id-store.js';\nimport { getMatchingRules } from './pinning.js';\n/**\n * Apply pinning rules to search results.\n * This function modifies the uniqueDocsArray by:\n * 1. Finding matching pin rules based on the search term\n * 2. Inserting pinned documents at their specified positions\n * 3. Assigning high scores to pinned documents to maintain their positions\n */\nexport function applyPinningRules(orama, pinningStore, uniqueDocsArray, searchTerm) {\n    // Get all matching rules for the current search term\n    const matchingRules = getMatchingRules(pinningStore, searchTerm);\n    if (matchingRules.length === 0) {\n        return uniqueDocsArray;\n    }\n    // Collect all promotions from matching rules\n    const allPromotions = matchingRules.flatMap((rule) => rule.consequence.promote);\n    // Sort promotions by position (lower position = higher priority)\n    allPromotions.sort((a, b) => a.position - b.position);\n    // Create a Set of pinned internal document IDs for fast lookup\n    const pinnedInternalIds = new Set();\n    const promotionsMap = new Map(); // Map internal ID to desired position\n    const positionsTaken = new Set(); // Track which positions are already claimed\n    for (const promotion of allPromotions) {\n        const internalId = getInternalDocumentId(orama.internalDocumentIDStore, promotion.doc_id);\n        // Skip if document doesn't exist in the database or if this position is already taken\n        if (internalId === undefined) {\n            continue;\n        }\n        // If this document is already pinned to a different position, keep the first one (lower position)\n        if (promotionsMap.has(internalId)) {\n            const existingPosition = promotionsMap.get(internalId);\n            if (promotion.position < existingPosition) {\n                promotionsMap.set(internalId, promotion.position);\n            }\n            continue;\n        }\n        // If this position is already taken, skip this promotion (first wins)\n        if (positionsTaken.has(promotion.position)) {\n            continue;\n        }\n        pinnedInternalIds.add(internalId);\n        promotionsMap.set(internalId, promotion.position);\n        positionsTaken.add(promotion.position);\n    }\n    // If no valid promotions were found, return original results\n    if (promotionsMap.size === 0) {\n        return uniqueDocsArray;\n    }\n    // Remove pinned documents from the original results\n    const unpinnedResults = uniqueDocsArray.filter(([id]) => !pinnedInternalIds.has(id));\n    // Create pinned results with their scores\n    // We assign a very high base score and subtract the position to maintain order\n    const BASE_PIN_SCORE = 1000000;\n    const pinnedResults = [];\n    for (const [internalId, position] of promotionsMap.entries()) {\n        // Check if the document exists in the original results\n        const existingResult = uniqueDocsArray.find(([id]) => id === internalId);\n        if (existingResult) {\n            // Document was in original results, use its score but mark it as pinned\n            pinnedResults.push([internalId, BASE_PIN_SCORE - position]);\n        }\n        else {\n            // Document was NOT in original results (promoted from outside the result set)\n            // Verify the document actually exists in the database before promoting it\n            const doc = orama.documentsStore.get(orama.data.docs, internalId);\n            if (doc) {\n                // Assign a score of 0 (as per PR #251 behavior)\n                pinnedResults.push([internalId, 0]);\n            }\n        }\n    }\n    // Sort pinned results by their assigned scores (which correspond to positions)\n    pinnedResults.sort((a, b) => {\n        const posA = promotionsMap.get(a[0]) ?? Infinity;\n        const posB = promotionsMap.get(b[0]) ?? Infinity;\n        return posA - posB;\n    });\n    // Insert pinned results at their specified positions\n    const finalResults = [];\n    const pinnedByPosition = new Map();\n    for (const pinnedResult of pinnedResults) {\n        const position = promotionsMap.get(pinnedResult[0]);\n        pinnedByPosition.set(position, pinnedResult);\n    }\n    let unpinnedIndex = 0;\n    let currentPosition = 0;\n    // Build the final results array by interleaving pinned and unpinned results\n    while (currentPosition < unpinnedResults.length + pinnedResults.length) {\n        if (pinnedByPosition.has(currentPosition)) {\n            // Insert pinned document at this position\n            finalResults.push(pinnedByPosition.get(currentPosition));\n            currentPosition++;\n        }\n        else if (unpinnedIndex < unpinnedResults.length) {\n            // Insert next unpinned document\n            finalResults.push(unpinnedResults[unpinnedIndex]);\n            unpinnedIndex++;\n            currentPosition++;\n        }\n        else {\n            // No more unpinned results, add remaining pinned results\n            break;\n        }\n    }\n    // Add any remaining pinned results that have positions beyond the unpinned results length\n    for (const [position, pinnedResult] of pinnedByPosition.entries()) {\n        if (position >= finalResults.length) {\n            finalResults.push(pinnedResult);\n        }\n    }\n    return finalResults;\n}\n//# sourceMappingURL=pinning-manager.js.map","import { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nimport { searchByGeoWhereClause } from '../components/index.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nimport { createError } from '../errors.js';\nimport { getNanosecondsTime, removeVectorsFromHits, sortTokenScorePredicate } from '../utils.js';\nimport { count } from './docs.js';\nimport { fetchDocuments, fetchDocumentsWithDistinct } from './search.js';\nexport function innerFullTextSearch(orama, params, language) {\n    const { term, properties } = params;\n    const index = orama.data.index;\n    // Get searchable string properties\n    let propertiesToSearch = orama.caches['propertiesToSearch'];\n    if (!propertiesToSearch) {\n        const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n        propertiesToSearch = orama.index.getSearchableProperties(index);\n        propertiesToSearch = propertiesToSearch.filter((prop) => propertiesToSearchWithTypes[prop].startsWith('string'));\n        orama.caches['propertiesToSearch'] = propertiesToSearch;\n    }\n    if (properties && properties !== '*') {\n        for (const prop of properties) {\n            if (!propertiesToSearch.includes(prop)) {\n                throw createError('UNKNOWN_INDEX', prop, propertiesToSearch.join(', '));\n            }\n        }\n        propertiesToSearch = propertiesToSearch.filter((prop) => properties.includes(prop));\n    }\n    // If filters are enabled, we need to get the IDs of the documents that match the filters.\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    let whereFiltersIDs;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    let uniqueDocsIDs;\n    // We need to perform the search if:\n    // - we have a search term\n    // - or we have properties to search\n    //   in this case, we need to return all the documents that contains at least one of the given properties\n    const threshold = params.threshold !== undefined && params.threshold !== null ? params.threshold : 1;\n    if (term || properties) {\n        const docsCount = count(orama);\n        uniqueDocsIDs = orama.index.search(index, term || '', orama.tokenizer, language, propertiesToSearch, params.exact || false, params.tolerance || 0, params.boost || {}, applyDefault(params.relevance), docsCount, whereFiltersIDs, threshold);\n        // When exact is true and we have a term, filter results to only include documents\n        // where the original text contains the exact search term (case-sensitive).\n        // This is a highly requested feature and although Orama is not case-sensitive by design,\n        // this is a reasonable compromise.\n        if (params.exact && term) {\n            const searchTerms = term.trim().split(/\\s+/);\n            uniqueDocsIDs = uniqueDocsIDs.filter(([docId]) => {\n                const doc = orama.documentsStore.get(orama.data.docs, docId);\n                if (!doc)\n                    return false;\n                // Check if any of the specified properties contain the exact search term\n                for (const prop of propertiesToSearch) {\n                    const propValue = getPropValue(doc, prop);\n                    if (typeof propValue === 'string') {\n                        // Check if all search terms appear as complete words in the property value\n                        const hasAllTerms = searchTerms.every((searchTerm) => {\n                            // Create a regex that matches the term as a complete word (case-sensitive)\n                            const regex = new RegExp(`\\\\b${escapeRegex(searchTerm)}\\\\b`);\n                            return regex.test(propValue);\n                        });\n                        if (hasAllTerms) {\n                            return true;\n                        }\n                    }\n                }\n                return false;\n            });\n        }\n    }\n    else {\n        // Check if this is a geosearch-only query first\n        if (hasFilters) {\n            const geoResults = searchByGeoWhereClause(index, params.where);\n            if (geoResults) {\n                // This is a geosearch-only query with distance scoring\n                uniqueDocsIDs = geoResults;\n            }\n            else {\n                // Regular filter query without search term\n                const docIds = whereFiltersIDs ? Array.from(whereFiltersIDs) : [];\n                uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n            }\n        }\n        else {\n            // No search term and no filters - return all documents\n            const docIds = Object.keys(orama.documentsStore.getAll(orama.data.docs));\n            uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n        }\n    }\n    return uniqueDocsIDs;\n}\n// Helper function to escape regex special characters\nfunction escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// Helper function to get nested property value\nfunction getPropValue(obj, path) {\n    const keys = path.split('.');\n    let value = obj;\n    for (const key of keys) {\n        if (value && typeof value === 'object' && key in value) {\n            value = value[key];\n        }\n        else {\n            return undefined;\n        }\n    }\n    return value;\n}\nexport function fullTextSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        const { limit = 10, offset = 0, distinctOn, includeVectors = false } = params;\n        const isPreflight = params.preflight === true;\n        let uniqueDocsArray = innerFullTextSearch(orama, params, language);\n        if (params.sortBy) {\n            if (typeof params.sortBy === 'function') {\n                const ids = uniqueDocsArray.map(([id]) => id);\n                const docs = orama.documentsStore.getMultiple(orama.data.docs, ids);\n                const docsWithIdAndScore = docs.map((d, i) => [\n                    uniqueDocsArray[i][0],\n                    uniqueDocsArray[i][1],\n                    d\n                ]);\n                docsWithIdAndScore.sort(params.sortBy);\n                uniqueDocsArray = docsWithIdAndScore.map(([id, score]) => [id, score]);\n            }\n            else {\n                uniqueDocsArray = orama.sorter\n                    .sortBy(orama.data.sorting, uniqueDocsArray, params.sortBy)\n                    .map(([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]);\n            }\n        }\n        else {\n            uniqueDocsArray = uniqueDocsArray.sort(sortTokenScorePredicate);\n        }\n        // Apply pinning rules after sorting but before pagination\n        uniqueDocsArray = applyPinningRules(orama, orama.data.pinning, uniqueDocsArray, params.term);\n        let results;\n        if (!isPreflight) {\n            results = distinctOn\n                ? fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn)\n                : fetchDocuments(orama, uniqueDocsArray, offset, limit);\n        }\n        const searchResult = {\n            elapsed: {\n                formatted: '',\n                raw: 0\n            },\n            hits: [],\n            count: uniqueDocsArray.length\n        };\n        if (typeof results !== 'undefined') {\n            searchResult.hits = results.filter(Boolean);\n            if (!includeVectors) {\n                removeVectorsFromHits(searchResult, vectorProperties);\n            }\n        }\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, uniqueDocsArray, params.facets);\n            searchResult.facets = facets;\n        }\n        if (params.groupBy) {\n            searchResult.groups = getGroups(orama, uniqueDocsArray, params.groupBy);\n        }\n        searchResult.elapsed = orama.formatElapsedTime(getNanosecondsTime() - timeStart);\n        return searchResult;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const searchResult = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, searchResult);\n        }\n        return searchResult;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nexport const defaultBM25Params = {\n    k: 1.2,\n    b: 0.75,\n    d: 0.5\n};\nfunction applyDefault(bm25Relevance) {\n    const r = bm25Relevance ?? {};\n    r.k = r.k ?? defaultBM25Params.k;\n    r.b = r.b ?? defaultBM25Params.b;\n    r.d = r.d ?? defaultBM25Params.d;\n    return r;\n}\n//# sourceMappingURL=search-fulltext.js.map","import { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nimport { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from '../constants.js';\nimport { fullTextSearch } from './search-fulltext.js';\nimport { searchVector } from './search-vector.js';\nimport { hybridSearch } from './search-hybrid.js';\nexport function search(orama, params, language) {\n    const mode = params.mode ?? MODE_FULLTEXT_SEARCH;\n    if (mode === MODE_FULLTEXT_SEARCH) {\n        return fullTextSearch(orama, params, language);\n    }\n    if (mode === MODE_VECTOR_SEARCH) {\n        return searchVector(orama, params);\n    }\n    if (mode === MODE_HYBRID_SEARCH) {\n        return hybridSearch(orama, params);\n    }\n    throw createError('INVALID_SEARCH_MODE', mode);\n}\nexport function fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn) {\n    const docs = orama.data.docs;\n    // Keep track which values we already seen\n    const values = new Map();\n    // We cannot know how many results we will have in the end,\n    // so we need cannot pre-allocate the array.\n    const results = [];\n    const resultIDs = new Set();\n    const uniqueDocsArrayLength = uniqueDocsArray.length;\n    let count = 0;\n    for (let i = 0; i < uniqueDocsArrayLength; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            continue;\n        }\n        const [id, score] = idAndScore;\n        if (resultIDs.has(id)) {\n            continue;\n        }\n        const doc = orama.documentsStore.get(docs, id);\n        const value = getNested(doc, distinctOn);\n        if (typeof value === 'undefined' || values.has(value)) {\n            continue;\n        }\n        values.set(value, true);\n        count++;\n        // We shouldn't consider the document if it's not in the offset range\n        if (count <= offset) {\n            continue;\n        }\n        results.push({ id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: doc });\n        resultIDs.add(id);\n        // reached the limit, break the loop\n        if (count >= offset + limit) {\n            break;\n        }\n    }\n    return results;\n}\nexport function fetchDocuments(orama, uniqueDocsArray, offset, limit) {\n    const docs = orama.data.docs;\n    const results = Array.from({\n        length: limit\n    });\n    const resultIDs = new Set();\n    // We already have the list of ALL the document IDs containing the search terms.\n    // We loop over them starting from a positional value \"offset\" and ending at \"offset + limit\"\n    // to provide pagination capabilities to the search.\n    for (let i = offset; i < limit + offset; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            break;\n        }\n        const [id, score] = idAndScore;\n        if (!resultIDs.has(id)) {\n            // We retrieve the full document only AFTER making sure that we really want it.\n            // We never retrieve the full document preventively.\n            const fullDoc = orama.documentsStore.get(docs, id);\n            results[i] = { id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: fullDoc };\n            resultIDs.add(id);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=search.js.map","import { getNanosecondsTime, formatNanoseconds, sortTokenScorePredicate } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { createError } from '../errors.js';\nimport { getGroups } from '../components/groups.js';\nimport { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { runBeforeSearch, runAfterSearch } from '../components/hooks.js';\nimport { DEFAULT_SIMILARITY } from '../trees/vector.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nexport function innerVectorSearch(orama, params, language) {\n    const vector = params.vector;\n    if (vector && (!('value' in vector) || !('property' in vector))) {\n        throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '));\n    }\n    const vectorIndex = orama.data.index.vectorIndexes[vector.property];\n    if (!vectorIndex) {\n        throw createError('UNKNOWN_VECTOR_PROPERTY', vector.property);\n    }\n    const vectorSize = vectorIndex.node.size;\n    if (vector?.value.length !== vectorSize) {\n        if (vector?.property === undefined || vector?.value.length === undefined) {\n            throw createError('INVALID_INPUT_VECTOR', 'undefined', vectorSize, 'undefined');\n        }\n        throw createError('INVALID_INPUT_VECTOR', vector.property, vectorSize, vector.value.length);\n    }\n    const index = orama.data.index;\n    let whereFiltersIDs;\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    return vectorIndex.node.find(vector.value, params.similarity ?? DEFAULT_SIMILARITY, whereFiltersIDs);\n}\nexport function searchVector(orama, params, language = 'english') {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        let results = innerVectorSearch(orama, params, language).sort(sortTokenScorePredicate);\n        // Apply pinning rules after sorting but before pagination\n        results = applyPinningRules(orama, orama.data.pinning, results, undefined);\n        let facetsResults = [];\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, results, params.facets);\n            facetsResults = facets;\n        }\n        const vectorProperty = params.vector.property;\n        const includeVectors = params.includeVectors ?? false;\n        const limit = params.limit ?? 10;\n        const offset = params.offset ?? 0;\n        const docs = Array.from({ length: limit });\n        for (let i = 0; i < limit; i++) {\n            const result = results[i + offset];\n            if (!result) {\n                break;\n            }\n            const doc = orama.data.docs.docs[result[0]];\n            if (doc) {\n                if (!includeVectors) {\n                    doc[vectorProperty] = null;\n                }\n                const newDoc = {\n                    id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, result[0]),\n                    score: result[1],\n                    document: doc\n                };\n                docs[i] = newDoc;\n            }\n        }\n        let groups = [];\n        if (params.groupBy) {\n            groups = getGroups(orama, results, params.groupBy);\n        }\n        const timeEnd = getNanosecondsTime();\n        const elapsedTime = timeEnd - timeStart;\n        return {\n            count: results.length,\n            hits: docs.filter(Boolean),\n            elapsed: {\n                raw: Number(elapsedTime),\n                formatted: formatNanoseconds(elapsedTime)\n            },\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    // Sync path\n    return performSearchLogic();\n}\n//# sourceMappingURL=search-vector.js.map","import { getNanosecondsTime, formatNanoseconds, removeVectorsFromHits } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { fetchDocuments } from './search.js';\nimport { innerFullTextSearch } from './search-fulltext.js';\nimport { innerVectorSearch } from './search-vector.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nexport function innerHybridSearch(orama, params, language) {\n    const fullTextIDs = minMaxScoreNormalization(innerFullTextSearch(orama, params, language));\n    const vectorIDs = innerVectorSearch(orama, params, language);\n    const hybridWeights = params.hybridWeights;\n    return mergeAndRankResults(fullTextIDs, vectorIDs, params.term ?? '', hybridWeights);\n}\nexport function hybridSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        let uniqueTokenScores = innerHybridSearch(orama, params, language);\n        // Apply pinning rules after merging results but before pagination\n        uniqueTokenScores = applyPinningRules(orama, orama.data.pinning, uniqueTokenScores, params.term);\n        let facetsResults;\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            facetsResults = getFacets(orama, uniqueTokenScores, params.facets);\n        }\n        let groups;\n        if (params.groupBy) {\n            groups = getGroups(orama, uniqueTokenScores, params.groupBy);\n        }\n        const offset = params.offset ?? 0;\n        const limit = params.limit ?? 10;\n        const results = fetchDocuments(orama, uniqueTokenScores, offset, limit).filter(Boolean);\n        const timeEnd = getNanosecondsTime();\n        const returningResults = {\n            count: uniqueTokenScores.length,\n            elapsed: {\n                raw: Number(timeEnd - timeStart),\n                formatted: formatNanoseconds(timeEnd - timeStart)\n            },\n            hits: results,\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n        const includeVectors = params.includeVectors ?? false;\n        if (!includeVectors) {\n            const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n            removeVectorsFromHits(returningResults, vectorProperties);\n        }\n        return returningResults;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nfunction extractScore(token) {\n    return token[1];\n}\nfunction minMaxScoreNormalization(results) {\n    // In this case I disabled the `prefer-spread` rule because spread seems to be slower\n    // eslint-disable-next-line prefer-spread\n    const maxScore = Math.max.apply(Math, results.map(extractScore));\n    return results.map(([id, score]) => [id, score / maxScore]);\n}\nfunction normalizeScore(score, maxScore) {\n    return score / maxScore;\n}\nfunction hybridScoreBuilder(textWeight, vectorWeight) {\n    return (textScore, vectorScore) => textScore * textWeight + vectorScore * vectorWeight;\n}\nfunction mergeAndRankResults(textResults, vectorResults, query, hybridWeights) {\n    // eslint-disable-next-line prefer-spread\n    const maxTextScore = Math.max.apply(Math, textResults.map(extractScore));\n    // eslint-disable-next-line prefer-spread\n    const maxVectorScore = Math.max.apply(Math, vectorResults.map(extractScore));\n    const hasHybridWeights = hybridWeights && hybridWeights.text && hybridWeights.vector;\n    const { text: textWeight, vector: vectorWeight } = hasHybridWeights ? hybridWeights : getQueryWeights(query);\n    const mergedResults = new Map();\n    const textResultsLength = textResults.length;\n    const hybridScore = hybridScoreBuilder(textWeight, vectorWeight);\n    for (let i = 0; i < textResultsLength; i++) {\n        const [id, score] = textResults[i];\n        const normalizedScore = normalizeScore(score, maxTextScore);\n        const hybridScoreValue = hybridScore(normalizedScore, 0);\n        mergedResults.set(id, hybridScoreValue);\n    }\n    const vectorResultsLength = vectorResults.length;\n    for (let i = 0; i < vectorResultsLength; i++) {\n        const [resultId, score] = vectorResults[i];\n        const normalizedScore = normalizeScore(score, maxVectorScore);\n        const existingRes = mergedResults.get(resultId) ?? 0;\n        mergedResults.set(resultId, existingRes + hybridScore(0, normalizedScore));\n    }\n    return [...mergedResults].sort((a, b) => b[1] - a[1]);\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getQueryWeights(query) {\n    // In the next versions of Orama, we will ship a plugin containing a ML model to adjust the weights\n    // based on whether the query is keyword-focused, conceptual, etc.\n    // For now, we just return a fixed value.\n    return {\n        text: 0.5,\n        vector: 0.5\n    };\n}\n//# sourceMappingURL=search-hybrid.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { innerInsertMultiple, insert } from './insert.js';\nimport { remove, removeMultiple } from './remove.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function update(orama, id, doc, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate);\n    if (asyncNeeded) {\n        return updateAsync(orama, id, doc, language, skipHooks);\n    }\n    return updateSync(orama, id, doc, language, skipHooks);\n}\nasync function updateAsync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        await runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    await remove(orama, id, language, skipHooks);\n    const newId = await insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        await runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nfunction updateSync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    remove(orama, id, language, skipHooks);\n    const newId = insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nexport function updateMultiple(orama, ids, docs, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpdateMultiple) ||\n        isAsyncFunction(orama.afterUpdateMultiple) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.afterInsertMultiple);\n    if (asyncNeeded) {\n        return updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks);\n    }\n    return updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks);\n}\nasync function updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    await removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = await innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\nfunction updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\n//# sourceMappingURL=update.js.map","export { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from './constants.js';\nexport const kInsertions = Symbol('orama.insertions');\nexport const kRemovals = Symbol('orama.removals');\n//# sourceMappingURL=types.js.map","import { createError } from '../errors.js';\nimport { search } from './search.js';\nconst ORAMA_SECURE_PROXY_PLUGIN_NAME = 'orama-secure-proxy';\nexport class AnswerSession {\n    db;\n    proxy = null;\n    config;\n    abortController = null;\n    lastInteractionParams = null;\n    chatModel = null;\n    conversationID;\n    messages = [];\n    events;\n    initPromise;\n    state = [];\n    constructor(db, config) {\n        this.db = db;\n        this.config = config;\n        this.init();\n        this.messages = config.initialMessages || [];\n        this.events = config.events || {};\n        this.conversationID = config.conversationID || this.generateRandomID();\n    }\n    async ask(query) {\n        await this.initPromise;\n        let output = '';\n        for await (const msg of await this.askStream(query)) {\n            output += msg;\n        }\n        return output;\n    }\n    async askStream(query) {\n        await this.initPromise;\n        return this.fetchAnswer(query);\n    }\n    abortAnswer() {\n        this.abortController?.abort();\n        this.state[this.state.length - 1].aborted = true;\n        this.triggerStateChange();\n    }\n    getMessages() {\n        return this.messages;\n    }\n    clearSession() {\n        this.messages = [];\n        this.state = [];\n    }\n    regenerateLast({ stream = true }) {\n        if (this.state.length === 0 || this.messages.length === 0) {\n            throw new Error('No messages to regenerate');\n        }\n        const isLastMessageAssistant = this.messages.at(-1)?.role === 'assistant';\n        if (!isLastMessageAssistant) {\n            throw createError('ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT');\n        }\n        this.messages.pop();\n        this.state.pop();\n        if (stream) {\n            return this.askStream(this.lastInteractionParams);\n        }\n        return this.ask(this.lastInteractionParams);\n    }\n    async *fetchAnswer(params) {\n        if (!this.chatModel) {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n        this.abortController = new AbortController();\n        this.lastInteractionParams = params;\n        const interactionId = this.generateRandomID();\n        this.messages.push({ role: 'user', content: params.term ?? '' });\n        this.state.push({\n            interactionId,\n            aborted: false,\n            loading: true,\n            query: params.term ?? '',\n            response: '',\n            sources: null,\n            translatedQuery: null,\n            error: false,\n            errorMessage: null\n        });\n        const stateIdx = this.state.length - 1;\n        this.addEmptyAssistantMessage();\n        this.triggerStateChange();\n        try {\n            const sources = await search(this.db, params);\n            this.state[stateIdx].sources = sources;\n            this.triggerStateChange();\n            for await (const msg of this.proxy.chatStream({ model: this.chatModel, messages: this.messages })) {\n                yield msg;\n                this.state[stateIdx].response += msg;\n                this.messages.findLast((msg) => msg.role === 'assistant').content += msg;\n                this.triggerStateChange();\n            }\n        }\n        catch (err) {\n            if (err.name === 'AbortError') {\n                this.state[stateIdx].aborted = true;\n            }\n            else {\n                this.state[stateIdx].error = true;\n                this.state[stateIdx].errorMessage = err.toString();\n            }\n            this.triggerStateChange();\n        }\n        this.state[stateIdx].loading = false;\n        this.triggerStateChange();\n        return this.state[stateIdx].response;\n    }\n    generateRandomID(length = 24) {\n        return Array.from({ length }, () => Math.floor(Math.random() * 36).toString(36)).join('');\n    }\n    triggerStateChange() {\n        if (this.events.onStateChange) {\n            this.events.onStateChange(this.state);\n        }\n    }\n    async init() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const self = this;\n        async function getPlugin() {\n            return await self.db.plugins.find((plugin) => plugin.name === ORAMA_SECURE_PROXY_PLUGIN_NAME);\n        }\n        const plugin = await getPlugin();\n        if (!plugin) {\n            throw createError('PLUGIN_SECURE_PROXY_NOT_FOUND');\n        }\n        const pluginExtras = plugin.extra;\n        this.proxy = pluginExtras.proxy;\n        if (this.config.systemPrompt) {\n            this.messages.push({ role: 'system', content: this.config.systemPrompt });\n        }\n        if (pluginExtras?.pluginParams?.chat?.model) {\n            this.chatModel = pluginExtras.pluginParams.chat.model;\n        }\n        else {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n    }\n    addEmptyAssistantMessage() {\n        this.messages.push({ role: 'assistant', content: '' });\n    }\n}\n//# sourceMappingURL=answer-session.js.map","/**\n * Insert a new pinning rule into the database.\n * Pinning rules allow you to promote specific documents to specific positions in search results\n * based on conditional matching of the search term.\n *\n * @example\n * ```typescript\n * import { create, insert, insertPin } from '@orama/orama'\n *\n * const db = await create({\n *   schema: {\n *     title: 'string',\n *     description: 'string'\n *   }\n * })\n *\n * await insert(db, { id: '1', title: 'Product A' })\n * await insert(db, { id: '2', title: 'Product B' })\n *\n * // When searching for \"featured\", pin Product B to position 0\n * insertPin(db, {\n *   id: 'featured-products',\n *   conditions: [\n *     { anchoring: 'contains', pattern: 'featured' }\n *   ],\n *   consequence: {\n *     promote: [\n *       { doc_id: '2', position: 0 }\n *     ]\n *   }\n * })\n * ```\n */\nexport function insertPin(orama, rule) {\n    ;\n    orama.pinning.addRule(orama.data.pinning, rule);\n}\n/**\n * Update an existing pinning rule in the database.\n * If the rule does not exist, an error will be thrown.\n *\n * @example\n * ```typescript\n * import { updatePin } from '@orama/orama'\n *\n * // Update the rule to pin to a different position\n * updatePin(db, {\n *   id: 'featured-products',\n *   conditions: [\n *     { anchoring: 'contains', pattern: 'featured' }\n *   ],\n *   consequence: {\n *     promote: [\n *       { doc_id: '3', position: 0 }  // Changed doc_id\n *     ]\n *   }\n * })\n * ```\n */\nexport function updatePin(orama, rule) {\n    ;\n    orama.pinning.updateRule(orama.data.pinning, rule);\n}\n/**\n * Remove a pinning rule from the database by its ID.\n *\n * @example\n * ```typescript\n * deletePin(db, 'featured-products')\n * ```\n */\nexport function deletePin(orama, ruleId) {\n    return orama.pinning.removeRule(orama.data.pinning, ruleId);\n}\n/**\n * Get a specific pinning rule by its ID.\n *\n * @example\n * ```typescript\n * const rule = getPin(db, 'featured-products')\n * console.log(rule)\n * ```\n */\nexport function getPin(orama, ruleId) {\n    return orama.pinning.getRule(orama.data.pinning, ruleId);\n}\n/**\n * Get all pinning rules in the database.\n *\n * @example\n * ```typescript\n * const allRules = getAllPins(db)\n * console.log(`Total rules: ${allRules.length}`)\n * ```\n */\nexport function getAllPins(orama) {\n    return orama.pinning.getAllRules(orama.data.pinning);\n}\n//# sourceMappingURL=pinning.js.map","export function load(orama, raw) {\n    orama.internalDocumentIDStore.load(orama, raw.internalDocumentIDStore);\n    orama.data.index = orama.index.load(orama.internalDocumentIDStore, raw.index);\n    orama.data.docs = orama.documentsStore.load(orama.internalDocumentIDStore, raw.docs);\n    orama.data.sorting = orama.sorter.load(orama.internalDocumentIDStore, raw.sorting);\n    orama.data.pinning = orama.pinning.load(orama.internalDocumentIDStore, raw.pinning);\n    orama.tokenizer.language = raw.language;\n}\nexport function save(orama) {\n    return {\n        internalDocumentIDStore: orama.internalDocumentIDStore.save(orama.internalDocumentIDStore),\n        index: orama.index.save(orama.data.index),\n        docs: orama.documentsStore.save(orama.data.docs),\n        sorting: orama.sorter.save(orama.data.sorting),\n        pinning: orama.pinning.save(orama.data.pinning),\n        language: orama.tokenizer.language\n    };\n}\n//# sourceMappingURL=serialization.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { insert, innerInsertMultiple } from './insert.js';\nimport { update, updateMultiple } from './update.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function upsert(orama, doc, language, skipHooks, options) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpsert) ||\n        isAsyncFunction(orama.afterUpsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return upsertAsync(orama, doc, language, skipHooks, options);\n    }\n    return upsertSync(orama, doc, language, skipHooks, options);\n}\nasync function upsertAsync(orama, doc, language, skipHooks, options) {\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    if (!skipHooks && orama.beforeUpsert) {\n        await runSingleHook(orama.beforeUpsert, orama, id, doc);\n    }\n    // Check if document exists\n    const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n    let resultId;\n    if (existingDoc) {\n        // Document exists, update it\n        resultId = await update(orama, id, doc, language, skipHooks);\n    }\n    else {\n        // Document doesn't exist, insert it\n        resultId = await insert(orama, doc, language, skipHooks, options);\n    }\n    if (!skipHooks && orama.afterUpsert) {\n        await runSingleHook(orama.afterUpsert, orama, resultId, doc);\n    }\n    return resultId;\n}\nfunction upsertSync(orama, doc, language, skipHooks, options) {\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    if (!skipHooks && orama.beforeUpsert) {\n        runSingleHook(orama.beforeUpsert, orama, id, doc);\n    }\n    // Check if document exists\n    const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n    let resultId;\n    if (existingDoc) {\n        // Document exists, update it\n        resultId = update(orama, id, doc, language, skipHooks);\n    }\n    else {\n        // Document doesn't exist, insert it\n        resultId = insert(orama, doc, language, skipHooks, options);\n    }\n    if (!skipHooks && orama.afterUpsert) {\n        runSingleHook(orama.afterUpsert, orama, resultId, doc);\n    }\n    return resultId;\n}\nexport function upsertMultiple(orama, docs, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpsert) ||\n        isAsyncFunction(orama.afterUpsert) ||\n        isAsyncFunction(orama.beforeUpsertMultiple) ||\n        isAsyncFunction(orama.afterUpsertMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.afterInsertMultiple) ||\n        isAsyncFunction(orama.beforeUpdateMultiple) ||\n        isAsyncFunction(orama.afterUpdateMultiple) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return upsertMultipleAsync(orama, docs, batchSize, language, skipHooks);\n    }\n    return upsertMultipleSync(orama, docs, batchSize, language, skipHooks);\n}\nasync function upsertMultipleAsync(orama, docs, batchSize, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpsertMultiple) {\n        await runMultipleHook(orama.beforeUpsertMultiple, orama, docs);\n    }\n    // Validate all documents first\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    // Separate documents into insert and update arrays\n    const docsToInsert = [];\n    const docsToUpdate = [];\n    const idsToUpdate = [];\n    for (const doc of docs) {\n        const id = orama.getDocumentIndexId(doc);\n        if (typeof id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n        }\n        const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n        if (existingDoc) {\n            docsToUpdate.push(doc);\n            idsToUpdate.push(id);\n        }\n        else {\n            docsToInsert.push(doc);\n        }\n    }\n    // Perform bulk operations\n    const results = [];\n    if (docsToUpdate.length > 0) {\n        const updateResults = await updateMultiple(orama, idsToUpdate, docsToUpdate, batchSize, language, skipHooks);\n        results.push(...updateResults);\n    }\n    if (docsToInsert.length > 0) {\n        const insertResults = await innerInsertMultiple(orama, docsToInsert, batchSize, language, skipHooks);\n        results.push(...insertResults);\n    }\n    if (!skipHooks && orama.afterUpsertMultiple) {\n        await runMultipleHook(orama.afterUpsertMultiple, orama, results);\n    }\n    return results;\n}\nfunction upsertMultipleSync(orama, docs, batchSize, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpsertMultiple) {\n        runMultipleHook(orama.beforeUpsertMultiple, orama, docs);\n    }\n    // Validate all documents first\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    // Separate documents into insert and update arrays\n    const docsToInsert = [];\n    const docsToUpdate = [];\n    const idsToUpdate = [];\n    for (const doc of docs) {\n        const id = orama.getDocumentIndexId(doc);\n        if (typeof id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n        }\n        const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n        if (existingDoc) {\n            docsToUpdate.push(doc);\n            idsToUpdate.push(id);\n        }\n        else {\n            docsToInsert.push(doc);\n        }\n    }\n    // Perform bulk operations\n    const results = [];\n    if (docsToUpdate.length > 0) {\n        const updateResults = updateMultiple(orama, idsToUpdate, docsToUpdate, batchSize, language, skipHooks);\n        results.push(...updateResults);\n    }\n    if (docsToInsert.length > 0) {\n        const insertResults = innerInsertMultiple(orama, docsToInsert, batchSize, language, skipHooks);\n        results.push(...insertResults);\n    }\n    if (!skipHooks && orama.afterUpsertMultiple) {\n        runMultipleHook(orama.afterUpsertMultiple, orama, results);\n    }\n    return results;\n}\n//# sourceMappingURL=upsert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getActivitiesDB = getActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getActivitiesDB(activities, options = {}) {\n    const { queryFields = ['assay'] } = options;\n    const activitiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('assay') ? { assay: 'string' } : null),\n        },\n    });\n    for (const activity of activities) {\n        let assay = {\n            $id: activity.$id,\n            assay: activity.data.assay,\n        };\n        await (0, orama_1.insert)(activitiesDB, assay);\n    }\n    return activitiesDB;\n}\n//# sourceMappingURL=getActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPatentsDB = getPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPatentsDB(patents, options = {}) {\n    const { queryFields = ['title', 'abstract'], abstractsLimit = 1000, callback, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const patentsDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < patents.length; i++) {\n        const patent = patents[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Patent DB creation', i, patents.length);\n        }\n        let article = {\n            $id: patent.$id,\n            ...(queryFields.includes('title')\n                ? { title: patent?.data?.title }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: patent?.data?.abstract }\n                : null),\n            nbCompounds: patent.data?.nbCompounds ? patent.data.nbCompounds + 2 : 2,\n        };\n        await (0, orama_1.insert)(patentsDB, article);\n    }\n    return patentsDB;\n}\n//# sourceMappingURL=getPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPubmedsDB = getPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPubmedsDB(pubmeds, options = {}) {\n    const { queryFields = ['title', 'abstract', 'meshHeadings'], abstractsLimit = 1000, callback, } = options;\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const pubmedsDB = await (0, orama_1.create)({\n        schema: {\n            $ref: 'string',\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: 'string[]' }\n                : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < pubmeds.length; i++) {\n        const pubmed = pubmeds[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Pubmed DB creation', i, pubmeds.length);\n        }\n        const meshHeadings = [];\n        for (const meshHeading of pubmed.data.meshHeadings) {\n            if (meshHeading.descriptorName !== undefined) {\n                meshHeadings.push(meshHeading.descriptorName);\n            }\n        }\n        let article = {\n            $id: pubmed.$id,\n            ...(queryFields.includes('title')\n                ? { title: pubmed?.data?.article?.title || '' }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: pubmed?.data?.article?.abstract || '' }\n                : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: meshHeadings || '' }\n                : null),\n            nbCompounds: pubmed.data.compounds.length + 2 || +2,\n        };\n        await (0, orama_1.insert)(pubmedsDB, article);\n    }\n    return pubmedsDB;\n}\n//# sourceMappingURL=getPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTaxonomiesDB = getTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getTaxonomiesDB(taxonomies, options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], } = options;\n    const taxonomiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('superkingdom')\n                ? { superkingdom: 'string' }\n                : null),\n            ...(queryFields.includes('kingdom') ? { kingdom: 'string' } : null),\n            ...(queryFields.includes('phylum') ? { phylum: 'string' } : null),\n            ...(queryFields.includes('class') ? { class: 'string' } : null),\n            ...(queryFields.includes('order') ? { order: 'string' } : null),\n            ...(queryFields.includes('family') ? { family: 'string' } : null),\n            ...(queryFields.includes('genus') ? { genus: 'string' } : null),\n            ...(queryFields.includes('species') ? { species: 'string' } : null),\n        },\n    });\n    for (const taxonomy of taxonomies) {\n        let level = Object.keys(taxonomy);\n        let taxonomyEntry = {\n            $id: taxonomy.dbRef.$id,\n            ...(level.includes('superkingdom')\n                ? { superkingdom: taxonomy.superkingdom }\n                : null),\n            ...(level.includes('kingdom') ? { kingdom: taxonomy.kingdom } : null),\n            ...(level.includes('phylum') ? { phylum: taxonomy.phylum } : null),\n            ...(level.includes('class') ? { class: taxonomy.class } : null),\n            ...(level.includes('order') ? { order: taxonomy.order } : null),\n            ...(level.includes('family') ? { family: taxonomy.family } : null),\n            ...(level.includes('genus') ? { genus: taxonomy.genus } : null),\n            ...(level.includes('species') ? { species: taxonomy.species } : null),\n        };\n        await (0, orama_1.insert)(taxonomiesDB, taxonomyEntry);\n    }\n    return taxonomiesDB;\n}\n//# sourceMappingURL=getTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchActivitiesDB = searchActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchActivitiesDB(activitiesDB, activities, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['assay'], } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(activitiesDB, {\n        term: terms,\n        relevance,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let assay = result.document.assay;\n        let activityDocument = activities.find((activity) => {\n            return activity.$id === id && activity.data.assay === assay;\n        });\n        results.push({ ...activityDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPatentsDB = searchPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPatentsDB(patentsDB, patents, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract'], boostFields = {\n        title: 2,\n        abstract: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(patentsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        // to do this could be maybe improved using Map\n        let patentsDocument = patents.find((patent) => patent.$id === id);\n        results.push({ ...patentsDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPubmedsDB = searchPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPubmedsDB(pubmedsDB, pubmeds, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract', 'meshHeadings'], boostFields = {\n        title: 2,\n        abstract: 1,\n        meshHeadings: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    let queryResult = await (0, orama_1.search)(pubmedsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        limit: maxNbEntries,\n        tolerance,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let pubmedDocument = pubmeds.find((pubmed) => pubmed.$id === id);\n        results.push({ ...pubmedDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchTaxonomiesDB = searchTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchTaxonomiesDB(taxonomiesDB, taxonomies, terms = '', options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], maxNbEntries = 50, minScore = 0.5, tolerance = 1, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(taxonomiesDB, {\n        term: terms,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let keys = Object.keys(result.document);\n        let currentTaxonomy = {};\n        for (let key of keys) {\n            if (key !== '$id') {\n                currentTaxonomy[key] = result.document[key];\n            }\n            else {\n                currentTaxonomy.dbRef = { $id: result.document.$id };\n            }\n        }\n        let taxonomiesDocument = taxonomies.filter((taxonomy) => Object.keys(currentTaxonomy).every((key) => {\n            if (key === 'dbRef') {\n                return currentTaxonomy[key].$id === taxonomy.dbRef.$id;\n            }\n            return currentTaxonomy[key] === taxonomy[key];\n        }));\n        for (let taxonomy of taxonomiesDocument) {\n            taxonomy.score = result.score;\n            results.push(taxonomy);\n        }\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summarizeEmptyTerms = summarizeEmptyTerms;\nfunction summarizeEmptyTerms(activities, patents, pubmeds, taxonomies, options) {\n    activities = activities.slice();\n    patents = patents.slice();\n    pubmeds = pubmeds.slice();\n    taxonomies = taxonomies.slice();\n    // PATENTS\n    const patentsMaxNbEntries = options?.patents?.maxNbEntries || 100;\n    patents.sort((a, b) => {\n        const nbCompoundsEntryA = a.data?.nbCompounds\n            ? a.data.nbCompounds + 2\n            : Number.MAX_VALUE;\n        const nbCompoundsEntryB = b.data?.nbCompounds\n            ? b.data.nbCompounds + 2\n            : Number.MAX_VALUE;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (patents.length > patentsMaxNbEntries) {\n        patents.length = patentsMaxNbEntries;\n    }\n    // PUBMEDS\n    const pubmedsMaxNbEntries = options?.pubmeds?.maxNbEntries || 100;\n    pubmeds.sort((a, b) => {\n        const nbCompoundsEntryA = a.data.compounds?.length\n            ? a.data.compounds.length + 2\n            : Number.MAX_VALUE;\n        const nbCompoundsEntryB = b.data.compounds?.length\n            ? b.data.compounds.length + 2\n            : Number.MAX_VALUE;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (pubmeds.length > pubmedsMaxNbEntries) {\n        pubmeds.length = pubmedsMaxNbEntries;\n    }\n    // ACTIVITIES\n    const activitiesMaxNbEntries = options?.activities?.maxNbEntries || 100;\n    if (activities.length > activitiesMaxNbEntries) {\n        activities.length = activitiesMaxNbEntries;\n    }\n    // TAXONOMIES\n    const taxonomiesMaxNbEntries = options?.taxonomies?.maxNbEntries || 50;\n    if (taxonomies.length > taxonomiesMaxNbEntries) {\n        taxonomies.length = activitiesMaxNbEntries;\n    }\n    return { activities, patents, pubmeds, taxonomies };\n}\n//# sourceMappingURL=summarizeEmptyTerms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveOrNaturalSummarizer = void 0;\nconst getActivitiesDB_1 = require(\"./utils/getActivitiesDB\");\nconst getPatentsDB_1 = require(\"./utils/getPatentsDB\");\nconst getPubmedsDB_1 = require(\"./utils/getPubmedsDB\");\nconst getTaxonomiesDB_1 = require(\"./utils/getTaxonomiesDB\");\nconst searchActivitiesDB_1 = require(\"./utils/searchActivitiesDB\");\nconst searchPatentsDB_1 = require(\"./utils/searchPatentsDB\");\nconst searchPubmedsDB_1 = require(\"./utils/searchPubmedsDB\");\nconst searchTaxonomiesDB_1 = require(\"./utils/searchTaxonomiesDB\");\nconst summarizeEmptyTerms_1 = require(\"./utils/summarizeEmptyTerms\");\nclass ActiveOrNaturalSummarizer {\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {Object} activeOrNaturalDetails The active or natural details to summarize\n     * @param {Object} [options={}] The options to use for the search\n     * @param {Object} [options.activities={}] The options to use for the activities search\n     * @param {number} [options.activities.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.activities.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.activities.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.activities.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.activities.queryFields=['assay']] - Fields to query\n     * @param {Object} [options.taxonomies={}] The options to use for the activities search\n     * @param {number} [options.taxonomies.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.taxonomies.maxNbEntries=50] - Maximum number of entries to return\n     * @param {number} [options.taxonomies.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.patents={}] - Options for patents\n     * @param {number} [options.patents.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.patents.maxNbEntries=100] - Maximum number of entries to return\n     * @param {number} [options.patents.inScore=0.5] - Minimum score for an entry to be returned\n     * @param {object} [options.patents.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.patents.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.patents.queryFields=['title', 'abstract']] - Fields to query\n     * @param {object} [options.patents.boostFields={ title: 2, abstract: 1 }] - Fields weights, higher weight means higher importance\n     * @param {object} [options.pubmeds={}] - Options for pubmeds\n     * @param {number} [options.pubmeds.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.pubmeds.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.pubmeds.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.pubmeds.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.pubmeds.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.pubmeds.boostFields={ title: 2, abstract: 1, meshHeadings: 1 }]  - Fields weights, higher weight means higher importance\n     * @param {string[]} [options.pubmeds.queryFields=['title', 'abstract', 'meshHeadings']] - Fields to query\n     * @param {(action,current,last)=>{}} [options.callback] - Callback function to call during database creation\n     * @returns\n     */\n    constructor(activeOrNaturalDetails, options = {}) {\n        this.options = options;\n        this.activeOrNaturalDetails = activeOrNaturalDetails;\n        this.activities = activeOrNaturalDetails.data.activities;\n        this.patents = activeOrNaturalDetails.data.patents;\n        this.pubmeds = activeOrNaturalDetails.data.pubmeds;\n        this.taxonomies = activeOrNaturalDetails.data.taxonomies;\n        this.isInitialized = false;\n    }\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {string} terms The terms to search\n     * @returns {Promise<Object>} The summarized active or natural details\n     */\n    async summarize(terms) {\n        if (terms === '') {\n            const { patents, pubmeds, activities } = (0, summarizeEmptyTerms_1.summarizeEmptyTerms)(this.activities, this.patents, this.pubmeds, this.taxonomies, this.options);\n            return {\n                ...this.activeOrNaturalDetails,\n                data: {\n                    ...this.activeOrNaturalDetails.data,\n                    activities,\n                    patents,\n                    pubmeds,\n                },\n            };\n        }\n        if (!this.isInitialized) {\n            if (!this.creatingDB) {\n                this.creatingDB = this.createDB();\n            }\n            await this.creatingDB;\n            this.isInitialized = true;\n            this.creatingDB = undefined;\n        }\n        return {\n            ...this.activeOrNaturalDetails,\n            data: {\n                ...this.activeOrNaturalDetails.data,\n                activities: await (0, searchActivitiesDB_1.searchActivitiesDB)(this.activitiesDB, this.activities, terms, this.options?.activities),\n                patents: await (0, searchPatentsDB_1.searchPatentsDB)(this.patentsDB, this.patents, terms, this.options?.patents),\n                pubmeds: await (0, searchPubmedsDB_1.searchPubmedsDB)(this.pubmedsDB, this.pubmeds, terms, this.options?.pubmeds),\n                taxonomies: await (0, searchTaxonomiesDB_1.searchTaxonomiesDB)(this.taxonomiesDB, this.taxonomies, terms, this.options?.taxonomies),\n            },\n        };\n    }\n    async createDB() {\n        this.pubmedsDB = await (0, getPubmedsDB_1.getPubmedsDB)(this.pubmeds, {\n            callback: this.options.callback,\n            ...this.options.pubmeds,\n        });\n        this.activitiesDB = await (0, getActivitiesDB_1.getActivitiesDB)(this.activities, this.options.activities);\n        this.patentsDB = await (0, getPatentsDB_1.getPatentsDB)(this.patents, {\n            callback: this.options.callback,\n            ...this.options.patents,\n        });\n        this.taxonomiesDB = await (0, getTaxonomiesDB_1.getTaxonomiesDB)(this.taxonomies, this.options.taxonomies);\n    }\n}\nexports.ActiveOrNaturalSummarizer = ActiveOrNaturalSummarizer;\n//# sourceMappingURL=ActiveOrNaturalSummarizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyRanks = void 0;\nexports.taxonomyRanks = [\n    'superkingdom',\n    'kingdom',\n    'phylum',\n    'class',\n    'order',\n    'family',\n    'genus',\n    'species',\n];\n//# sourceMappingURL=taxonomyRanks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyComparator = taxonomyComparator;\nconst taxonomyRanks_js_1 = require(\"./taxonomyRanks.js\");\n/**\n * @description sort taxonomies by superkingdom, kingdom, phylum, class, order, family, genus, species\n * @param {import('./Taxonomy.js').Taxonomy} a\n * @param {import('./Taxonomy.js').Taxonomy} b\n * @returns {number}\n */\nfunction taxonomyComparator(a, b) {\n    for (const field of taxonomyRanks_js_1.taxonomyRanks) {\n        if (a[field] !== b[field]) {\n            return (a[field] || '').localeCompare(b[field] || '');\n        }\n    }\n    return 0;\n}\n//# sourceMappingURL=taxonomyComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createTaxonomyTree = createTaxonomyTree;\nconst taxonomyRanks_1 = require(\"./taxonomyRanks\");\n/**\n * @description Creates a tree structure from an array of taxonomies.\n *\n * @param {import('./Taxonomy.js').Taxonomy[]} taxonomies - The array of taxonomies to create a tree from.\n * @returns {Object[]} The tree structure.\n */\nfunction createTaxonomyTree(taxonomies, options = {}) {\n    let { rankLimit = '' } = options;\n    rankLimit = rankLimit.toLowerCase();\n    const tree = [];\n    for (let taxonomy of taxonomies) {\n        let reachedRankLimit = false;\n        let current = tree;\n        for (let rank of taxonomyRanks_1.taxonomyRanks) {\n            if (rank === rankLimit) {\n                reachedRankLimit = true;\n            }\n            if (reachedRankLimit && rank !== rankLimit) {\n                break;\n            }\n            const name = taxonomy[rank] || '';\n            let existing = current.find((node) => node.name === name && node.rank === rank);\n            if (!existing) {\n                existing = {\n                    name,\n                    rank,\n                    count: 1,\n                    children: [],\n                };\n                if (rank === 'species' && taxonomy?.dbRef) {\n                    existing.url = taxonomy.dbRef.url;\n                }\n                current.push(existing);\n            }\n            else {\n                existing.count++;\n            }\n            current = existing.children;\n        }\n    }\n    for (let branch of tree) {\n        cleanEmptyBranches(branch);\n        nbTaxonomies(branch);\n    }\n    return tree;\n}\nfunction cleanEmptyBranches(branch) {\n    for (const child of branch.children)\n        cleanEmptyBranches(child);\n    branch.children = branch.children.filter((child) => {\n        // This part is used empty nodes\n        if (child.children.length === 0 && child.name === '') {\n            return false;\n        }\n        // This part is used to remove the children in the lowest rank\n        if (child.children.length === 0 && child.name !== '') {\n            delete child.children;\n        }\n        return true;\n    });\n}\nfunction nbTaxonomies(branch) {\n    branch.nbTaxonomies = 0; // count the current node\n    if (branch.children) {\n        for (let child of branch.children) {\n            nbTaxonomies(child);\n            branch.nbTaxonomies += child.nbTaxonomies;\n        }\n    }\n    else {\n        branch.nbTaxonomies = 1;\n    }\n    return branch.nbTaxonomies;\n}\n//# sourceMappingURL=createTaxonomyTree.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendInternals = appendInternals;\nfunction appendInternals(data) {\n    // for each line (internal fragment) we calculate the vertical position\n    // where it should be drawn as well and the maximal number of lines\n    let maxNumberLines = 0;\n    for (let result of data.results) {\n        if (result.internal) {\n            result.slot = assignSlot(result.from, result.to, data.residues.residues);\n            if (result.slot > maxNumberLines)\n                maxNumberLines = result.slot;\n        }\n    }\n    for (let row of data.rows) {\n        row.info.internals = maxNumberLines;\n    }\n}\n// we need to define the height of the line.\n// we need to find a height that is not yet used.\nfunction assignSlot(from, to, residues) {\n    let used = {};\n    if (from > 0)\n        from--; // we ensure that we don't put on the same line to sequences that are consecutive\n    for (let i = from; i < to; i++) {\n        let residue = residues[i];\n        for (const index of residue.paper.usedSlots.keys()) {\n            used[index] = true;\n        }\n    }\n    let counter = 0;\n    while (true) {\n        if (!used[counter]) {\n            break;\n        }\n        counter++;\n    }\n    for (let i = from; i < to; i++) {\n        residues[i].paper.usedSlots[counter] = true;\n    }\n    return counter;\n}\n//# sourceMappingURL=appendInternals.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResidues = appendResidues;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Nucleotide = __importStar(require(\"nucleotide\"));\nconst Peptide = __importStar(require(\"peptide\"));\nconst ALTERNATIVES = ['', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];\nconst SYMBOLS = ['Θ', 'Δ', 'Λ', 'Φ', 'Ω', 'Γ', 'Χ'];\nlet currentSymbol = 0;\n/**\n * Code that allows to split a sequence of amino acids or nucleotides natural or non natural\n * @param {string} [sequence]\n * @param {object} [options={}]\n * @param {string} [options.kind] - peptide, rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction appendResidues(data, sequence, options = {}) {\n    const { kind = 'peptide' } = options;\n    currentSymbol = 0;\n    // we normalize the sequence to 3 letter codes\n    if (kind === 'peptide') {\n        sequence = Peptide.sequenceToMF(sequence);\n    }\n    else {\n        sequence = Nucleotide.sequenceToMF(sequence, options);\n    }\n    const result = {\n        begin: '',\n        end: '',\n        residues: [],\n    };\n    const STATE_BEGIN = 0;\n    const STATE_MIDDLE = 1;\n    const STATE_END = 2;\n    let parenthesisLevel = 0;\n    let state = STATE_BEGIN; // as long as we don't have an uppercase followed by 2 lowercases\n    for (let i = 0; i < sequence.length; i++) {\n        let currentChar = sequence.charAt(i);\n        let nextChar = i < sequence.length - 1 ? sequence.charAt(i + 1) : '';\n        let nextNextChar = i < sequence.length - 2 ? sequence.charAt(i + 2) : '';\n        if (state === STATE_BEGIN &&\n            currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_MIDDLE;\n        }\n        if (state === STATE_MIDDLE &&\n            !sequence.slice(i).match(/[A-Z][a-z]{2}/) &&\n            !currentChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_END;\n        }\n        else if (currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            result.residues.push('');\n        }\n        switch (state) {\n            case STATE_BEGIN:\n                result.begin = result.begin + currentChar;\n                break;\n            case STATE_MIDDLE:\n                result.residues[result.residues.length - 1] =\n                    result.residues.at(-1) + currentChar;\n                break;\n            case STATE_END:\n                result.end = result.end + currentChar;\n                break;\n            default:\n        }\n        if (currentChar === '(') {\n            parenthesisLevel++;\n        }\n        else if (currentChar === ')') {\n            parenthesisLevel--;\n        }\n    }\n    // we process all the residues\n    let alternatives = {};\n    let replacements = {};\n    for (let i = 0; i < result.residues.length; i++) {\n        let label = result.residues[i];\n        let residue = {\n            value: label,\n            results: {\n                begin: [],\n                end: [],\n            },\n            fromBegin: i + 1,\n            fromEnd: result.residues.length - i,\n            kind: 'residue',\n        };\n        if (label.includes('(')) {\n            getModifiedReplacement(label, residue, alternatives, replacements);\n        }\n        else if (chemical_groups_1.groupsObject[label] && chemical_groups_1.groupsObject[label].oneLetter) {\n            residue.label = chemical_groups_1.groupsObject[label].oneLetter;\n        }\n        else {\n            getUnknownReplacement(label, residue, replacements);\n        }\n        result.residues[i] = residue;\n    }\n    result.begin = removeStartEndParenthesis(result.begin);\n    result.end = removeStartEndParenthesis(result.end);\n    if (result.begin.length > 2) {\n        let label = options.kind === 'peptide' ? 'Nter' : \"5'\";\n        replacements[result.begin] = {\n            label,\n        };\n        result.begin = label;\n    }\n    if (result.end.length > 2) {\n        let label = options.kind === 'peptide' ? 'Cter' : \"3'\";\n        replacements[result.end] = {\n            label,\n        };\n        result.end = label;\n    }\n    result.begin = { label: result.begin, kind: 'begin' };\n    result.end = { label: result.end, kind: 'end' };\n    result.alternatives = alternatives;\n    result.replacements = replacements;\n    result.all = [result.begin].concat(result.residues, [result.end]);\n    for (const entry of result.all) {\n        entry.info = {\n            nbOver: 0,\n            nbUnder: 0,\n        };\n    }\n    data.residues = result;\n}\nfunction getUnknownReplacement(unknownResidue, residue, replacements) {\n    if (!replacements[unknownResidue]) {\n        replacements[unknownResidue] = {\n            label: SYMBOLS[currentSymbol] || '?',\n            id: unknownResidue,\n        };\n    }\n    currentSymbol++;\n    residue.replaced = true;\n    residue.label = replacements[unknownResidue].label;\n}\nfunction getModifiedReplacement(modifiedResidue, residue, alternatives, replacements) {\n    if (!replacements[modifiedResidue]) {\n        let position = modifiedResidue.indexOf('(');\n        let residueCode = modifiedResidue.slice(0, position);\n        let modification = removeStartEndParenthesis(modifiedResidue.slice(position));\n        if (chemical_groups_1.groupsObject[residueCode] &&\n            chemical_groups_1.groupsObject[residueCode].alternativeOneLetter) {\n            let alternativeOneLetter = chemical_groups_1.groupsObject[residueCode].alternativeOneLetter;\n            if (!alternatives[alternativeOneLetter]) {\n                alternatives[alternativeOneLetter] = { count: 1 };\n            }\n            else {\n                alternatives[alternativeOneLetter].count++;\n            }\n            replacements[modifiedResidue] = {\n                label: ALTERNATIVES[alternatives[alternativeOneLetter].count - 1] +\n                    alternativeOneLetter,\n                residue: residueCode,\n                modification,\n            };\n        }\n        else {\n            getUnknownReplacement(modifiedResidue, residue, replacements);\n        }\n    }\n    residue.replaced = true;\n    residue.label = replacements[modifiedResidue].label;\n}\nfunction removeStartEndParenthesis(mf) {\n    if (mf[0] === '(' && mf.at(-1) === ')') {\n        return mf.slice(1, -1);\n    }\n    return mf;\n}\n//# sourceMappingURL=appendResidues.js.map","/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.2.7\n* https://svgjs.dev/\n*\n* @copyright Wout Fierens <wout@mick-wout.com>\n* @license MIT\n*\n* BUILT: 2026-07-19T18:35:30.000Z\n*/;\n//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) {\n\t\t__defProp(target, name, {\n\t\t\tget: all[name],\n\t\t\tenumerable: true\n\t\t});\n\t}\n\tif (!no_symbols) {\n\t\t__defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\t}\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") {\n\t\tfor (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\t\tkey = keys[i];\n\t\t\tif (!__hasOwnProp.call(to, key) && key !== except) {\n\t\t\t\t__defProp(to, key, {\n\t\t\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n\n//#endregion\n//#region src/utils/methods.js\nconst methods = {};\nconst names = [];\nfunction registerMethods(name, m) {\n\tif (Array.isArray(name)) {\n\t\tfor (const _name of name) registerMethods(_name, m);\n\t\treturn;\n\t}\n\tif (typeof name === \"object\") {\n\t\tfor (const _name in name) registerMethods(_name, name[_name]);\n\t\treturn;\n\t}\n\taddMethodNames(Object.getOwnPropertyNames(m));\n\tmethods[name] = Object.assign(methods[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n\treturn methods[name] || {};\n}\nfunction getMethodNames() {\n\treturn [...new Set(names)];\n}\nfunction addMethodNames(_names) {\n\tnames.push(..._names);\n}\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/fails.js\nvar require_fails = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = function(exec) {\n\t\ttry {\n\t\t\treturn !!exec();\n\t\t} catch (error) {\n\t\t\treturn true;\n\t\t}\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-bind-native.js\nvar require_function_bind_native = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar fails = require_fails();\n\tmodule.exports = !fails(function() {\n\t\tvar test = function() {}.bind();\n\t\treturn typeof test != \"function\" || test.hasOwnProperty(\"prototype\");\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-uncurry-this.js\nvar require_function_uncurry_this = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar NATIVE_BIND = require_function_bind_native();\n\tvar FunctionPrototype = Function.prototype;\n\tvar call = FunctionPrototype.call;\n\tvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\tmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) {\n\t\treturn function() {\n\t\t\treturn call.apply(fn, arguments);\n\t\t};\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/object-is-prototype-of.js\nvar require_object_is_prototype_of = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this();\n\tmodule.exports = uncurryThis({}.isPrototypeOf);\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/global-this.js\nvar require_global_this = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar check = function(it) {\n\t\treturn it && it.Math === Math && it;\n\t};\n\tmodule.exports = check(typeof globalThis == \"object\" && globalThis) || check(typeof window == \"object\" && window) || check(typeof self == \"object\" && self) || check(typeof global == \"object\" && global) || check(typeof exports == \"object\" && exports) || (function() {\n\t\treturn this;\n\t})() || Function(\"return this\")();\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-apply.js\nvar require_function_apply = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar NATIVE_BIND = require_function_bind_native();\n\tvar FunctionPrototype = Function.prototype;\n\tvar apply = FunctionPrototype.apply;\n\tvar call = FunctionPrototype.call;\n\tmodule.exports = typeof Reflect == \"object\" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {\n\t\treturn call.apply(apply, arguments);\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/classof-raw.js\nvar require_classof_raw = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this();\n\tvar toString = uncurryThis({}.toString);\n\tvar stringSlice = uncurryThis(\"\".slice);\n\tmodule.exports = function(it) {\n\t\treturn stringSlice(toString(it), 8, -1);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-uncurry-this-clause.js\nvar require_function_uncurry_this_clause = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar classofRaw = require_classof_raw();\n\tvar uncurryThis = require_function_uncurry_this();\n\tmodule.exports = function(fn) {\n\t\tif (classofRaw(fn) === \"Function\") return uncurryThis(fn);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-callable.js\nvar require_is_callable = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar documentAll = typeof document == \"object\" && document.all;\n\tmodule.exports = typeof documentAll == \"undefined\" && documentAll !== void 0 ? function(argument) {\n\t\treturn typeof argument == \"function\" || argument === documentAll;\n\t} : function(argument) {\n\t\treturn typeof argument == \"function\";\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/descriptors.js\nvar require_descriptors = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar fails = require_fails();\n\tmodule.exports = !fails(function() {\n\t\treturn Object.defineProperty({}, 1, { get: function() {\n\t\t\treturn 7;\n\t\t} })[1] !== 7;\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-call.js\nvar require_function_call = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar NATIVE_BIND = require_function_bind_native();\n\tvar call = Function.prototype.call;\n\tmodule.exports = NATIVE_BIND ? call.bind(call) : function() {\n\t\treturn call.apply(call, arguments);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/object-property-is-enumerable.js\nvar require_object_property_is_enumerable = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n\tvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\tvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\texports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n\t\tvar descriptor = getOwnPropertyDescriptor(this, V);\n\t\treturn !!descriptor && descriptor.enumerable;\n\t} : $propertyIsEnumerable;\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/create-property-descriptor.js\nvar require_create_property_descriptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = function(bitmap, value) {\n\t\treturn {\n\t\t\tenumerable: !(bitmap & 1),\n\t\t\tconfigurable: !(bitmap & 2),\n\t\t\twritable: !(bitmap & 4),\n\t\t\tvalue\n\t\t};\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/indexed-object.js\nvar require_indexed_object = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this();\n\tvar fails = require_fails();\n\tvar classof = require_classof_raw();\n\tvar $Object = Object;\n\tvar split = uncurryThis(\"\".split);\n\tmodule.exports = fails(function() {\n\t\treturn !$Object(\"z\").propertyIsEnumerable(0);\n\t}) ? function(it) {\n\t\treturn classof(it) === \"String\" ? split(it, \"\") : $Object(it);\n\t} : $Object;\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-null-or-undefined.js\nvar require_is_null_or_undefined = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = function(it) {\n\t\treturn it === null || it === void 0;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/require-object-coercible.js\nvar require_require_object_coercible = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isNullOrUndefined = require_is_null_or_undefined();\n\tvar $TypeError = TypeError;\n\tmodule.exports = function(it) {\n\t\tif (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n\t\treturn it;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-indexed-object.js\nvar require_to_indexed_object = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar IndexedObject = require_indexed_object();\n\tvar requireObjectCoercible = require_require_object_coercible();\n\tmodule.exports = function(it) {\n\t\treturn IndexedObject(requireObjectCoercible(it));\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-object.js\nvar require_is_object = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isCallable = require_is_callable();\n\tmodule.exports = function(it) {\n\t\treturn typeof it == \"object\" ? it !== null : isCallable(it);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/path.js\nvar require_path = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = {};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/get-built-in.js\nvar require_get_built_in = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar path = require_path();\n\tvar globalThis = require_global_this();\n\tvar isCallable = require_is_callable();\n\tvar aFunction = function(variable) {\n\t\treturn isCallable(variable) ? variable : void 0;\n\t};\n\tmodule.exports = function(namespace, method) {\n\t\treturn arguments.length < 2 ? aFunction(path[namespace]) || aFunction(globalThis[namespace]) : path[namespace] && path[namespace][method] || globalThis[namespace] && globalThis[namespace][method];\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/environment-user-agent.js\nvar require_environment_user_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar navigator = require_global_this().navigator;\n\tvar userAgent = navigator && navigator.userAgent;\n\tmodule.exports = userAgent ? String(userAgent) : \"\";\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/environment-v8-version.js\nvar require_environment_v8_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar userAgent = require_environment_user_agent();\n\tvar process = globalThis.process;\n\tvar Deno = globalThis.Deno;\n\tvar versions = process && process.versions || Deno && Deno.version;\n\tvar v8 = versions && versions.v8;\n\tvar match;\n\tvar version;\n\tif (v8) {\n\t\tmatch = v8.split(\".\");\n\t\tversion = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n\t}\n\tif (!version && userAgent) {\n\t\tmatch = userAgent.match(/Edge\\/(\\d+)/);\n\t\tif (!match || match[1] >= 74) {\n\t\t\tmatch = userAgent.match(/Chrome\\/(\\d+)/);\n\t\t\tif (match) version = +match[1];\n\t\t}\n\t}\n\tmodule.exports = version;\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/symbol-constructor-detection.js\nvar require_symbol_constructor_detection = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar V8_VERSION = require_environment_v8_version();\n\tvar fails = require_fails();\n\tvar $String = require_global_this().String;\n\tmodule.exports = !!Object.getOwnPropertySymbols && !fails(function() {\n\t\tvar symbol = Symbol(\"symbol detection\");\n\t\treturn !$String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/use-symbol-as-uid.js\nvar require_use_symbol_as_uid = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar NATIVE_SYMBOL = require_symbol_constructor_detection();\n\tmodule.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == \"symbol\";\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-symbol.js\nvar require_is_symbol = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar getBuiltIn = require_get_built_in();\n\tvar isCallable = require_is_callable();\n\tvar isPrototypeOf = require_object_is_prototype_of();\n\tvar USE_SYMBOL_AS_UID = require_use_symbol_as_uid();\n\tvar $Object = Object;\n\tmodule.exports = USE_SYMBOL_AS_UID ? function(it) {\n\t\treturn typeof it == \"symbol\";\n\t} : function(it) {\n\t\tvar $Symbol = getBuiltIn(\"Symbol\");\n\t\treturn isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/try-to-string.js\nvar require_try_to_string = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar $String = String;\n\tmodule.exports = function(argument) {\n\t\ttry {\n\t\t\treturn $String(argument);\n\t\t} catch (error) {\n\t\t\treturn \"Object\";\n\t\t}\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/a-callable.js\nvar require_a_callable = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isCallable = require_is_callable();\n\tvar tryToString = require_try_to_string();\n\tvar $TypeError = TypeError;\n\tmodule.exports = function(argument) {\n\t\tif (isCallable(argument)) return argument;\n\t\tthrow new $TypeError(tryToString(argument) + \" is not a function\");\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/get-method.js\nvar require_get_method = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar aCallable = require_a_callable();\n\tvar isNullOrUndefined = require_is_null_or_undefined();\n\tmodule.exports = function(V, P) {\n\t\tvar func = V[P];\n\t\treturn isNullOrUndefined(func) ? void 0 : aCallable(func);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/ordinary-to-primitive.js\nvar require_ordinary_to_primitive = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar call = require_function_call();\n\tvar isCallable = require_is_callable();\n\tvar isObject = require_is_object();\n\tvar $TypeError = TypeError;\n\tmodule.exports = function(input, pref) {\n\t\tvar fn, val;\n\t\tif (pref === \"string\" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n\t\tif (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n\t\tif (pref !== \"string\" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n\t\tthrow new $TypeError(\"Can't convert object to primitive value\");\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-pure.js\nvar require_is_pure = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = true;\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/define-global-property.js\nvar require_define_global_property = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar defineProperty = Object.defineProperty;\n\tmodule.exports = function(key, value) {\n\t\ttry {\n\t\t\tdefineProperty(globalThis, key, {\n\t\t\t\tvalue,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tglobalThis[key] = value;\n\t\t}\n\t\treturn value;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/shared-store.js\nvar require_shared_store = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar IS_PURE = require_is_pure();\n\tvar globalThis = require_global_this();\n\tvar defineGlobalProperty = require_define_global_property();\n\tvar SHARED = \"__core-js_shared__\";\n\tvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\t(store.versions || (store.versions = [])).push({\n\t\tversion: \"3.49.0\",\n\t\tmode: IS_PURE ? \"pure\" : \"global\",\n\t\tcopyright: \"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.\",\n\t\tlicense: \"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE\",\n\t\tsource: \"https://github.com/zloirock/core-js\"\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/shared.js\nvar require_shared = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar store = require_shared_store();\n\tmodule.exports = function(key, value) {\n\t\treturn store[key] || (store[key] = value || {});\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-object.js\nvar require_to_object = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar requireObjectCoercible = require_require_object_coercible();\n\tvar $Object = Object;\n\tmodule.exports = function(argument) {\n\t\treturn $Object(requireObjectCoercible(argument));\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/has-own-property.js\nvar require_has_own_property = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this();\n\tvar toObject = require_to_object();\n\tvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\tmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n\t\treturn hasOwnProperty(toObject(it), key);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/uid.js\nvar require_uid = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this();\n\tvar id = 0;\n\tvar postfix = Math.random();\n\tvar toString = uncurryThis(1.1.toString);\n\tmodule.exports = function(key) {\n\t\treturn \"Symbol(\" + (key === void 0 ? \"\" : key) + \")_\" + toString(++id + postfix, 36);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/well-known-symbol.js\nvar require_well_known_symbol = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar shared = require_shared();\n\tvar hasOwn = require_has_own_property();\n\tvar uid = require_uid();\n\tvar NATIVE_SYMBOL = require_symbol_constructor_detection();\n\tvar USE_SYMBOL_AS_UID = require_use_symbol_as_uid();\n\tvar Symbol = globalThis.Symbol;\n\tvar WellKnownSymbolsStore = shared(\"wks\");\n\tvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol[\"for\"] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\tmodule.exports = function(name) {\n\t\tif (!hasOwn(WellKnownSymbolsStore, name)) WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) ? Symbol[name] : createWellKnownSymbol(\"Symbol.\" + name);\n\t\treturn WellKnownSymbolsStore[name];\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-primitive.js\nvar require_to_primitive = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar call = require_function_call();\n\tvar isObject = require_is_object();\n\tvar isSymbol = require_is_symbol();\n\tvar getMethod = require_get_method();\n\tvar ordinaryToPrimitive = require_ordinary_to_primitive();\n\tvar wellKnownSymbol = require_well_known_symbol();\n\tvar $TypeError = TypeError;\n\tvar TO_PRIMITIVE = wellKnownSymbol(\"toPrimitive\");\n\tmodule.exports = function(input, pref) {\n\t\tif (!isObject(input) || isSymbol(input)) return input;\n\t\tvar exoticToPrim = getMethod(input, TO_PRIMITIVE);\n\t\tvar result;\n\t\tif (exoticToPrim) {\n\t\t\tif (pref === void 0) pref = \"default\";\n\t\t\tresult = call(exoticToPrim, input, pref);\n\t\t\tif (!isObject(result) || isSymbol(result)) return result;\n\t\t\tthrow new $TypeError(\"Can't convert object to primitive value\");\n\t\t}\n\t\tif (pref === void 0) pref = \"number\";\n\t\treturn ordinaryToPrimitive(input, pref);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-property-key.js\nvar require_to_property_key = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar toPrimitive = require_to_primitive();\n\tvar isSymbol = require_is_symbol();\n\tmodule.exports = function(argument) {\n\t\tvar key = toPrimitive(argument, \"string\");\n\t\treturn isSymbol(key) ? key : key + \"\";\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/document-create-element.js\nvar require_document_create_element = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar isObject = require_is_object();\n\tvar document = globalThis.document;\n\tvar EXISTS = isObject(document) && isObject(document.createElement);\n\tmodule.exports = function(it) {\n\t\treturn EXISTS ? document.createElement(it) : {};\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/ie8-dom-define.js\nvar require_ie8_dom_define = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar DESCRIPTORS = require_descriptors();\n\tvar fails = require_fails();\n\tvar createElement = require_document_create_element();\n\tmodule.exports = !DESCRIPTORS && !fails(function() {\n\t\treturn Object.defineProperty(createElement(\"div\"), \"a\", { get: function() {\n\t\t\treturn 7;\n\t\t} }).a !== 7;\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/object-get-own-property-descriptor.js\nvar require_object_get_own_property_descriptor = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar DESCRIPTORS = require_descriptors();\n\tvar call = require_function_call();\n\tvar propertyIsEnumerableModule = require_object_property_is_enumerable();\n\tvar createPropertyDescriptor = require_create_property_descriptor();\n\tvar toIndexedObject = require_to_indexed_object();\n\tvar toPropertyKey = require_to_property_key();\n\tvar hasOwn = require_has_own_property();\n\tvar IE8_DOM_DEFINE = require_ie8_dom_define();\n\tvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\texports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n\t\tO = toIndexedObject(O);\n\t\tP = toPropertyKey(P);\n\t\tif (IE8_DOM_DEFINE) try {\n\t\t\treturn $getOwnPropertyDescriptor(O, P);\n\t\t} catch (error) {}\n\t\tif (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-forced.js\nvar require_is_forced = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar fails = require_fails();\n\tvar isCallable = require_is_callable();\n\tvar replacement = /#|\\.prototype\\./;\n\tvar isForced = function(feature, detection) {\n\t\tvar value = data[normalize(feature)];\n\t\treturn value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;\n\t};\n\tvar normalize = isForced.normalize = function(string) {\n\t\treturn String(string).replace(replacement, \".\").toLowerCase();\n\t};\n\tvar data = isForced.data = {};\n\tvar NATIVE = isForced.NATIVE = \"N\";\n\tvar POLYFILL = isForced.POLYFILL = \"P\";\n\tmodule.exports = isForced;\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/function-bind-context.js\nvar require_function_bind_context = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar uncurryThis = require_function_uncurry_this_clause();\n\tvar aCallable = require_a_callable();\n\tvar NATIVE_BIND = require_function_bind_native();\n\tvar bind = uncurryThis(uncurryThis.bind);\n\tmodule.exports = function(fn, that) {\n\t\taCallable(fn);\n\t\treturn that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {\n\t\t\treturn fn.apply(that, arguments);\n\t\t};\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/v8-prototype-define-bug.js\nvar require_v8_prototype_define_bug = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar DESCRIPTORS = require_descriptors();\n\tvar fails = require_fails();\n\tmodule.exports = DESCRIPTORS && fails(function() {\n\t\treturn Object.defineProperty(function() {}, \"prototype\", {\n\t\t\tvalue: 42,\n\t\t\twritable: false\n\t\t}).prototype !== 42;\n\t});\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/an-object.js\nvar require_an_object = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isObject = require_is_object();\n\tvar $String = String;\n\tvar $TypeError = TypeError;\n\tmodule.exports = function(argument) {\n\t\tif (isObject(argument)) return argument;\n\t\tthrow new $TypeError($String(argument) + \" is not an object\");\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/object-define-property.js\nvar require_object_define_property = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar DESCRIPTORS = require_descriptors();\n\tvar IE8_DOM_DEFINE = require_ie8_dom_define();\n\tvar V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();\n\tvar anObject = require_an_object();\n\tvar toPropertyKey = require_to_property_key();\n\tvar $TypeError = TypeError;\n\tvar $defineProperty = Object.defineProperty;\n\tvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\tvar ENUMERABLE = \"enumerable\";\n\tvar CONFIGURABLE = \"configurable\";\n\tvar WRITABLE = \"writable\";\n\texports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n\t\tanObject(O);\n\t\tP = toPropertyKey(P);\n\t\tanObject(Attributes);\n\t\tif (typeof O === \"function\" && P === \"prototype\" && \"value\" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n\t\t\tvar current = $getOwnPropertyDescriptor(O, P);\n\t\t\tif (current && current[WRITABLE]) {\n\t\t\t\tO[P] = Attributes.value;\n\t\t\t\tAttributes = {\n\t\t\t\t\tconfigurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n\t\t\t\t\tenumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n\t\t\t\t\twritable: false\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn $defineProperty(O, P, Attributes);\n\t} : $defineProperty : function defineProperty(O, P, Attributes) {\n\t\tanObject(O);\n\t\tP = toPropertyKey(P);\n\t\tanObject(Attributes);\n\t\tif (IE8_DOM_DEFINE) try {\n\t\t\treturn $defineProperty(O, P, Attributes);\n\t\t} catch (error) {}\n\t\tif (\"get\" in Attributes || \"set\" in Attributes) throw new $TypeError(\"Accessors not supported\");\n\t\tif (\"value\" in Attributes) O[P] = Attributes.value;\n\t\treturn O;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/create-non-enumerable-property.js\nvar require_create_non_enumerable_property = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar DESCRIPTORS = require_descriptors();\n\tvar definePropertyModule = require_object_define_property();\n\tvar createPropertyDescriptor = require_create_property_descriptor();\n\tmodule.exports = DESCRIPTORS ? function(object, key, value) {\n\t\treturn definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n\t} : function(object, key, value) {\n\t\tobject[key] = value;\n\t\treturn object;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/export.js\nvar require_export = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar apply = require_function_apply();\n\tvar uncurryThis = require_function_uncurry_this_clause();\n\tvar isCallable = require_is_callable();\n\tvar getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;\n\tvar isForced = require_is_forced();\n\tvar path = require_path();\n\tvar bind = require_function_bind_context();\n\tvar createNonEnumerableProperty = require_create_non_enumerable_property();\n\tvar hasOwn = require_has_own_property();\n\trequire_shared_store();\n\tvar wrapConstructor = function(NativeConstructor) {\n\t\tvar Wrapper = function(a, b, c) {\n\t\t\tif (this instanceof Wrapper) {\n\t\t\t\tswitch (arguments.length) {\n\t\t\t\t\tcase 0: return new NativeConstructor();\n\t\t\t\t\tcase 1: return new NativeConstructor(a);\n\t\t\t\t\tcase 2: return new NativeConstructor(a, b);\n\t\t\t\t}\n\t\t\t\treturn new NativeConstructor(a, b, c);\n\t\t\t}\n\t\t\treturn apply(NativeConstructor, this, arguments);\n\t\t};\n\t\tWrapper.prototype = NativeConstructor.prototype;\n\t\treturn Wrapper;\n\t};\n\tmodule.exports = function(options, source) {\n\t\tvar TARGET = options.target;\n\t\tvar GLOBAL = options.global;\n\t\tvar STATIC = options.stat;\n\t\tvar PROTO = options.proto;\n\t\tvar nativeSource = GLOBAL ? globalThis : STATIC ? globalThis[TARGET] : globalThis[TARGET] && globalThis[TARGET].prototype;\n\t\tvar target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n\t\tvar targetPrototype = target.prototype;\n\t\tvar FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n\t\tvar key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\t\tfor (key in source) {\n\t\t\tFORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? \".\" : \"#\") + key, options.forced);\n\t\t\tUSE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\t\t\ttargetProperty = target[key];\n\t\t\tif (USE_NATIVE) if (options.dontCallGetSet) {\n\t\t\t\tdescriptor = getOwnPropertyDescriptor(nativeSource, key);\n\t\t\t\tnativeProperty = descriptor && descriptor.value;\n\t\t\t} else nativeProperty = nativeSource[key];\n\t\t\tsourceProperty = USE_NATIVE && nativeProperty ? nativeProperty : source[key];\n\t\t\tif (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue;\n\t\t\tif (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, globalThis);\n\t\t\telse if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n\t\t\telse if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n\t\t\telse resultProperty = sourceProperty;\n\t\t\tif (options.sham || sourceProperty && sourceProperty.sham || targetProperty && targetProperty.sham) createNonEnumerableProperty(resultProperty, \"sham\", true);\n\t\t\tcreateNonEnumerableProperty(target, key, resultProperty);\n\t\t\tif (PROTO) {\n\t\t\t\tVIRTUAL_PROTOTYPE = TARGET + \"Prototype\";\n\t\t\t\tif (!hasOwn(path, VIRTUAL_PROTOTYPE)) createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n\t\t\t\tcreateNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n\t\t\t\tif (options.real && targetPrototype && (FORCED || !targetPrototype[key])) createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n\t\t\t}\n\t\t}\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/math-trunc.js\nvar require_math_trunc = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar ceil = Math.ceil;\n\tvar floor = Math.floor;\n\tmodule.exports = Math.trunc || function trunc(x) {\n\t\tvar n = +x;\n\t\treturn (n > 0 ? floor : ceil)(n);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-integer-or-infinity.js\nvar require_to_integer_or_infinity = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar trunc = require_math_trunc();\n\tmodule.exports = function(argument) {\n\t\tvar number = +argument;\n\t\treturn number !== number || number === 0 ? 0 : trunc(number);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-absolute-index.js\nvar require_to_absolute_index = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar toIntegerOrInfinity = require_to_integer_or_infinity();\n\tvar max = Math.max;\n\tvar min = Math.min;\n\tmodule.exports = function(index, length) {\n\t\tvar integer = toIntegerOrInfinity(index);\n\t\treturn integer < 0 ? max(integer + length, 0) : min(integer, length);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-length.js\nvar require_to_length = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar toIntegerOrInfinity = require_to_integer_or_infinity();\n\tvar min = Math.min;\n\tmodule.exports = function(argument) {\n\t\tvar len = toIntegerOrInfinity(argument);\n\t\treturn len > 0 ? min(len, 9007199254740991) : 0;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/length-of-array-like.js\nvar require_length_of_array_like = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar toLength = require_to_length();\n\tmodule.exports = function(obj) {\n\t\treturn toLength(obj.length);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/array-includes.js\nvar require_array_includes = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar toIndexedObject = require_to_indexed_object();\n\tvar toAbsoluteIndex = require_to_absolute_index();\n\tvar lengthOfArrayLike = require_length_of_array_like();\n\tvar createMethod = function(IS_INCLUDES) {\n\t\treturn function($this, el, fromIndex) {\n\t\t\tvar O = toIndexedObject($this);\n\t\t\tvar length = lengthOfArrayLike(O);\n\t\t\tif (length === 0) return !IS_INCLUDES && -1;\n\t\t\tvar index = toAbsoluteIndex(fromIndex, length);\n\t\t\tvar value;\n\t\t\tif (IS_INCLUDES && el !== el) while (length > index) {\n\t\t\t\tvalue = O[index++];\n\t\t\t\tif (value !== value) return true;\n\t\t\t}\n\t\t\telse for (; length > index; index++) if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n\t\t\treturn !IS_INCLUDES && -1;\n\t\t};\n\t};\n\tmodule.exports = {\n\t\tincludes: createMethod(true),\n\t\tindexOf: createMethod(false)\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/add-to-unscopables.js\nvar require_add_to_unscopables = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = function() {};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/modules/es.array.includes.js\nvar require_es_array_includes = /* @__PURE__ */ __commonJSMin((() => {\n\tvar $ = require_export();\n\tvar $includes = require_array_includes().includes;\n\tvar fails = require_fails();\n\tvar addToUnscopables = require_add_to_unscopables();\n\tvar BROKEN_ON_SPARSE = fails(function() {\n\t\treturn !Array(1).includes();\n\t});\n\tvar BROKEN_ON_SPARSE_WITH_FROM_INDEX = fails(function() {\n\t\treturn [, 1].includes(void 0, 1);\n\t});\n\t$({\n\t\ttarget: \"Array\",\n\t\tproto: true,\n\t\tforced: BROKEN_ON_SPARSE || BROKEN_ON_SPARSE_WITH_FROM_INDEX\n\t}, { includes: function includes(el) {\n\t\treturn $includes(this, el, arguments.length > 1 ? arguments[1] : void 0);\n\t} });\n\taddToUnscopables(\"includes\");\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/get-built-in-prototype-method.js\nvar require_get_built_in_prototype_method = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar globalThis = require_global_this();\n\tvar path = require_path();\n\tmodule.exports = function(CONSTRUCTOR, METHOD) {\n\t\tvar Namespace = path[CONSTRUCTOR + \"Prototype\"];\n\t\tvar pureMethod = Namespace && Namespace[METHOD];\n\t\tif (pureMethod) return pureMethod;\n\t\tvar NativeConstructor = globalThis[CONSTRUCTOR];\n\t\tvar NativePrototype = NativeConstructor && NativeConstructor.prototype;\n\t\treturn NativePrototype && NativePrototype[METHOD];\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/es/array/virtual/includes.js\nvar require_includes$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\trequire_es_array_includes();\n\tvar getBuiltInPrototypeMethod = require_get_built_in_prototype_method();\n\tmodule.exports = getBuiltInPrototypeMethod(\"Array\", \"includes\");\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/is-regexp.js\nvar require_is_regexp = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isObject = require_is_object();\n\tvar classof = require_classof_raw();\n\tvar MATCH = require_well_known_symbol()(\"match\");\n\tmodule.exports = function(it) {\n\t\tvar isRegExp;\n\t\treturn isObject(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === \"RegExp\");\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/not-a-regexp.js\nvar require_not_a_regexp = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isRegExp = require_is_regexp();\n\tvar $TypeError = TypeError;\n\tmodule.exports = function(it) {\n\t\tif (isRegExp(it)) throw new $TypeError(\"The method doesn't accept regular expressions\");\n\t\treturn it;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-string-tag-support.js\nvar require_to_string_tag_support = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar TO_STRING_TAG = require_well_known_symbol()(\"toStringTag\");\n\tvar test = {};\n\ttest[TO_STRING_TAG] = \"z\";\n\tmodule.exports = String(test) === \"[object z]\";\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/classof.js\nvar require_classof = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar TO_STRING_TAG_SUPPORT = require_to_string_tag_support();\n\tvar isCallable = require_is_callable();\n\tvar classofRaw = require_classof_raw();\n\tvar TO_STRING_TAG = require_well_known_symbol()(\"toStringTag\");\n\tvar $Object = Object;\n\tvar CORRECT_ARGUMENTS = classofRaw(function() {\n\t\treturn arguments;\n\t}()) === \"Arguments\";\n\tvar tryGet = function(it, key) {\n\t\ttry {\n\t\t\treturn it[key];\n\t\t} catch (error) {}\n\t};\n\tmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) {\n\t\tvar O, tag, result;\n\t\treturn it === void 0 ? \"Undefined\" : it === null ? \"Null\" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == \"string\" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === \"Object\" && isCallable(O.callee) ? \"Arguments\" : result;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/to-string.js\nvar require_to_string = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar classof = require_classof();\n\tvar $String = String;\n\tmodule.exports = function(argument) {\n\t\tif (classof(argument) === \"Symbol\") throw new TypeError(\"Cannot convert a Symbol value to a string\");\n\t\treturn $String(argument);\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/internals/correct-is-regexp-logic.js\nvar require_correct_is_regexp_logic = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar MATCH = require_well_known_symbol()(\"match\");\n\tmodule.exports = function(METHOD_NAME) {\n\t\tvar regexp = /./;\n\t\ttry {\n\t\t\t\"/./\"[METHOD_NAME](regexp);\n\t\t} catch (error1) {\n\t\t\ttry {\n\t\t\t\tregexp[MATCH] = false;\n\t\t\t\treturn \"/./\"[METHOD_NAME](regexp);\n\t\t\t} catch (error2) {}\n\t\t}\n\t\treturn false;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/modules/es.string.includes.js\nvar require_es_string_includes = /* @__PURE__ */ __commonJSMin((() => {\n\tvar $ = require_export();\n\tvar uncurryThis = require_function_uncurry_this();\n\tvar notARegExp = require_not_a_regexp();\n\tvar requireObjectCoercible = require_require_object_coercible();\n\tvar toString = require_to_string();\n\tvar correctIsRegExpLogic = require_correct_is_regexp_logic();\n\tvar stringIndexOf = uncurryThis(\"\".indexOf);\n\t$({\n\t\ttarget: \"String\",\n\t\tproto: true,\n\t\tforced: !correctIsRegExpLogic(\"includes\")\n\t}, { includes: function includes(searchString) {\n\t\treturn !!~stringIndexOf(toString(requireObjectCoercible(this)), toString(notARegExp(searchString)), arguments.length > 1 ? arguments[1] : void 0);\n\t} });\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/es/string/virtual/includes.js\nvar require_includes$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\trequire_es_string_includes();\n\tvar getBuiltInPrototypeMethod = require_get_built_in_prototype_method();\n\tmodule.exports = getBuiltInPrototypeMethod(\"String\", \"includes\");\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/es/instance/includes.js\nvar require_includes$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isPrototypeOf = require_object_is_prototype_of();\n\tvar arrayMethod = require_includes$3();\n\tvar stringMethod = require_includes$2();\n\tvar ArrayPrototype = Array.prototype;\n\tvar StringPrototype = String.prototype;\n\tmodule.exports = function(it) {\n\t\tvar own = it.includes;\n\t\tif (it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes) return arrayMethod;\n\t\tif (typeof it == \"string\" || it === StringPrototype || isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes) return stringMethod;\n\t\treturn own;\n\t};\n}));\n\n//#endregion\n//#region node_modules/.pnpm/core-js-pure@3.49.0/node_modules/core-js-pure/stable/instance/includes.js\nvar require_includes = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar parent = require_includes$1();\n\tmodule.exports = parent;\n}));\n\n//#endregion\n//#region src/utils/utils.js\nvar utils_exports = /* @__PURE__ */ __exportAll({\n\tcapitalize: () => capitalize,\n\tdegrees: () => degrees,\n\tfilter: () => filter,\n\tgetOrigin: () => getOrigin,\n\tisDescriptive: () => isDescriptive,\n\tmap: () => map,\n\tproportionalSize: () => proportionalSize,\n\tradians: () => radians,\n\tunCamelCase: () => unCamelCase,\n\twriteDataToDom: () => writeDataToDom\n});\nvar import_includes = /* @__PURE__ */ __toESM(require_includes(), 1);\nfunction map(array, block) {\n\tlet i;\n\tconst il = array.length;\n\tconst result = [];\n\tfor (i = 0; i < il; i++) result.push(block(array[i]));\n\treturn result;\n}\nfunction filter(array, block) {\n\tlet i;\n\tconst il = array.length;\n\tconst result = [];\n\tfor (i = 0; i < il; i++) if (block(array[i])) result.push(array[i]);\n\treturn result;\n}\nfunction radians(d) {\n\treturn d % 360 * Math.PI / 180;\n}\nfunction degrees(r) {\n\treturn r * 180 / Math.PI % 360;\n}\nfunction unCamelCase(s) {\n\treturn s.replace(/([A-Z])/g, function(m, g) {\n\t\treturn \"-\" + g.toLowerCase();\n\t});\n}\nfunction capitalize(s) {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\nfunction proportionalSize(element, width, height, box) {\n\tif (width == null || height == null) {\n\t\tbox = box || element.bbox();\n\t\tif (width == null) width = box.width / box.height * height;\n\t\telse if (height == null) height = box.height / box.width * width;\n\t}\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n/**\n* This function adds support for string origins.\n* It searches for an origin in o.origin o.ox and o.originX.\n* This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\n**/\nfunction getOrigin(o, element) {\n\tconst origin = o.origin;\n\tlet ox = o.ox != null ? o.ox : o.originX != null ? o.originX : \"center\";\n\tlet oy = o.oy != null ? o.oy : o.originY != null ? o.originY : \"center\";\n\tif (origin != null) [ox, oy] = Array.isArray(origin) ? origin : typeof origin === \"object\" ? [origin.x, origin.y] : [origin, origin];\n\tconst condX = typeof ox === \"string\";\n\tconst condY = typeof oy === \"string\";\n\tif (condX || condY) {\n\t\tconst { height, width, x, y } = element.bbox();\n\t\tif (condX) ox = (0, import_includes.default)(ox).call(ox, \"left\") ? x : (0, import_includes.default)(ox).call(ox, \"right\") ? x + width : x + width / 2;\n\t\tif (condY) oy = (0, import_includes.default)(oy).call(oy, \"top\") ? y : (0, import_includes.default)(oy).call(oy, \"bottom\") ? y + height : y + height / 2;\n\t}\n\treturn [ox, oy];\n}\nconst descriptiveElements = /* @__PURE__ */ new Set([\n\t\"desc\",\n\t\"metadata\",\n\t\"title\"\n]);\nconst isDescriptive = (element) => descriptiveElements.has(element.nodeName);\nconst writeDataToDom = (element, data, defaults = {}) => {\n\tconst cloned = { ...data };\n\tfor (const key in cloned) if (cloned[key].valueOf() === defaults[key]) delete cloned[key];\n\tif (Object.keys(cloned).length) element.node.setAttribute(\"data-svgjs\", JSON.stringify(cloned));\n\telse {\n\t\telement.node.removeAttribute(\"data-svgjs\");\n\t\telement.node.removeAttribute(\"svgjs:data\");\n\t}\n};\n\n//#endregion\n//#region src/modules/core/namespaces.js\nvar namespaces_exports = /* @__PURE__ */ __exportAll({\n\thtml: () => html,\n\tsvg: () => svg,\n\txlink: () => xlink,\n\txmlns: () => xmlns\n});\nconst svg = \"http://www.w3.org/2000/svg\";\nconst html = \"http://www.w3.org/1999/xhtml\";\nconst xmlns = \"http://www.w3.org/2000/xmlns/\";\nconst xlink = \"http://www.w3.org/1999/xlink\";\n\n//#endregion\n//#region src/utils/window.js\nconst globals = {\n\twindow: typeof window === \"undefined\" ? null : window,\n\tdocument: typeof document === \"undefined\" ? null : document\n};\nfunction registerWindow(win = null, doc = null) {\n\tglobals.window = win;\n\tglobals.document = doc;\n}\nfunction withWindow(win, fn) {\n\tconst oldWindow = globals.window;\n\tconst oldDocument = globals.document;\n\tregisterWindow(win, win.document);\n\ttry {\n\t\treturn fn(win, win.document);\n\t} finally {\n\t\tregisterWindow(oldWindow, oldDocument);\n\t}\n}\nfunction getWindow() {\n\treturn globals.window;\n}\n\n//#endregion\n//#region src/types/Base.js\nvar Base = class {};\n\n//#endregion\n//#region src/utils/adopter.js\nconst elements = {};\nconst root = \"___SYMBOL___ROOT___\";\nfunction create(name, ns = svg) {\n\treturn globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element, isHTML = false) {\n\tif (element instanceof Base) return element;\n\tif (typeof element === \"object\") return adopter(element);\n\tif (element == null) return new elements[root]();\n\tif (typeof element === \"string\" && element.trim().charAt(0) !== \"<\") return adopter(globals.document.querySelector(element));\n\tconst wrapper = isHTML ? globals.document.createElement(\"div\") : create(\"svg\");\n\twrapper.innerHTML = element.trim();\n\telement = adopter(wrapper.firstElementChild);\n\twrapper.removeChild(wrapper.firstElementChild);\n\treturn element;\n}\nfunction nodeOrNew(name, node) {\n\treturn node && (node instanceof globals.window.Node || node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node) ? node : create(name);\n}\nfunction adopt(node) {\n\tif (!node) return null;\n\tif (node.instance instanceof Base) return node.instance;\n\tif (node.nodeName === \"#document-fragment\") return new elements.Fragment(node);\n\tlet className = capitalize(node.nodeName || \"Dom\");\n\tif (className === \"LinearGradient\" || className === \"RadialGradient\") className = \"Gradient\";\n\telse if (!elements[className]) className = \"Dom\";\n\treturn new elements[className](node);\n}\nlet adopter = adopt;\nfunction mockAdopt(mock = adopt) {\n\tadopter = mock;\n}\nfunction register(element, name = element.name, asRoot = false) {\n\telements[name] = element;\n\tif (asRoot) elements[root] = element;\n\taddMethodNames(Object.getOwnPropertyNames(element.prototype));\n\treturn element;\n}\nfunction getClass(name) {\n\treturn elements[name];\n}\nlet did = 1e3;\nfunction eid(name) {\n\treturn \"Svgjs\" + capitalize(name) + did++;\n}\nfunction assignNewId(node) {\n\tfor (let i = node.children.length - 1; i >= 0; i--) assignNewId(node.children[i]);\n\tif (node.id) {\n\t\tnode.id = eid(node.nodeName);\n\t\treturn node;\n\t}\n\treturn node;\n}\nfunction extend(modules, methods) {\n\tlet key, i;\n\tmodules = Array.isArray(modules) ? modules : [modules];\n\tfor (i = modules.length - 1; i >= 0; i--) for (key in methods) modules[i].prototype[key] = methods[key];\n}\nfunction wrapWithAttrCheck(fn) {\n\treturn function(...args) {\n\t\tconst o = args[args.length - 1];\n\t\tif (o && o.constructor === Object && !(o instanceof Array)) return fn.apply(this, args.slice(0, -1)).attr(o);\n\t\telse return fn.apply(this, args);\n\t};\n}\n\n//#endregion\n//#region src/modules/optional/arrange.js\nfunction siblings() {\n\treturn this.parent().children();\n}\nfunction position() {\n\treturn this.parent().index(this);\n}\nfunction next() {\n\treturn this.siblings()[this.position() + 1];\n}\nfunction prev() {\n\treturn this.siblings()[this.position() - 1];\n}\nfunction forward() {\n\tconst i = this.position();\n\tthis.parent().add(this.remove(), i + 1);\n\treturn this;\n}\nfunction backward() {\n\tconst i = this.position();\n\tthis.parent().add(this.remove(), i ? i - 1 : 0);\n\treturn this;\n}\nfunction front() {\n\tthis.parent().add(this.remove());\n\treturn this;\n}\nfunction back() {\n\tthis.parent().add(this.remove(), 0);\n\treturn this;\n}\nfunction before(element) {\n\telement = makeInstance(element);\n\telement.remove();\n\tconst i = this.position();\n\tthis.parent().add(element, i);\n\treturn this;\n}\nfunction after(element) {\n\telement = makeInstance(element);\n\telement.remove();\n\tconst i = this.position();\n\tthis.parent().add(element, i + 1);\n\treturn this;\n}\nfunction insertBefore(element) {\n\telement = makeInstance(element);\n\telement.before(this);\n\treturn this;\n}\nfunction insertAfter(element) {\n\telement = makeInstance(element);\n\telement.after(this);\n\treturn this;\n}\nregisterMethods(\"Dom\", {\n\tsiblings,\n\tposition,\n\tnext,\n\tprev,\n\tforward,\n\tbackward,\n\tfront,\n\tback,\n\tbefore,\n\tafter,\n\tinsertBefore,\n\tinsertAfter\n});\n\n//#endregion\n//#region src/modules/core/regex.js\nvar regex_exports = /* @__PURE__ */ __exportAll({\n\tdelimiter: () => delimiter,\n\thex: () => hex,\n\tisBlank: () => isBlank,\n\tisHex: () => isHex,\n\tisImage: () => isImage,\n\tisNumber: () => isNumber,\n\tisPathLetter: () => isPathLetter,\n\tisRgb: () => isRgb,\n\tnumberAndUnit: () => numberAndUnit,\n\treference: () => reference,\n\trgb: () => rgb,\n\ttransforms: () => transforms,\n\twhitespace: () => whitespace\n});\nconst numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i;\nconst hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\nconst rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/;\nconst reference = /^(#[^\\s]+)$/;\nconst transforms = /\\)\\s*,?\\s*/;\nconst whitespace = /\\s/g;\nconst isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;\nconst isRgb = /^rgb\\(/;\nconst isBlank = /^(\\s+)?$/;\nconst isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\nconst isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i;\nconst delimiter = /[\\s,]+/;\nconst isPathLetter = /[MLHVCSQTAZ]/i;\n\n//#endregion\n//#region src/modules/optional/class.js\nfunction classes() {\n\tconst attr = this.attr(\"class\");\n\treturn attr == null ? [] : attr.trim().split(delimiter);\n}\nfunction hasClass(name) {\n\treturn this.classes().indexOf(name) !== -1;\n}\nfunction addClass(name) {\n\tif (!this.hasClass(name)) {\n\t\tconst array = this.classes();\n\t\tarray.push(name);\n\t\tthis.attr(\"class\", array.join(\" \"));\n\t}\n\treturn this;\n}\nfunction removeClass(name) {\n\tif (this.hasClass(name)) this.attr(\"class\", this.classes().filter(function(c) {\n\t\treturn c !== name;\n\t}).join(\" \"));\n\treturn this;\n}\nfunction toggleClass(name) {\n\treturn this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods(\"Dom\", {\n\tclasses,\n\thasClass,\n\taddClass,\n\tremoveClass,\n\ttoggleClass\n});\n\n//#endregion\n//#region src/modules/optional/css.js\nconst cssName = (name) => name.startsWith(\"--\") ? name : unCamelCase(name);\nfunction css(style, val) {\n\tconst ret = {};\n\tif (arguments.length === 0) {\n\t\tconst declaration = this.node.style;\n\t\tfor (let i = 0; i < declaration.length; i++) {\n\t\t\tconst name = declaration.item(i);\n\t\t\tconst value = declaration.getPropertyValue(name);\n\t\t\tconst priority = declaration.getPropertyPriority(name);\n\t\t\tret[name] = priority ? `${value} !${priority}` : value;\n\t\t}\n\t\treturn ret;\n\t}\n\tif (arguments.length < 2) {\n\t\tif (Array.isArray(style)) {\n\t\t\tfor (const name of style) {\n\t\t\t\tconst cased = cssName(name);\n\t\t\t\tret[name] = this.node.style.getPropertyValue(cased);\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t\tif (typeof style === \"string\") return this.node.style.getPropertyValue(cssName(style));\n\t\tif (typeof style === \"object\") for (const name in style) this.node.style.setProperty(cssName(name), style[name] == null || isBlank.test(style[name]) ? \"\" : style[name]);\n\t}\n\tif (arguments.length === 2) this.node.style.setProperty(cssName(style), val == null || isBlank.test(val) ? \"\" : val);\n\treturn this;\n}\nfunction show() {\n\treturn this.css(\"display\", \"\");\n}\nfunction hide() {\n\treturn this.css(\"display\", \"none\");\n}\nfunction visible() {\n\treturn this.css(\"display\") !== \"none\";\n}\nregisterMethods(\"Dom\", {\n\tcss,\n\tshow,\n\thide,\n\tvisible\n});\n\n//#endregion\n//#region src/modules/optional/data.js\nfunction data(a, v, r) {\n\tif (a == null) return this.data(map(filter(this.node.attributes, (el) => el.nodeName.indexOf(\"data-\") === 0), (el) => el.nodeName.slice(5)));\n\telse if (a instanceof Array) {\n\t\tconst data = {};\n\t\tfor (const key of a) data[key] = this.data(key);\n\t\treturn data;\n\t} else if (typeof a === \"object\") for (v in a) this.data(v, a[v]);\n\telse if (arguments.length < 2) try {\n\t\treturn JSON.parse(this.attr(\"data-\" + a));\n\t} catch (e) {\n\t\treturn this.attr(\"data-\" + a);\n\t}\n\telse this.attr(\"data-\" + a, v === null ? null : r === true || typeof v === \"string\" || typeof v === \"number\" ? v : JSON.stringify(v));\n\treturn this;\n}\nregisterMethods(\"Dom\", { data });\n\n//#endregion\n//#region src/modules/optional/memory.js\nfunction remember(k, v) {\n\tif (typeof arguments[0] === \"object\") for (const key in k) this.remember(key, k[key]);\n\telse if (arguments.length === 1) return this.memory()[k];\n\telse this.memory()[k] = v;\n\treturn this;\n}\nfunction forget() {\n\tif (arguments.length === 0) this._memory = {};\n\telse for (let i = arguments.length - 1; i >= 0; i--) delete this.memory()[arguments[i]];\n\treturn this;\n}\nfunction memory() {\n\treturn this._memory = this._memory || {};\n}\nregisterMethods(\"Dom\", {\n\tremember,\n\tforget,\n\tmemory\n});\n\n//#endregion\n//#region src/types/Color.js\nfunction sixDigitHex(hex) {\n\treturn hex.length === 4 ? [\n\t\t\"#\",\n\t\thex.substring(1, 2),\n\t\thex.substring(1, 2),\n\t\thex.substring(2, 3),\n\t\thex.substring(2, 3),\n\t\thex.substring(3, 4),\n\t\thex.substring(3, 4)\n\t].join(\"\") : hex;\n}\nfunction componentHex(component) {\n\tconst hex = Math.max(0, Math.min(255, Math.round(component))).toString(16);\n\treturn hex.length === 1 ? \"0\" + hex : hex;\n}\nfunction is(object, space) {\n\tfor (let i = space.length; i--;) if (object[space[i]] == null) return false;\n\treturn true;\n}\nfunction getParameters(a, b) {\n\tconst params = is(a, \"rgb\") ? {\n\t\t_a: a.r,\n\t\t_b: a.g,\n\t\t_c: a.b,\n\t\t_d: 0,\n\t\tspace: \"rgb\"\n\t} : is(a, \"xyz\") ? {\n\t\t_a: a.x,\n\t\t_b: a.y,\n\t\t_c: a.z,\n\t\t_d: 0,\n\t\tspace: \"xyz\"\n\t} : is(a, \"hsl\") ? {\n\t\t_a: a.h,\n\t\t_b: a.s,\n\t\t_c: a.l,\n\t\t_d: 0,\n\t\tspace: \"hsl\"\n\t} : is(a, \"lab\") ? {\n\t\t_a: a.l,\n\t\t_b: a.a,\n\t\t_c: a.b,\n\t\t_d: 0,\n\t\tspace: \"lab\"\n\t} : is(a, \"lch\") ? {\n\t\t_a: a.l,\n\t\t_b: a.c,\n\t\t_c: a.h,\n\t\t_d: 0,\n\t\tspace: \"lch\"\n\t} : is(a, \"cmyk\") ? {\n\t\t_a: a.c,\n\t\t_b: a.m,\n\t\t_c: a.y,\n\t\t_d: a.k,\n\t\tspace: \"cmyk\"\n\t} : {\n\t\t_a: 0,\n\t\t_b: 0,\n\t\t_c: 0,\n\t\tspace: \"rgb\"\n\t};\n\tparams.space = b || params.space;\n\treturn params;\n}\nfunction cieSpace(space) {\n\tif (space === \"lab\" || space === \"xyz\" || space === \"lch\") return true;\n\telse return false;\n}\nfunction hueToRgb(p, q, t) {\n\tif (t < 0) t += 1;\n\tif (t > 1) t -= 1;\n\tif (t < 1 / 6) return p + (q - p) * 6 * t;\n\tif (t < 1 / 2) return q;\n\tif (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n\treturn p;\n}\nvar Color = class Color {\n\tconstructor(...inputs) {\n\t\tthis.init(...inputs);\n\t}\n\tstatic isColor(color) {\n\t\treturn color && (color instanceof Color || this.isRgb(color) || this.test(color));\n\t}\n\tstatic isRgb(color) {\n\t\treturn color && typeof color.r === \"number\" && typeof color.g === \"number\" && typeof color.b === \"number\";\n\t}\n\tstatic random(mode = \"vibrant\", t) {\n\t\tconst { random, round, sin, PI: pi } = Math;\n\t\tif (mode === \"vibrant\") {\n\t\t\tconst l = 24 * random() + 57;\n\t\t\tconst c = 38 * random() + 45;\n\t\t\tconst h = 360 * random();\n\t\t\treturn new Color(l, c, h, \"lch\");\n\t\t} else if (mode === \"sine\") {\n\t\t\tt = t == null ? random() : t;\n\t\t\tconst r = round(80 * sin(2 * pi * t / .5 + .01) + 150);\n\t\t\tconst g = round(50 * sin(2 * pi * t / .5 + 4.6) + 200);\n\t\t\tconst b = round(100 * sin(2 * pi * t / .5 + 2.3) + 150);\n\t\t\treturn new Color(r, g, b);\n\t\t} else if (mode === \"pastel\") {\n\t\t\tconst l = 8 * random() + 86;\n\t\t\tconst c = 17 * random() + 9;\n\t\t\tconst h = 360 * random();\n\t\t\treturn new Color(l, c, h, \"lch\");\n\t\t} else if (mode === \"dark\") {\n\t\t\tconst l = 10 + 10 * random();\n\t\t\tconst c = 50 * random() + 86;\n\t\t\tconst h = 360 * random();\n\t\t\treturn new Color(l, c, h, \"lch\");\n\t\t} else if (mode === \"rgb\") {\n\t\t\tconst r = 255 * random();\n\t\t\tconst g = 255 * random();\n\t\t\tconst b = 255 * random();\n\t\t\treturn new Color(r, g, b);\n\t\t} else if (mode === \"lab\") {\n\t\t\tconst l = 100 * random();\n\t\t\tconst a = 256 * random() - 128;\n\t\t\tconst b = 256 * random() - 128;\n\t\t\treturn new Color(l, a, b, \"lab\");\n\t\t} else if (mode === \"grey\") {\n\t\t\tconst grey = 255 * random();\n\t\t\treturn new Color(grey, grey, grey);\n\t\t} else throw new Error(\"Unsupported random color mode\");\n\t}\n\tstatic test(color) {\n\t\treturn typeof color === \"string\" && (isHex.test(color) || isRgb.test(color));\n\t}\n\tcmyk() {\n\t\tconst { _a, _b, _c } = this.rgb();\n\t\tconst [r, g, b] = [\n\t\t\t_a,\n\t\t\t_b,\n\t\t\t_c\n\t\t].map((v) => v / 255);\n\t\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\t\tif (k === 1) return new Color(0, 0, 0, 1, \"cmyk\");\n\t\tconst c = (1 - r - k) / (1 - k);\n\t\tconst m = (1 - g - k) / (1 - k);\n\t\tconst y = (1 - b - k) / (1 - k);\n\t\treturn new Color(c, m, y, k, \"cmyk\");\n\t}\n\thsl() {\n\t\tconst { _a, _b, _c } = this.rgb();\n\t\tconst [r, g, b] = [\n\t\t\t_a,\n\t\t\t_b,\n\t\t\t_c\n\t\t].map((v) => v / 255);\n\t\tconst max = Math.max(r, g, b);\n\t\tconst min = Math.min(r, g, b);\n\t\tconst l = (max + min) / 2;\n\t\tconst isGrey = max === min;\n\t\tconst delta = max - min;\n\t\tconst s = isGrey ? 0 : l > .5 ? delta / (2 - max - min) : delta / (max + min);\n\t\tconst h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0;\n\t\treturn new Color(360 * h, 100 * s, 100 * l, \"hsl\");\n\t}\n\tinit(a = 0, b = 0, c = 0, d = 0, space = \"rgb\") {\n\t\ta = !a ? 0 : a;\n\t\tif (this.space) for (const component in this.space) delete this[this.space[component]];\n\t\tif (typeof a === \"number\") {\n\t\t\tspace = typeof d === \"string\" ? d : space;\n\t\t\td = typeof d === \"string\" ? 0 : d;\n\t\t\tObject.assign(this, {\n\t\t\t\t_a: a,\n\t\t\t\t_b: b,\n\t\t\t\t_c: c,\n\t\t\t\t_d: d,\n\t\t\t\tspace\n\t\t\t});\n\t\t} else if (a instanceof Array) {\n\t\t\tthis.space = b || (typeof a[3] === \"string\" ? a[3] : a[4]) || \"rgb\";\n\t\t\tObject.assign(this, {\n\t\t\t\t_a: a[0],\n\t\t\t\t_b: a[1],\n\t\t\t\t_c: a[2],\n\t\t\t\t_d: a[3] || 0\n\t\t\t});\n\t\t} else if (a instanceof Object) {\n\t\t\tconst values = getParameters(a, b);\n\t\t\tObject.assign(this, values);\n\t\t} else if (typeof a === \"string\") if (isRgb.test(a)) {\n\t\t\tconst noWhitespace = a.replace(whitespace, \"\");\n\t\t\tconst [_a, _b, _c] = rgb.exec(noWhitespace).slice(1, 4).map((v) => parseInt(v));\n\t\t\tObject.assign(this, {\n\t\t\t\t_a,\n\t\t\t\t_b,\n\t\t\t\t_c,\n\t\t\t\t_d: 0,\n\t\t\t\tspace: \"rgb\"\n\t\t\t});\n\t\t} else if (isHex.test(a)) {\n\t\t\tconst hexParse = (v) => parseInt(v, 16);\n\t\t\tconst [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse);\n\t\t\tObject.assign(this, {\n\t\t\t\t_a,\n\t\t\t\t_b,\n\t\t\t\t_c,\n\t\t\t\t_d: 0,\n\t\t\t\tspace: \"rgb\"\n\t\t\t});\n\t\t} else throw Error(\"Unsupported string format, can't construct Color\");\n\t\tconst { _a, _b, _c, _d } = this;\n\t\tconst components = this.space === \"rgb\" ? {\n\t\t\tr: _a,\n\t\t\tg: _b,\n\t\t\tb: _c\n\t\t} : this.space === \"xyz\" ? {\n\t\t\tx: _a,\n\t\t\ty: _b,\n\t\t\tz: _c\n\t\t} : this.space === \"hsl\" ? {\n\t\t\th: _a,\n\t\t\ts: _b,\n\t\t\tl: _c\n\t\t} : this.space === \"lab\" ? {\n\t\t\tl: _a,\n\t\t\ta: _b,\n\t\t\tb: _c\n\t\t} : this.space === \"lch\" ? {\n\t\t\tl: _a,\n\t\t\tc: _b,\n\t\t\th: _c\n\t\t} : this.space === \"cmyk\" ? {\n\t\t\tc: _a,\n\t\t\tm: _b,\n\t\t\ty: _c,\n\t\t\tk: _d\n\t\t} : {};\n\t\tObject.assign(this, components);\n\t}\n\tlab() {\n\t\tconst { x, y, z } = this.xyz();\n\t\tconst l = 116 * y - 16;\n\t\tconst a = 500 * (x - y);\n\t\tconst b = 200 * (y - z);\n\t\treturn new Color(l, a, b, \"lab\");\n\t}\n\tlch() {\n\t\tconst { l, a, b } = this.lab();\n\t\tconst c = Math.sqrt(a ** 2 + b ** 2);\n\t\tlet h = 180 * Math.atan2(b, a) / Math.PI;\n\t\tif (h < 0) {\n\t\t\th *= -1;\n\t\t\th = 360 - h;\n\t\t}\n\t\treturn new Color(l, c, h, \"lch\");\n\t}\n\trgb() {\n\t\tif (this.space === \"rgb\") return this;\n\t\telse if (cieSpace(this.space)) {\n\t\t\tlet { x, y, z } = this;\n\t\t\tif (this.space === \"lab\" || this.space === \"lch\") {\n\t\t\t\tlet { l, a, b } = this;\n\t\t\t\tif (this.space === \"lch\") {\n\t\t\t\t\tconst { c, h } = this;\n\t\t\t\t\tconst dToR = Math.PI / 180;\n\t\t\t\t\ta = c * Math.cos(dToR * h);\n\t\t\t\t\tb = c * Math.sin(dToR * h);\n\t\t\t\t}\n\t\t\t\tconst yL = (l + 16) / 116;\n\t\t\t\tconst xL = a / 500 + yL;\n\t\t\t\tconst zL = yL - b / 200;\n\t\t\t\tconst ct = 16 / 116;\n\t\t\t\tconst mx = .008856;\n\t\t\t\tconst nm = 7.787;\n\t\t\t\tx = .95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm);\n\t\t\t\ty = 1 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm);\n\t\t\t\tz = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm);\n\t\t\t}\n\t\t\tconst rU = x * 3.2406 + y * -1.5372 + z * -.4986;\n\t\t\tconst gU = x * -.9689 + y * 1.8758 + z * .0415;\n\t\t\tconst bU = x * .0557 + y * -.204 + z * 1.057;\n\t\t\tconst pow = Math.pow;\n\t\t\tconst bd = .0031308;\n\t\t\tconst r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - .055 : 12.92 * rU;\n\t\t\tconst g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - .055 : 12.92 * gU;\n\t\t\tconst b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - .055 : 12.92 * bU;\n\t\t\treturn new Color(255 * r, 255 * g, 255 * b);\n\t\t} else if (this.space === \"hsl\") {\n\t\t\tlet { h, s, l } = this;\n\t\t\th /= 360;\n\t\t\ts /= 100;\n\t\t\tl /= 100;\n\t\t\tif (s === 0) {\n\t\t\t\tl *= 255;\n\t\t\t\treturn new Color(l, l, l);\n\t\t\t}\n\t\t\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\t\t\tconst p = 2 * l - q;\n\t\t\tconst r = 255 * hueToRgb(p, q, h + 1 / 3);\n\t\t\tconst g = 255 * hueToRgb(p, q, h);\n\t\t\tconst b = 255 * hueToRgb(p, q, h - 1 / 3);\n\t\t\treturn new Color(r, g, b);\n\t\t} else if (this.space === \"cmyk\") {\n\t\t\tconst { c, m, y, k } = this;\n\t\t\tconst r = 255 * (1 - Math.min(1, c * (1 - k) + k));\n\t\t\tconst g = 255 * (1 - Math.min(1, m * (1 - k) + k));\n\t\t\tconst b = 255 * (1 - Math.min(1, y * (1 - k) + k));\n\t\t\treturn new Color(r, g, b);\n\t\t} else return this;\n\t}\n\ttoArray() {\n\t\tconst { _a, _b, _c, _d, space } = this;\n\t\treturn [\n\t\t\t_a,\n\t\t\t_b,\n\t\t\t_c,\n\t\t\t_d,\n\t\t\tspace\n\t\t];\n\t}\n\ttoHex() {\n\t\tconst [r, g, b] = this._clamped().map(componentHex);\n\t\treturn `#${r}${g}${b}`;\n\t}\n\ttoRgb() {\n\t\tconst [rV, gV, bV] = this._clamped();\n\t\treturn `rgb(${rV},${gV},${bV})`;\n\t}\n\ttoString() {\n\t\treturn this.toHex();\n\t}\n\txyz() {\n\t\tconst { _a: r255, _b: g255, _c: b255 } = this.rgb();\n\t\tconst [r, g, b] = [\n\t\t\tr255,\n\t\t\tg255,\n\t\t\tb255\n\t\t].map((v) => v / 255);\n\t\tconst rL = r > .04045 ? Math.pow((r + .055) / 1.055, 2.4) : r / 12.92;\n\t\tconst gL = g > .04045 ? Math.pow((g + .055) / 1.055, 2.4) : g / 12.92;\n\t\tconst bL = b > .04045 ? Math.pow((b + .055) / 1.055, 2.4) : b / 12.92;\n\t\tconst xU = (rL * .4124 + gL * .3576 + bL * .1805) / .95047;\n\t\tconst yU = (rL * .2126 + gL * .7152 + bL * .0722) / 1;\n\t\tconst zU = (rL * .0193 + gL * .1192 + bL * .9505) / 1.08883;\n\t\tconst x = xU > .008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n\t\tconst y = yU > .008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n\t\tconst z = zU > .008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116;\n\t\treturn new Color(x, y, z, \"xyz\");\n\t}\n\t_clamped() {\n\t\tconst { _a, _b, _c } = this.rgb();\n\t\tconst { max, min, round } = Math;\n\t\tconst format = (v) => max(0, min(round(v), 255));\n\t\treturn [\n\t\t\t_a,\n\t\t\t_b,\n\t\t\t_c\n\t\t].map(format);\n\t}\n};\n\n//#endregion\n//#region src/types/Point.js\nvar Point = class Point {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\tclone() {\n\t\treturn new Point(this);\n\t}\n\tinit(x, y) {\n\t\tconst base = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\tconst source = Array.isArray(x) ? {\n\t\t\tx: x[0],\n\t\t\ty: x[1]\n\t\t} : typeof x === \"object\" ? {\n\t\t\tx: x.x,\n\t\t\ty: x.y\n\t\t} : {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tthis.x = source.x == null ? base.x : source.x;\n\t\tthis.y = source.y == null ? base.y : source.y;\n\t\treturn this;\n\t}\n\ttoArray() {\n\t\treturn [this.x, this.y];\n\t}\n\ttransform(m) {\n\t\treturn this.clone().transformO(m);\n\t}\n\ttransformO(m) {\n\t\tif (!Matrix.isMatrixLike(m)) m = new Matrix(m);\n\t\tconst { x, y } = this;\n\t\tthis.x = m.a * x + m.c * y + m.e;\n\t\tthis.y = m.b * x + m.d * y + m.f;\n\t\treturn this;\n\t}\n};\nfunction point(x, y) {\n\treturn new Point(x, y).transformO(this.screenCTM().inverseO());\n}\n\n//#endregion\n//#region src/types/Matrix.js\nfunction closeEnough(a, b, threshold) {\n\treturn Math.abs(b - a) < (threshold || 1e-6);\n}\nvar Matrix = class Matrix {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\tstatic formatTransforms(o) {\n\t\tconst flipBoth = o.flip === \"both\" || o.flip === true;\n\t\tconst flipX = o.flip && (flipBoth || o.flip === \"x\") ? -1 : 1;\n\t\tconst flipY = o.flip && (flipBoth || o.flip === \"y\") ? -1 : 1;\n\t\tconst skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n\t\tconst skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n\t\tconst scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n\t\tconst scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n\t\tconst shear = o.shear || 0;\n\t\tconst theta = o.rotate || o.theta || 0;\n\t\tconst origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n\t\tconst ox = origin.x;\n\t\tconst oy = origin.y;\n\t\tconst position = new Point(o.position ?? o.px ?? o.positionX ?? NaN, o.py ?? o.positionY ?? NaN);\n\t\tconst px = position.x;\n\t\tconst py = position.y;\n\t\tconst translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n\t\tconst tx = translate.x;\n\t\tconst ty = translate.y;\n\t\tconst relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n\t\treturn {\n\t\t\tscaleX,\n\t\t\tscaleY,\n\t\t\tskewX,\n\t\t\tskewY,\n\t\t\tshear,\n\t\t\ttheta,\n\t\t\trx: relative.x,\n\t\t\try: relative.y,\n\t\t\ttx,\n\t\t\tty,\n\t\t\tox,\n\t\t\toy,\n\t\t\tpx,\n\t\t\tpy\n\t\t};\n\t}\n\tstatic fromArray(a) {\n\t\treturn {\n\t\t\ta: a[0],\n\t\t\tb: a[1],\n\t\t\tc: a[2],\n\t\t\td: a[3],\n\t\t\te: a[4],\n\t\t\tf: a[5]\n\t\t};\n\t}\n\tstatic isMatrixLike(o) {\n\t\treturn o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n\t}\n\tstatic matrixMultiply(l, r, o) {\n\t\tconst a = l.a * r.a + l.c * r.b;\n\t\tconst b = l.b * r.a + l.d * r.b;\n\t\tconst c = l.a * r.c + l.c * r.d;\n\t\tconst d = l.b * r.c + l.d * r.d;\n\t\tconst e = l.e + l.a * r.e + l.c * r.f;\n\t\tconst f = l.f + l.b * r.e + l.d * r.f;\n\t\to.a = a;\n\t\to.b = b;\n\t\to.c = c;\n\t\to.d = d;\n\t\to.e = e;\n\t\to.f = f;\n\t\treturn o;\n\t}\n\taround(cx, cy, matrix) {\n\t\treturn this.clone().aroundO(cx, cy, matrix);\n\t}\n\taroundO(cx, cy, matrix) {\n\t\tconst dx = cx || 0;\n\t\tconst dy = cy || 0;\n\t\treturn this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n\t}\n\tclone() {\n\t\treturn new Matrix(this);\n\t}\n\tdecompose(cx = 0, cy = 0) {\n\t\tconst a = this.a;\n\t\tconst b = this.b;\n\t\tconst c = this.c;\n\t\tconst d = this.d;\n\t\tconst e = this.e;\n\t\tconst f = this.f;\n\t\tconst determinant = a * d - b * c;\n\t\tconst ccw = determinant > 0 ? 1 : -1;\n\t\tconst sx = ccw * Math.sqrt(a * a + b * b);\n\t\tconst thetaRad = Math.atan2(ccw * b, ccw * a);\n\t\tconst theta = 180 / Math.PI * thetaRad;\n\t\tconst lam = (a * c + b * d) / determinant;\n\t\treturn {\n\t\t\tscaleX: sx,\n\t\t\tscaleY: c * sx / (lam * a - b) || d * sx / (lam * b + a),\n\t\t\tshear: lam,\n\t\t\trotate: theta,\n\t\t\ttranslateX: e - cx + cx * a + cy * c,\n\t\t\ttranslateY: f - cy + cx * b + cy * d,\n\t\t\toriginX: cx,\n\t\t\toriginY: cy,\n\t\t\ta: this.a,\n\t\t\tb: this.b,\n\t\t\tc: this.c,\n\t\t\td: this.d,\n\t\t\te: this.e,\n\t\t\tf: this.f\n\t\t};\n\t}\n\tequals(other) {\n\t\tif (other === this) return true;\n\t\tconst comp = new Matrix(other);\n\t\treturn closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n\t}\n\tflip(axis, around) {\n\t\treturn this.clone().flipO(axis, around);\n\t}\n\tflipO(axis, around) {\n\t\treturn axis === \"x\" ? this.scaleO(-1, 1, around, 0) : axis === \"y\" ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis);\n\t}\n\tinit(source) {\n\t\tconst base = Matrix.fromArray([\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tsource = source instanceof Element ? source.matrixify() : typeof source === \"string\" ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : typeof source === \"object\" && Matrix.isMatrixLike(source) ? source : typeof source === \"object\" ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base;\n\t\tthis.a = source.a != null ? source.a : base.a;\n\t\tthis.b = source.b != null ? source.b : base.b;\n\t\tthis.c = source.c != null ? source.c : base.c;\n\t\tthis.d = source.d != null ? source.d : base.d;\n\t\tthis.e = source.e != null ? source.e : base.e;\n\t\tthis.f = source.f != null ? source.f : base.f;\n\t\treturn this;\n\t}\n\tinverse() {\n\t\treturn this.clone().inverseO();\n\t}\n\tinverseO() {\n\t\tconst a = this.a;\n\t\tconst b = this.b;\n\t\tconst c = this.c;\n\t\tconst d = this.d;\n\t\tconst e = this.e;\n\t\tconst f = this.f;\n\t\tconst det = a * d - b * c;\n\t\tif (!det) throw new Error(\"Cannot invert \" + this);\n\t\tconst na = d / det;\n\t\tconst nb = -b / det;\n\t\tconst nc = -c / det;\n\t\tconst nd = a / det;\n\t\tconst ne = -(na * e + nc * f);\n\t\tconst nf = -(nb * e + nd * f);\n\t\tthis.a = na;\n\t\tthis.b = nb;\n\t\tthis.c = nc;\n\t\tthis.d = nd;\n\t\tthis.e = ne;\n\t\tthis.f = nf;\n\t\treturn this;\n\t}\n\tlmultiply(matrix) {\n\t\treturn this.clone().lmultiplyO(matrix);\n\t}\n\tlmultiplyO(matrix) {\n\t\tconst r = this;\n\t\tconst l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n\t\treturn Matrix.matrixMultiply(l, r, this);\n\t}\n\tmultiply(matrix) {\n\t\treturn this.clone().multiplyO(matrix);\n\t}\n\tmultiplyO(matrix) {\n\t\tconst l = this;\n\t\tconst r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n\t\treturn Matrix.matrixMultiply(l, r, this);\n\t}\n\trotate(r, cx, cy) {\n\t\treturn this.clone().rotateO(r, cx, cy);\n\t}\n\trotateO(r, cx = 0, cy = 0) {\n\t\tr = radians(r);\n\t\tconst cos = Math.cos(r);\n\t\tconst sin = Math.sin(r);\n\t\tconst { a, b, c, d, e, f } = this;\n\t\tthis.a = a * cos - b * sin;\n\t\tthis.b = b * cos + a * sin;\n\t\tthis.c = c * cos - d * sin;\n\t\tthis.d = d * cos + c * sin;\n\t\tthis.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n\t\tthis.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n\t\treturn this;\n\t}\n\tscale() {\n\t\treturn this.clone().scaleO(...arguments);\n\t}\n\tscaleO(x, y = x, cx = 0, cy = 0) {\n\t\tif (arguments.length === 3) {\n\t\t\tcy = cx;\n\t\t\tcx = y;\n\t\t\ty = x;\n\t\t}\n\t\tconst { a, b, c, d, e, f } = this;\n\t\tthis.a = a * x;\n\t\tthis.b = b * y;\n\t\tthis.c = c * x;\n\t\tthis.d = d * y;\n\t\tthis.e = e * x - cx * x + cx;\n\t\tthis.f = f * y - cy * y + cy;\n\t\treturn this;\n\t}\n\tshear(a, cx, cy) {\n\t\treturn this.clone().shearO(a, cx, cy);\n\t}\n\tshearO(lx, cx = 0, cy = 0) {\n\t\tconst { a, b, c, d, e, f } = this;\n\t\tthis.a = a + b * lx;\n\t\tthis.c = c + d * lx;\n\t\tthis.e = e + f * lx - cy * lx;\n\t\treturn this;\n\t}\n\tskew() {\n\t\treturn this.clone().skewO(...arguments);\n\t}\n\tskewO(x, y = x, cx = 0, cy = 0) {\n\t\tif (arguments.length === 3) {\n\t\t\tcy = cx;\n\t\t\tcx = y;\n\t\t\ty = x;\n\t\t}\n\t\tx = radians(x);\n\t\ty = radians(y);\n\t\tconst lx = Math.tan(x);\n\t\tconst ly = Math.tan(y);\n\t\tconst { a, b, c, d, e, f } = this;\n\t\tthis.a = a + b * lx;\n\t\tthis.b = b + a * ly;\n\t\tthis.c = c + d * lx;\n\t\tthis.d = d + c * ly;\n\t\tthis.e = e + f * lx - cy * lx;\n\t\tthis.f = f + e * ly - cx * ly;\n\t\treturn this;\n\t}\n\tskewX(x, cx, cy) {\n\t\treturn this.skew(x, 0, cx, cy);\n\t}\n\tskewY(y, cx, cy) {\n\t\treturn this.skew(0, y, cx, cy);\n\t}\n\ttoArray() {\n\t\treturn [\n\t\t\tthis.a,\n\t\t\tthis.b,\n\t\t\tthis.c,\n\t\t\tthis.d,\n\t\t\tthis.e,\n\t\t\tthis.f\n\t\t];\n\t}\n\ttoString() {\n\t\treturn \"matrix(\" + this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d + \",\" + this.e + \",\" + this.f + \")\";\n\t}\n\ttransform(o) {\n\t\tif (Matrix.isMatrixLike(o)) return new Matrix(o).multiplyO(this);\n\t\tconst t = Matrix.formatTransforms(o);\n\t\tconst current = this;\n\t\tconst { x: ox, y: oy } = new Point(t.ox, t.oy).transform(current);\n\t\tconst transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy);\n\t\tif (isFinite(t.px) || isFinite(t.py)) {\n\t\t\tconst origin = new Point(ox, oy).transform(transformer);\n\t\t\tconst dx = isFinite(t.px) ? t.px - origin.x : 0;\n\t\t\tconst dy = isFinite(t.py) ? t.py - origin.y : 0;\n\t\t\ttransformer.translateO(dx, dy);\n\t\t}\n\t\ttransformer.translateO(t.tx, t.ty);\n\t\treturn transformer;\n\t}\n\ttranslate(x, y) {\n\t\treturn this.clone().translateO(x, y);\n\t}\n\ttranslateO(x, y) {\n\t\tthis.e += x || 0;\n\t\tthis.f += y || 0;\n\t\treturn this;\n\t}\n\tvalueOf() {\n\t\treturn {\n\t\t\ta: this.a,\n\t\t\tb: this.b,\n\t\t\tc: this.c,\n\t\t\td: this.d,\n\t\t\te: this.e,\n\t\t\tf: this.f\n\t\t};\n\t}\n};\nfunction ctm() {\n\treturn new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n\ttry {\n\t\tif (typeof this.isRoot === \"function\" && !this.isRoot()) {\n\t\t\tconst rect = this.rect(1, 1);\n\t\t\tconst m = rect.node.getScreenCTM();\n\t\t\trect.remove();\n\t\t\treturn new Matrix(m);\n\t\t}\n\t\treturn new Matrix(this.node.getScreenCTM());\n\t} catch (e) {\n\t\tconsole.warn(`Cannot get CTM from SVG node ${this.node.nodeName}. Is the element rendered?`);\n\t\treturn new Matrix();\n\t}\n}\nregister(Matrix, \"Matrix\");\n\n//#endregion\n//#region src/modules/core/parser.js\nfunction parser() {\n\tif (!parser.nodes || parser.nodes.svg.node.ownerDocument !== globals.document) {\n\t\tconst svg = makeInstance().size(2, 0);\n\t\tsvg.node.style.cssText = [\n\t\t\t\"opacity: 0\",\n\t\t\t\"position: absolute\",\n\t\t\t\"left: -100%\",\n\t\t\t\"top: -100%\",\n\t\t\t\"overflow: hidden\"\n\t\t].join(\";\");\n\t\tsvg.attr(\"focusable\", \"false\");\n\t\tsvg.attr(\"aria-hidden\", \"true\");\n\t\tparser.nodes = {\n\t\t\tsvg,\n\t\t\tpath: svg.path().node\n\t\t};\n\t}\n\tif (!parser.nodes.svg.node.parentNode) parser.nodes.svg.addTo(globals.document.body || globals.document.documentElement);\n\treturn parser.nodes;\n}\n\n//#endregion\n//#region src/types/Box.js\nfunction isNulledBox(box) {\n\treturn !box.width && !box.height && !box.x && !box.y;\n}\nfunction domContains(node) {\n\treturn node === globals.document || (globals.document.documentElement.contains || function(node) {\n\t\twhile (node.parentNode) node = node.parentNode;\n\t\treturn node === globals.document;\n\t}).call(globals.document.documentElement, node);\n}\nvar Box = class Box {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\taddOffset() {\n\t\tthis.x += globals.window.pageXOffset;\n\t\tthis.y += globals.window.pageYOffset;\n\t\treturn new Box(this);\n\t}\n\tinit(source) {\n\t\tsource = typeof source === \"string\" ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : typeof source === \"object\" ? [\n\t\t\tsource.left != null ? source.left : source.x,\n\t\t\tsource.top != null ? source.top : source.y,\n\t\t\tsource.width,\n\t\t\tsource.height\n\t\t] : arguments.length === 4 ? [].slice.call(arguments) : [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tthis.x = source[0] || 0;\n\t\tthis.y = source[1] || 0;\n\t\tthis.width = this.w = source[2] || 0;\n\t\tthis.height = this.h = source[3] || 0;\n\t\tthis.x2 = this.x + this.w;\n\t\tthis.y2 = this.y + this.h;\n\t\tthis.cx = this.x + this.w / 2;\n\t\tthis.cy = this.y + this.h / 2;\n\t\treturn this;\n\t}\n\tisNulled() {\n\t\treturn isNulledBox(this);\n\t}\n\tmerge(box) {\n\t\tconst x = Math.min(this.x, box.x);\n\t\tconst y = Math.min(this.y, box.y);\n\t\tconst width = Math.max(this.x + this.width, box.x + box.width) - x;\n\t\tconst height = Math.max(this.y + this.height, box.y + box.height) - y;\n\t\treturn new Box(x, y, width, height);\n\t}\n\ttoArray() {\n\t\treturn [\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.width,\n\t\t\tthis.height\n\t\t];\n\t}\n\ttoString() {\n\t\treturn this.x + \" \" + this.y + \" \" + this.width + \" \" + this.height;\n\t}\n\ttransform(m) {\n\t\tif (!(m instanceof Matrix)) m = new Matrix(m);\n\t\tlet xMin = Infinity;\n\t\tlet xMax = -Infinity;\n\t\tlet yMin = Infinity;\n\t\tlet yMax = -Infinity;\n\t\t[\n\t\t\tnew Point(this.x, this.y),\n\t\t\tnew Point(this.x2, this.y),\n\t\t\tnew Point(this.x, this.y2),\n\t\t\tnew Point(this.x2, this.y2)\n\t\t].forEach(function(p) {\n\t\t\tp = p.transform(m);\n\t\t\txMin = Math.min(xMin, p.x);\n\t\t\txMax = Math.max(xMax, p.x);\n\t\t\tyMin = Math.min(yMin, p.y);\n\t\t\tyMax = Math.max(yMax, p.y);\n\t\t});\n\t\treturn new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n\t}\n};\nfunction getBox(el, getBBoxFn, retry) {\n\tlet box;\n\ttry {\n\t\tbox = getBBoxFn(el.node);\n\t\tif (isNulledBox(box) && !domContains(el.node)) throw new Error(\"Element not in the dom\");\n\t} catch (e) {\n\t\tbox = retry(el);\n\t}\n\treturn box;\n}\nfunction bbox() {\n\tconst getBBox = (node) => node.getBBox();\n\tconst retry = (el) => {\n\t\ttry {\n\t\t\tconst clone = el.clone().addTo(parser().svg).show();\n\t\t\tconst box = clone.node.getBBox();\n\t\t\tclone.remove();\n\t\t\treturn box;\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Getting bbox of element \"${el.node.nodeName}\" is not possible: ${e.toString()}`);\n\t\t}\n\t};\n\tconst box = getBox(this, getBBox, retry);\n\treturn new Box(box);\n}\nfunction rbox(el) {\n\tconst getRBox = (node) => node.getBoundingClientRect();\n\tconst retry = (el) => {\n\t\tthrow new Error(`Getting rbox of element \"${el.node.nodeName}\" is not possible`);\n\t};\n\tconst box = getBox(this, getRBox, retry);\n\tconst rbox = new Box(box);\n\tif (el) return rbox.transform(el.screenCTM().inverseO());\n\treturn rbox.addOffset();\n}\nfunction inside(x, y) {\n\tconst box = this.bbox();\n\treturn x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n}\nregisterMethods({ viewbox: {\n\tviewbox(x, y, width, height) {\n\t\tif (x == null) return new Box(this.attr(\"viewBox\"));\n\t\treturn this.attr(\"viewBox\", new Box(x, y, width, height));\n\t},\n\tzoom(level, point) {\n\t\tlet { width, height } = this.attr([\"width\", \"height\"]);\n\t\tif (!width && !height || typeof width === \"string\" || typeof height === \"string\") {\n\t\t\twidth = this.node.clientWidth;\n\t\t\theight = this.node.clientHeight;\n\t\t}\n\t\tif (!width || !height) throw new Error(\"Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element\");\n\t\tconst v = this.viewbox();\n\t\tconst zoomX = width / v.width;\n\t\tconst zoomY = height / v.height;\n\t\tconst zoom = Math.min(zoomX, zoomY);\n\t\tif (level == null) return zoom;\n\t\tlet zoomAmount = zoom / level;\n\t\tif (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100;\n\t\tpoint = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n\t\tconst box = new Box(v).transform(new Matrix({\n\t\t\tscale: zoomAmount,\n\t\t\torigin: point\n\t\t}));\n\t\treturn this.viewbox(box);\n\t}\n} });\nregister(Box, \"Box\");\n\n//#endregion\n//#region src/types/List.js\nvar List = class extends Array {\n\tconstructor(arr = [], ...args) {\n\t\tsuper(arr, ...args);\n\t\tif (typeof arr === \"number\") return this;\n\t\tthis.length = 0;\n\t\tthis.push(...arr);\n\t}\n};\nextend([List], {\n\teach(fnOrMethodName, ...args) {\n\t\tif (typeof fnOrMethodName === \"function\") return this.map((el, i, arr) => {\n\t\t\treturn fnOrMethodName.call(el, el, i, arr);\n\t\t});\n\t\telse return this.map((el) => {\n\t\t\treturn el[fnOrMethodName](...args);\n\t\t});\n\t},\n\ttoArray() {\n\t\treturn Array.prototype.concat.apply([], this);\n\t}\n});\nconst reserved = [\n\t\"toArray\",\n\t\"constructor\",\n\t\"each\"\n];\nList.extend = function(methods) {\n\tmethods = methods.reduce((obj, name) => {\n\t\tif ((0, import_includes.default)(reserved).call(reserved, name)) return obj;\n\t\tif (name[0] === \"_\") return obj;\n\t\tif (name in Array.prototype) obj[\"$\" + name] = Array.prototype[name];\n\t\tobj[name] = function(...attrs) {\n\t\t\treturn this.each(name, ...attrs);\n\t\t};\n\t\treturn obj;\n\t}, {});\n\textend([List], methods);\n};\n\n//#endregion\n//#region src/modules/core/references.js\nfunction getReferenceId(value) {\n\tlet referenceValue = (value + \"\").trim();\n\tconst url = referenceValue.match(/^url\\((.*)\\)$/i);\n\tif (url) {\n\t\treferenceValue = url[1].trim();\n\t\tconst quote = referenceValue[0];\n\t\tif (quote === \"\\\"\" || quote === \"'\") {\n\t\t\tif (referenceValue[referenceValue.length - 1] !== quote) return null;\n\t\t\treferenceValue = referenceValue.slice(1, -1);\n\t\t}\n\t}\n\tconst match = referenceValue.match(reference);\n\treturn match ? match[1].slice(1) : null;\n}\nfunction findById(rootNode, id) {\n\tconst selector = `#${globals.window.CSS.escape(id)}`;\n\tif (rootNode.nodeType === 1 && rootNode.matches(selector)) return rootNode;\n\treturn rootNode.querySelector(selector);\n}\nfunction resolveReference(node, value) {\n\tconst id = getReferenceId(value);\n\treturn id ? findById(node.getRootNode(), id) : null;\n}\nfunction findReferences(node, attribute, selector = `[${attribute}]`) {\n\tconst id = node.getAttribute(\"id\");\n\tconst rootNode = node.getRootNode();\n\tif (!id || findById(rootNode, id) !== node) return new List();\n\tconst references = [];\n\tif (rootNode.nodeType === 1 && rootNode.matches(selector) && getReferenceId(rootNode.getAttribute(attribute)) === id) references.push(adopt(rootNode));\n\tfor (const element of rootNode.querySelectorAll(selector)) if (getReferenceId(element.getAttribute(attribute)) === id) references.push(adopt(element));\n\treturn new List(references);\n}\n\n//#endregion\n//#region src/modules/core/selector.js\nfunction baseFind(query, parent) {\n\treturn new List(map((parent || globals.document).querySelectorAll(query), function(node) {\n\t\treturn adopt(node);\n\t}));\n}\nfunction find(query) {\n\treturn baseFind(query, this.node);\n}\nfunction findOne(query) {\n\treturn adopt(this.node.querySelector(query));\n}\n\n//#endregion\n//#region src/modules/core/event.js\nlet listenerId = 0;\nconst eventStore = /* @__PURE__ */ new WeakMap();\nconst listenerIds = /* @__PURE__ */ new WeakMap();\nconst createEventMap = () => Object.create(null);\nfunction getEvents(instance) {\n\tconst holder = instance.getEventHolder();\n\tlet bag = eventStore.get(holder);\n\tif (!bag) {\n\t\tbag = createEventMap();\n\t\teventStore.set(holder, bag);\n\t}\n\treturn bag;\n}\nfunction getEventTarget(instance) {\n\treturn instance.getEventTarget();\n}\nfunction clearEvents(instance) {\n\teventStore.delete(instance.getEventHolder());\n}\nfunction on(node, events, listener, binding, options) {\n\tconst l = listener.bind(binding || node);\n\tconst listenerOptions = options || false;\n\tconst instance = makeInstance(node);\n\tconst bag = getEvents(instance);\n\tconst n = getEventTarget(instance);\n\tevents = Array.isArray(events) ? events : events.split(delimiter);\n\tlet id = listenerIds.get(listener);\n\tif (!id) {\n\t\tid = ++listenerId;\n\t\tlistenerIds.set(listener, id);\n\t}\n\tevents.forEach(function(event) {\n\t\tconst ev = event.split(\".\")[0];\n\t\tconst ns = event.split(\".\")[1] || \"*\";\n\t\tbag[ev] = bag[ev] || createEventMap();\n\t\tbag[ev][ns] = bag[ev][ns] || createEventMap();\n\t\tbag[ev][ns][id] = bag[ev][ns][id] || [];\n\t\tbag[ev][ns][id].push({\n\t\t\tlistener: l,\n\t\t\toptions: listenerOptions\n\t\t});\n\t\tn.addEventListener(ev, l, listenerOptions);\n\t});\n}\nfunction off(node, events, listener, options) {\n\tconst instance = makeInstance(node);\n\tconst bag = getEvents(instance);\n\tconst n = getEventTarget(instance);\n\tif (typeof listener === \"function\") {\n\t\tlistener = listenerIds.get(listener);\n\t\tif (!listener) return;\n\t}\n\tevents = Array.isArray(events) ? events : (events || \"\").split(delimiter);\n\tevents.forEach(function(event) {\n\t\tconst ev = event && event.split(\".\")[0];\n\t\tconst ns = event && event.split(\".\")[1];\n\t\tlet namespace, l;\n\t\tif (listener) {\n\t\t\tif (bag[ev] && bag[ev][ns || \"*\"]) {\n\t\t\t\tconst listeners = bag[ev][ns || \"*\"][listener];\n\t\t\t\tif (!listeners) return;\n\t\t\t\tlisteners.forEach(function(registration) {\n\t\t\t\t\tn.removeEventListener(ev, registration.listener, registration.options ?? options ?? false);\n\t\t\t\t});\n\t\t\t\tdelete bag[ev][ns || \"*\"][listener];\n\t\t\t}\n\t\t} else if (ev && ns) {\n\t\t\tif (bag[ev] && bag[ev][ns]) {\n\t\t\t\tfor (l in bag[ev][ns]) off(n, [ev, ns].join(\".\"), l);\n\t\t\t\tdelete bag[ev][ns];\n\t\t\t}\n\t\t} else if (ns) {\n\t\t\tfor (event in bag) for (namespace in bag[event]) if (ns === namespace) off(n, [event, ns].join(\".\"));\n\t\t} else if (ev) {\n\t\t\tif (bag[ev]) {\n\t\t\t\tfor (namespace in bag[ev]) off(n, [ev, namespace].join(\".\"));\n\t\t\t\tdelete bag[ev];\n\t\t\t}\n\t\t} else {\n\t\t\tfor (event in bag) off(n, event);\n\t\t\tclearEvents(instance);\n\t\t}\n\t});\n}\nfunction dispatch(node, event, data, options) {\n\tconst n = getEventTarget(node);\n\tif (event instanceof globals.window.Event) n.dispatchEvent(event);\n\telse {\n\t\tevent = new globals.window.CustomEvent(event, {\n\t\t\tdetail: data,\n\t\t\tcancelable: true,\n\t\t\t...options\n\t\t});\n\t\tn.dispatchEvent(event);\n\t}\n\treturn event;\n}\n\n//#endregion\n//#region src/types/EventTarget.js\nvar EventTarget = class extends Base {\n\taddEventListener() {}\n\tdispatch(event, data, options) {\n\t\treturn dispatch(this, event, data, options);\n\t}\n\tdispatchEvent(event) {\n\t\tconst events = getEvents(this)[event.type];\n\t\tif (!events) return true;\n\t\tfor (const i in events) for (const j in events[i]) events[i][j].forEach(function(registration) {\n\t\t\tregistration.listener(event);\n\t\t});\n\t\treturn !event.defaultPrevented;\n\t}\n\tfire(event, data, options) {\n\t\tthis.dispatch(event, data, options);\n\t\treturn this;\n\t}\n\tgetEventHolder() {\n\t\treturn this;\n\t}\n\tgetEventTarget() {\n\t\treturn this;\n\t}\n\toff(event, listener, options) {\n\t\toff(this, event, listener, options);\n\t\treturn this;\n\t}\n\ton(event, listener, binding, options) {\n\t\ton(this, event, listener, binding, options);\n\t\treturn this;\n\t}\n\tremoveEventListener() {}\n};\nregister(EventTarget, \"EventTarget\");\n\n//#endregion\n//#region src/modules/core/defaults.js\nvar defaults_exports = /* @__PURE__ */ __exportAll({\n\tattrs: () => attrs,\n\tnoop: () => noop,\n\ttimeline: () => timeline\n});\nfunction noop() {}\nconst timeline = {\n\tduration: 400,\n\tease: \">\",\n\tdelay: 0\n};\nconst attrs = {\n\t\"fill-opacity\": 1,\n\t\"stroke-opacity\": 1,\n\t\"stroke-width\": 0,\n\t\"stroke-linejoin\": \"miter\",\n\t\"stroke-linecap\": \"butt\",\n\tfill: \"#000000\",\n\tstroke: \"#000000\",\n\topacity: 1,\n\tx: 0,\n\ty: 0,\n\tcx: 0,\n\tcy: 0,\n\twidth: 0,\n\theight: 0,\n\tr: 0,\n\trx: 0,\n\try: 0,\n\toffset: 0,\n\t\"stop-opacity\": 1,\n\t\"stop-color\": \"#000000\",\n\t\"text-anchor\": \"start\"\n};\n\n//#endregion\n//#region src/types/SVGArray.js\nvar SVGArray = class extends Array {\n\tconstructor(...args) {\n\t\tsuper(...args);\n\t\tthis.init(...args);\n\t}\n\tclone() {\n\t\treturn new this.constructor(this);\n\t}\n\tinit(arr) {\n\t\tif (typeof arr === \"number\") return this;\n\t\tthis.length = 0;\n\t\tthis.push(...this.parse(arr));\n\t\treturn this;\n\t}\n\tparse(array = []) {\n\t\tif (array instanceof Array) return array;\n\t\treturn array.trim().split(delimiter).map(parseFloat);\n\t}\n\ttoArray() {\n\t\treturn Array.prototype.concat.apply([], this);\n\t}\n\ttoSet() {\n\t\treturn new Set(this);\n\t}\n\ttoString() {\n\t\treturn this.join(\" \");\n\t}\n\tvalueOf() {\n\t\tconst ret = [];\n\t\tret.push(...this);\n\t\treturn ret;\n\t}\n};\n\n//#endregion\n//#region src/types/SVGNumber.js\nvar SVGNumber = class SVGNumber {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\tconvert(unit) {\n\t\treturn new SVGNumber(this.value, unit);\n\t}\n\tdivide(number) {\n\t\tnumber = new SVGNumber(number);\n\t\treturn new SVGNumber(this / number, this.unit || number.unit);\n\t}\n\tinit(value, unit) {\n\t\tunit = Array.isArray(value) ? value[1] : unit;\n\t\tvalue = Array.isArray(value) ? value[0] : value;\n\t\tthis.value = 0;\n\t\tthis.unit = unit || \"\";\n\t\tif (typeof value === \"number\") this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -34e37 : 34e37 : value;\n\t\telse if (typeof value === \"string\") {\n\t\t\tunit = value.match(numberAndUnit);\n\t\t\tif (unit) {\n\t\t\t\tthis.value = parseFloat(unit[1]);\n\t\t\t\tif (unit[5] === \"%\") this.value /= 100;\n\t\t\t\telse if (unit[5] === \"s\") this.value *= 1e3;\n\t\t\t\tthis.unit = unit[5];\n\t\t\t}\n\t\t} else if (value instanceof SVGNumber) {\n\t\t\tthis.value = value.valueOf();\n\t\t\tthis.unit = value.unit;\n\t\t}\n\t\treturn this;\n\t}\n\tminus(number) {\n\t\tnumber = new SVGNumber(number);\n\t\treturn new SVGNumber(this - number, this.unit || number.unit);\n\t}\n\tplus(number) {\n\t\tnumber = new SVGNumber(number);\n\t\treturn new SVGNumber(this + number, this.unit || number.unit);\n\t}\n\ttimes(number) {\n\t\tnumber = new SVGNumber(number);\n\t\treturn new SVGNumber(this * number, this.unit || number.unit);\n\t}\n\ttoArray() {\n\t\treturn [this.value, this.unit];\n\t}\n\ttoJSON() {\n\t\treturn this.toString();\n\t}\n\ttoString() {\n\t\treturn (this.unit === \"%\" ? ~~(this.value * 1e8) / 1e6 : this.unit === \"s\" ? this.value / 1e3 : this.value) + this.unit;\n\t}\n\tvalueOf() {\n\t\treturn this.value;\n\t}\n};\n\n//#endregion\n//#region src/modules/core/attr.js\nconst colorAttributes = /* @__PURE__ */ new Set([\n\t\"fill\",\n\t\"stroke\",\n\t\"color\",\n\t\"bgcolor\",\n\t\"stop-color\",\n\t\"flood-color\",\n\t\"lighting-color\"\n]);\nconst hooks = [];\nfunction registerAttrHook(fn) {\n\thooks.push(fn);\n}\nfunction attr(attr, val, ns) {\n\tif (attr == null) {\n\t\tattr = {};\n\t\tval = this.node.attributes;\n\t\tfor (const node of val) attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n\t\treturn attr;\n\t} else if (attr instanceof Array) return attr.reduce((last, curr) => {\n\t\tlast[curr] = this.attr(curr);\n\t\treturn last;\n\t}, {});\n\telse if (typeof attr === \"object\" && attr.constructor === Object) for (val in attr) this.attr(val, attr[val]);\n\telse if (val === null) this.node.removeAttribute(attr);\n\telse if (val == null) {\n\t\tval = this.node.getAttribute(attr);\n\t\treturn val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n\t} else {\n\t\tval = hooks.reduce((_val, hook) => {\n\t\t\treturn hook(attr, _val, this);\n\t\t}, val);\n\t\tif (typeof val === \"number\") val = new SVGNumber(val);\n\t\telse if (colorAttributes.has(attr) && Color.isColor(val)) val = new Color(val);\n\t\telse if (val.constructor === Array) val = new SVGArray(val);\n\t\tif (attr === \"leading\") {\n\t\t\tif (this.leading) this.leading(val);\n\t\t} else typeof ns === \"string\" ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n\t\tif (this.rebuild && (attr === \"font-size\" || attr === \"x\")) this.rebuild();\n\t}\n\treturn this;\n}\n\n//#endregion\n//#region src/elements/Dom.js\nvar Dom = class Dom extends EventTarget {\n\tconstructor(node, attrs) {\n\t\tsuper();\n\t\tthis.node = node;\n\t\tthis.type = node.nodeName;\n\t\tif (attrs && node !== attrs) this.attr(attrs);\n\t}\n\tadd(element, i) {\n\t\telement = makeInstance(element);\n\t\tif (element.removeNamespace && this.node instanceof globals.window.SVGElement) element.removeNamespace();\n\t\tif (i == null) this.node.appendChild(element.node);\n\t\telse if (element.node !== this.node.childNodes[i]) this.node.insertBefore(element.node, this.node.childNodes[i]);\n\t\treturn this;\n\t}\n\taddTo(parent, i) {\n\t\treturn makeInstance(parent).put(this, i);\n\t}\n\tchildren() {\n\t\treturn new List(map(this.node.children, function(node) {\n\t\t\treturn adopt(node);\n\t\t}));\n\t}\n\tclear() {\n\t\twhile (this.node.hasChildNodes()) this.node.removeChild(this.node.lastChild);\n\t\treturn this;\n\t}\n\tclone(deep = true, assignNewIds = true) {\n\t\tthis.writeDataToDom();\n\t\tlet nodeClone = this.node.cloneNode(deep);\n\t\tif (assignNewIds) nodeClone = assignNewId(nodeClone);\n\t\treturn new this.constructor(nodeClone);\n\t}\n\teach(block, deep) {\n\t\tconst children = this.children();\n\t\tlet i, il;\n\t\tfor (i = 0, il = children.length; i < il; i++) {\n\t\t\tblock.apply(children[i], [i, children]);\n\t\t\tif (deep) children[i].each(block, deep);\n\t\t}\n\t\treturn this;\n\t}\n\telement(nodeName, attrs) {\n\t\treturn this.put(new Dom(create(nodeName), attrs));\n\t}\n\tfirst() {\n\t\treturn adopt(this.node.firstChild);\n\t}\n\tget(i) {\n\t\treturn adopt(this.node.childNodes[i]);\n\t}\n\tgetEventHolder() {\n\t\treturn this.node;\n\t}\n\tgetEventTarget() {\n\t\treturn this.node;\n\t}\n\thas(element) {\n\t\treturn this.index(element) >= 0;\n\t}\n\thtml(htmlOrFn, outerHTML) {\n\t\treturn this.xml(htmlOrFn, outerHTML, html);\n\t}\n\tid(id) {\n\t\tif (typeof id === \"undefined\" && !this.node.id) this.node.id = eid(this.type);\n\t\treturn this.attr(\"id\", id);\n\t}\n\tindex(element) {\n\t\treturn [].slice.call(this.node.childNodes).indexOf(element.node);\n\t}\n\tlast() {\n\t\treturn adopt(this.node.lastChild);\n\t}\n\tmatches(selector) {\n\t\tconst el = this.node;\n\t\tconst matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null;\n\t\treturn matcher && matcher.call(el, selector);\n\t}\n\tparent(type) {\n\t\tlet parent = this;\n\t\tif (!parent.node.parentNode) return null;\n\t\tparent = adopt(parent.node.parentNode);\n\t\tif (!type) return parent;\n\t\tdo\n\t\t\tif (typeof type === \"string\" ? parent.matches(type) : parent instanceof type) return parent;\n\t\twhile (parent = adopt(parent.node.parentNode));\n\t\treturn parent;\n\t}\n\tput(element, i) {\n\t\telement = makeInstance(element);\n\t\tthis.add(element, i);\n\t\treturn element;\n\t}\n\tputIn(parent, i) {\n\t\treturn makeInstance(parent).add(this, i);\n\t}\n\tremove() {\n\t\tif (this.parent()) this.parent().removeElement(this);\n\t\treturn this;\n\t}\n\tremoveElement(element) {\n\t\tthis.node.removeChild(element.node);\n\t\treturn this;\n\t}\n\treplace(element) {\n\t\telement = makeInstance(element);\n\t\tif (this.node.parentNode) this.node.parentNode.replaceChild(element.node, this.node);\n\t\treturn element;\n\t}\n\tround(precision = 2, map = null) {\n\t\tconst factor = 10 ** precision;\n\t\tconst attrs = this.attr(map);\n\t\tfor (const i in attrs) if (typeof attrs[i] === \"number\") attrs[i] = Math.round(attrs[i] * factor) / factor;\n\t\tthis.attr(attrs);\n\t\treturn this;\n\t}\n\tsvg(svgOrFn, outerSVG) {\n\t\treturn this.xml(svgOrFn, outerSVG, svg);\n\t}\n\ttoString() {\n\t\treturn this.id();\n\t}\n\twords(text) {\n\t\tthis.node.textContent = text;\n\t\treturn this;\n\t}\n\twrap(node) {\n\t\tconst parent = this.parent();\n\t\tif (!parent) return this.addTo(node);\n\t\tconst position = parent.index(this);\n\t\treturn parent.put(node, position).put(this);\n\t}\n\twriteDataToDom() {\n\t\tthis.each(function() {\n\t\t\tthis.writeDataToDom();\n\t\t});\n\t\treturn this;\n\t}\n\txml(xmlOrFn, outerXML, ns) {\n\t\tif (typeof xmlOrFn === \"boolean\") {\n\t\t\tns = outerXML;\n\t\t\touterXML = xmlOrFn;\n\t\t\txmlOrFn = null;\n\t\t}\n\t\tif (xmlOrFn == null || typeof xmlOrFn === \"function\") {\n\t\t\touterXML = outerXML == null ? true : outerXML;\n\t\t\tthis.writeDataToDom();\n\t\t\tlet current = this;\n\t\t\tif (xmlOrFn != null) {\n\t\t\t\tcurrent = adopt(current.node.cloneNode(true));\n\t\t\t\tif (outerXML) {\n\t\t\t\t\tconst result = xmlOrFn(current);\n\t\t\t\t\tcurrent = result || current;\n\t\t\t\t\tif (result === false) return \"\";\n\t\t\t\t}\n\t\t\t\tcurrent.each(function() {\n\t\t\t\t\tconst result = xmlOrFn(this);\n\t\t\t\t\tconst _this = result || this;\n\t\t\t\t\tif (result === false) this.remove();\n\t\t\t\t\telse if (result && this !== _this) this.replace(_this);\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\treturn outerXML ? current.node.outerHTML : current.node.innerHTML;\n\t\t}\n\t\touterXML = outerXML == null ? false : outerXML;\n\t\tconst well = create(\"wrapper\", ns);\n\t\tconst fragment = globals.document.createDocumentFragment();\n\t\twell.innerHTML = xmlOrFn;\n\t\tfor (let len = well.children.length; len--;) fragment.appendChild(well.firstElementChild);\n\t\tconst parent = this.parent();\n\t\treturn outerXML ? this.replace(fragment) && parent : this.add(fragment);\n\t}\n};\nextend(Dom, {\n\tattr,\n\tfind,\n\tfindOne\n});\nregister(Dom, \"Dom\");\n\n//#endregion\n//#region src/elements/Element.js\nvar Element = class extends Dom {\n\tconstructor(node, attrs) {\n\t\tsuper(node, attrs);\n\t\tthis.dom = {};\n\t\tthis.node.instance = this;\n\t\tif (node.hasAttribute(\"data-svgjs\") || node.hasAttribute(\"svgjs:data\")) this.setData(JSON.parse(node.getAttribute(\"data-svgjs\")) ?? JSON.parse(node.getAttribute(\"svgjs:data\")) ?? {});\n\t}\n\tcenter(x, y) {\n\t\treturn this.cx(x).cy(y);\n\t}\n\tcx(x) {\n\t\treturn x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n\t}\n\tcy(y) {\n\t\treturn y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n\t}\n\tdefs() {\n\t\tconst root = this.root();\n\t\treturn root && root.defs();\n\t}\n\tdmove(x, y) {\n\t\treturn this.dx(x).dy(y);\n\t}\n\tdx(x = 0) {\n\t\treturn this.x(new SVGNumber(x).plus(this.x()));\n\t}\n\tdy(y = 0) {\n\t\treturn this.y(new SVGNumber(y).plus(this.y()));\n\t}\n\tgetEventHolder() {\n\t\treturn this;\n\t}\n\theight(height) {\n\t\treturn this.attr(\"height\", height);\n\t}\n\tmove(x, y) {\n\t\treturn this.x(x).y(y);\n\t}\n\tparents(until = this.root()) {\n\t\tconst isSelector = typeof until === \"string\";\n\t\tconst root = this.root();\n\t\tconst rootNode = root && root.node;\n\t\tif (!isSelector) until = until && makeInstance(until).node;\n\t\tconst parents = new List();\n\t\tlet parent = this;\n\t\twhile ((parent = parent.parent()) && parent.node !== globals.document && parent.node.nodeName !== \"#document-fragment\") {\n\t\t\tparents.push(parent);\n\t\t\tif (!isSelector && parent.node === until) break;\n\t\t\tif (isSelector && parent.matches(until)) break;\n\t\t\tif (rootNode && parent.node === rootNode) return null;\n\t\t}\n\t\treturn parents;\n\t}\n\treference(attr) {\n\t\tattr = this.attr(attr);\n\t\tif (!attr) return null;\n\t\tconst target = resolveReference(this.node, attr);\n\t\treturn target ? makeInstance(target) : null;\n\t}\n\troot() {\n\t\tconst p = this.parent(getClass(root));\n\t\treturn p && p.root();\n\t}\n\tsetData(o) {\n\t\tthis.dom = o;\n\t\treturn this;\n\t}\n\tsize(width, height) {\n\t\tconst p = proportionalSize(this, width, height);\n\t\treturn this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n\t}\n\twidth(width) {\n\t\treturn this.attr(\"width\", width);\n\t}\n\twriteDataToDom(defaults) {\n\t\twriteDataToDom(this, this.dom, defaults);\n\t\treturn super.writeDataToDom();\n\t}\n\tx(x) {\n\t\treturn this.attr(\"x\", x);\n\t}\n\ty(y) {\n\t\treturn this.attr(\"y\", y);\n\t}\n};\nextend(Element, {\n\tbbox,\n\trbox,\n\tinside,\n\tpoint,\n\tctm,\n\tscreenCTM\n});\nregister(Element, \"Element\");\n\n//#endregion\n//#region src/modules/optional/sugar.js\nconst sugar = {\n\tstroke: [\n\t\t\"color\",\n\t\t\"width\",\n\t\t\"opacity\",\n\t\t\"linecap\",\n\t\t\"linejoin\",\n\t\t\"miterlimit\",\n\t\t\"dasharray\",\n\t\t\"dashoffset\"\n\t],\n\tfill: [\n\t\t\"color\",\n\t\t\"opacity\",\n\t\t\"rule\"\n\t],\n\tprefix: function(t, a) {\n\t\treturn a === \"color\" ? t : t + \"-\" + a;\n\t}\n};\n[\"fill\", \"stroke\"].forEach(function(m) {\n\tconst extension = {};\n\tlet i;\n\textension[m] = function(o) {\n\t\tif (typeof o === \"undefined\") return this.attr(m);\n\t\tif (typeof o === \"string\" || o instanceof Color || Color.isRgb(o) || o instanceof Element) this.attr(m, o);\n\t\telse for (i = sugar[m].length - 1; i >= 0; i--) if (o[sugar[m][i]] != null) this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n\t\treturn this;\n\t};\n\tregisterMethods([\"Element\", \"Runner\"], extension);\n});\nregisterMethods([\"Element\", \"Runner\"], {\n\tmatrix: function(mat, b, c, d, e, f) {\n\t\tif (mat == null) return new Matrix(this);\n\t\treturn this.attr(\"transform\", new Matrix(mat, b, c, d, e, f));\n\t},\n\trotate: function(angle, cx, cy) {\n\t\treturn this.transform({\n\t\t\trotate: angle,\n\t\t\tox: cx,\n\t\t\toy: cy\n\t\t}, true);\n\t},\n\tskew: function(x, y, cx, cy) {\n\t\treturn arguments.length === 1 || arguments.length === 3 ? this.transform({\n\t\t\tskew: x,\n\t\t\tox: y,\n\t\t\toy: cx\n\t\t}, true) : this.transform({\n\t\t\tskew: [x, y],\n\t\t\tox: cx,\n\t\t\toy: cy\n\t\t}, true);\n\t},\n\tshear: function(lam, cx, cy) {\n\t\treturn this.transform({\n\t\t\tshear: lam,\n\t\t\tox: cx,\n\t\t\toy: cy\n\t\t}, true);\n\t},\n\tscale: function(x, y, cx, cy) {\n\t\treturn arguments.length === 1 || arguments.length === 3 ? this.transform({\n\t\t\tscale: x,\n\t\t\tox: y,\n\t\t\toy: cx\n\t\t}, true) : this.transform({\n\t\t\tscale: [x, y],\n\t\t\tox: cx,\n\t\t\toy: cy\n\t\t}, true);\n\t},\n\ttranslate: function(x, y) {\n\t\treturn this.transform({ translate: [x, y] }, true);\n\t},\n\trelative: function(x, y) {\n\t\treturn this.transform({ relative: [x, y] }, true);\n\t},\n\tflip: function(direction = \"both\", origin = \"center\") {\n\t\tif (\"xybothtrue\".indexOf(direction) === -1) {\n\t\t\torigin = direction;\n\t\t\tdirection = \"both\";\n\t\t}\n\t\treturn this.transform({\n\t\t\tflip: direction,\n\t\t\torigin\n\t\t}, true);\n\t},\n\topacity: function(value) {\n\t\treturn this.attr(\"opacity\", value);\n\t}\n});\nregisterMethods(\"radius\", { radius: function(x, y = x) {\n\treturn (this._element || this).type === \"radialGradient\" ? this.attr(\"r\", new SVGNumber(x)) : this.rx(x).ry(y);\n} });\nregisterMethods(\"Path\", {\n\tlength: function() {\n\t\treturn this.node.getTotalLength();\n\t},\n\tpointAt: function(length) {\n\t\treturn new Point(this.node.getPointAtLength(length));\n\t}\n});\nregisterMethods([\"Element\", \"Runner\"], { font: function(a, v) {\n\tif (typeof a === \"object\") {\n\t\tfor (v in a) this.font(v, a[v]);\n\t\treturn this;\n\t}\n\treturn a === \"leading\" ? this.leading(v) : a === \"anchor\" ? this.attr(\"text-anchor\", v) : a === \"size\" || a === \"family\" || a === \"weight\" || a === \"stretch\" || a === \"variant\" || a === \"style\" ? this.attr(\"font-\" + a, v) : this.attr(a, v);\n} });\nregisterMethods(\"Element\", [\n\t\"click\",\n\t\"dblclick\",\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"mouseover\",\n\t\"mouseout\",\n\t\"mousemove\",\n\t\"mouseenter\",\n\t\"mouseleave\",\n\t\"touchstart\",\n\t\"touchmove\",\n\t\"touchleave\",\n\t\"touchend\",\n\t\"touchcancel\",\n\t\"contextmenu\",\n\t\"wheel\",\n\t\"pointerdown\",\n\t\"pointermove\",\n\t\"pointerup\",\n\t\"pointerleave\",\n\t\"pointercancel\"\n].reduce(function(last, event) {\n\tconst fn = function(f) {\n\t\tif (f === null) this.off(event);\n\t\telse this.on(event, f);\n\t\treturn this;\n\t};\n\tlast[event] = fn;\n\treturn last;\n}, {}));\n\n//#endregion\n//#region src/modules/optional/transform.js\nfunction untransform() {\n\treturn this.attr(\"transform\", null);\n}\nfunction matrixify() {\n\treturn (this.attr(\"transform\") || \"\").split(transforms).slice(0, -1).map(function(str) {\n\t\tconst kv = str.trim().split(\"(\");\n\t\treturn [kv[0].trim(), kv[1].split(delimiter).map(function(str) {\n\t\t\treturn parseFloat(str);\n\t\t})];\n\t}).reverse().reduce(function(matrix, transform) {\n\t\tif (transform[0] === \"matrix\") return matrix.lmultiply(Matrix.fromArray(transform[1]));\n\t\treturn matrix[transform[0]].apply(matrix, transform[1]);\n\t}, new Matrix());\n}\nfunction toParent(parent, i) {\n\tif (this === parent) return this;\n\tif (isDescriptive(this.node)) return this.addTo(parent, i);\n\tconst ctm = this.screenCTM();\n\tconst pCtm = parent.screenCTM().inverse();\n\tthis.addTo(parent, i).untransform().transform(pCtm.multiply(ctm));\n\treturn this;\n}\nfunction toRoot(i) {\n\treturn this.toParent(this.root(), i);\n}\nfunction transform(o, relative) {\n\tif (o == null || typeof o === \"string\") {\n\t\tconst decomposed = new Matrix(this).decompose();\n\t\treturn o == null ? decomposed : decomposed[o];\n\t}\n\tif (!Matrix.isMatrixLike(o)) o = {\n\t\t...o,\n\t\torigin: getOrigin(o, this)\n\t};\n\tconst result = new Matrix(relative === true ? this : relative || false).transform(o);\n\treturn this.attr(\"transform\", result);\n}\nregisterMethods(\"Element\", {\n\tuntransform,\n\tmatrixify,\n\ttoParent,\n\ttoRoot,\n\ttransform\n});\n\n//#endregion\n//#region src/elements/Container.js\nvar Container = class Container extends Element {\n\tflatten() {\n\t\tthis.each(function() {\n\t\t\tif (this instanceof Container) return this.flatten().ungroup();\n\t\t});\n\t\treturn this;\n\t}\n\tungroup(parent = this.parent(), index = parent.index(this)) {\n\t\tindex = index === -1 ? parent.children().length : index;\n\t\tthis.each(function(i, children) {\n\t\t\treturn children[children.length - i - 1].toParent(parent, index);\n\t\t});\n\t\treturn this.remove();\n\t}\n};\nregister(Container, \"Container\");\n\n//#endregion\n//#region src/elements/Defs.js\nvar Defs = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"defs\", node), attrs);\n\t}\n\tflatten() {\n\t\treturn this;\n\t}\n\tungroup() {\n\t\treturn this;\n\t}\n};\nregister(Defs, \"Defs\");\n\n//#endregion\n//#region src/elements/Shape.js\nvar Shape = class extends Element {};\nregister(Shape, \"Shape\");\n\n//#endregion\n//#region src/modules/core/circled.js\nvar circled_exports = /* @__PURE__ */ __exportAll({\n\tcx: () => cx$1,\n\tcy: () => cy$1,\n\theight: () => height$2,\n\trx: () => rx,\n\try: () => ry,\n\twidth: () => width$2,\n\tx: () => x$3,\n\ty: () => y$3\n});\nfunction rx(rx) {\n\treturn this.attr(\"rx\", rx);\n}\nfunction ry(ry) {\n\treturn this.attr(\"ry\", ry);\n}\nfunction x$3(x) {\n\treturn x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n}\nfunction y$3(y) {\n\treturn y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n}\nfunction cx$1(x) {\n\treturn this.attr(\"cx\", x);\n}\nfunction cy$1(y) {\n\treturn this.attr(\"cy\", y);\n}\nfunction width$2(width) {\n\treturn width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n}\nfunction height$2(height) {\n\treturn height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\n//#endregion\n//#region src/elements/Ellipse.js\nvar Ellipse = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"ellipse\", node), attrs);\n\t}\n\tsize(width, height) {\n\t\tconst p = proportionalSize(this, width, height);\n\t\treturn this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n\t}\n};\nextend(Ellipse, circled_exports);\nregisterMethods(\"Container\", { ellipse: wrapWithAttrCheck(function(width = 0, height = width) {\n\treturn this.put(new Ellipse()).size(width, height).move(0, 0);\n}) });\nregister(Ellipse, \"Ellipse\");\n\n//#endregion\n//#region src/elements/Fragment.js\nvar Fragment = class extends Dom {\n\tconstructor(node = globals.document.createDocumentFragment()) {\n\t\tsuper(node);\n\t}\n\txml(xmlOrFn, outerXML, ns) {\n\t\tif (typeof xmlOrFn === \"boolean\") {\n\t\t\tns = outerXML;\n\t\t\touterXML = xmlOrFn;\n\t\t\txmlOrFn = null;\n\t\t}\n\t\tif (xmlOrFn == null || typeof xmlOrFn === \"function\") {\n\t\t\tconst wrapper = new Dom(create(\"wrapper\", ns));\n\t\t\twrapper.add(this.node.cloneNode(true));\n\t\t\treturn wrapper.xml(false, ns);\n\t\t}\n\t\treturn super.xml(xmlOrFn, false, ns);\n\t}\n};\nregister(Fragment, \"Fragment\");\n\n//#endregion\n//#region src/modules/core/gradiented.js\nvar gradiented_exports = /* @__PURE__ */ __exportAll({\n\tfrom: () => from,\n\tto: () => to\n});\nfunction from(x, y) {\n\treturn (this._element || this).type === \"radialGradient\" ? this.attr({\n\t\tfx: new SVGNumber(x),\n\t\tfy: new SVGNumber(y)\n\t}) : this.attr({\n\t\tx1: new SVGNumber(x),\n\t\ty1: new SVGNumber(y)\n\t});\n}\nfunction to(x, y) {\n\treturn (this._element || this).type === \"radialGradient\" ? this.attr({\n\t\tcx: new SVGNumber(x),\n\t\tcy: new SVGNumber(y)\n\t}) : this.attr({\n\t\tx2: new SVGNumber(x),\n\t\ty2: new SVGNumber(y)\n\t});\n}\n\n//#endregion\n//#region src/elements/Gradient.js\nvar Gradient = class extends Container {\n\tconstructor(type, attrs) {\n\t\tsuper(nodeOrNew(type + \"Gradient\", typeof type === \"string\" ? null : type), attrs);\n\t}\n\tattr(a, b, c) {\n\t\tif (a === \"transform\") a = \"gradientTransform\";\n\t\treturn super.attr(a, b, c);\n\t}\n\tbbox() {\n\t\treturn new Box();\n\t}\n\ttargets() {\n\t\treturn findReferences(this.node, \"fill\");\n\t}\n\ttoString() {\n\t\treturn this.url();\n\t}\n\tupdate(block) {\n\t\tthis.clear();\n\t\tif (typeof block === \"function\") block.call(this, this);\n\t\treturn this;\n\t}\n\turl() {\n\t\treturn \"url(#\" + this.id() + \")\";\n\t}\n};\nextend(Gradient, gradiented_exports);\nregisterMethods({\n\tContainer: { gradient(...args) {\n\t\treturn this.defs().gradient(...args);\n\t} },\n\tDefs: { gradient: wrapWithAttrCheck(function(type, block) {\n\t\treturn this.put(new Gradient(type)).update(block);\n\t}) }\n});\nregister(Gradient, \"Gradient\");\n\n//#endregion\n//#region src/elements/Pattern.js\nvar Pattern = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"pattern\", node), attrs);\n\t}\n\tattr(a, b, c) {\n\t\tif (a === \"transform\") a = \"patternTransform\";\n\t\treturn super.attr(a, b, c);\n\t}\n\tbbox() {\n\t\treturn new Box();\n\t}\n\ttargets() {\n\t\treturn findReferences(this.node, \"fill\");\n\t}\n\ttoString() {\n\t\treturn this.url();\n\t}\n\tupdate(block) {\n\t\tthis.clear();\n\t\tif (typeof block === \"function\") block.call(this, this);\n\t\treturn this;\n\t}\n\turl() {\n\t\treturn \"url(#\" + this.id() + \")\";\n\t}\n};\nregisterMethods({\n\tContainer: { pattern(...args) {\n\t\treturn this.defs().pattern(...args);\n\t} },\n\tDefs: { pattern: wrapWithAttrCheck(function(width, height, block) {\n\t\treturn this.put(new Pattern()).update(block).attr({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tpatternUnits: \"userSpaceOnUse\"\n\t\t});\n\t}) }\n});\nregister(Pattern, \"Pattern\");\n\n//#endregion\n//#region src/elements/Image.js\nvar Image = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"image\", node), attrs);\n\t}\n\tload(url, callback) {\n\t\tif (!url) return this;\n\t\tconst img = new globals.window.Image();\n\t\ton(img, \"load\", function(e) {\n\t\t\tconst p = this.parent(Pattern);\n\t\t\tif (this.width() === 0 && this.height() === 0) this.size(img.width, img.height);\n\t\t\tif (p instanceof Pattern) {\n\t\t\t\tif (p.width() === 0 && p.height() === 0) p.size(this.width(), this.height());\n\t\t\t}\n\t\t\tif (typeof callback === \"function\") callback.call(this, e);\n\t\t}, this);\n\t\ton(img, \"load error\", function() {\n\t\t\toff(img);\n\t\t});\n\t\treturn this.attr(\"href\", img.src = url, xlink);\n\t}\n};\nregisterAttrHook(function(attr, val, _this) {\n\tif (attr === \"fill\" || attr === \"stroke\") {\n\t\tif (isImage.test(val)) val = _this.root().defs().image(val);\n\t}\n\tif (val instanceof Image) val = _this.root().defs().pattern(0, 0, (pattern) => {\n\t\tpattern.add(val);\n\t});\n\treturn val;\n});\nregisterMethods({ Container: { image: wrapWithAttrCheck(function(source, callback) {\n\treturn this.put(new Image()).size(0, 0).load(source, callback);\n}) } });\nregister(Image, \"Image\");\n\n//#endregion\n//#region src/types/PointArray.js\nvar PointArray = class extends SVGArray {\n\tbbox() {\n\t\tlet maxX = -Infinity;\n\t\tlet maxY = -Infinity;\n\t\tlet minX = Infinity;\n\t\tlet minY = Infinity;\n\t\tthis.forEach(function(el) {\n\t\t\tmaxX = Math.max(el[0], maxX);\n\t\t\tmaxY = Math.max(el[1], maxY);\n\t\t\tminX = Math.min(el[0], minX);\n\t\t\tminY = Math.min(el[1], minY);\n\t\t});\n\t\treturn new Box(minX, minY, maxX - minX, maxY - minY);\n\t}\n\tmove(x, y) {\n\t\tconst box = this.bbox();\n\t\tx -= box.x;\n\t\ty -= box.y;\n\t\tif (!isNaN(x) && !isNaN(y)) for (let i = this.length - 1; i >= 0; i--) this[i] = [this[i][0] + x, this[i][1] + y];\n\t\treturn this;\n\t}\n\tparse(array = [0, 0]) {\n\t\tconst points = [];\n\t\tif (array instanceof Array) array = Array.prototype.concat.apply([], array);\n\t\telse array = array.trim().split(delimiter).map(parseFloat);\n\t\tif (array.length % 2 !== 0) array.pop();\n\t\tfor (let i = 0, len = array.length; i < len; i = i + 2) points.push([array[i], array[i + 1]]);\n\t\treturn points;\n\t}\n\tsize(width, height) {\n\t\tlet i;\n\t\tconst box = this.bbox();\n\t\tfor (i = this.length - 1; i >= 0; i--) {\n\t\t\tif (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n\t\t\tif (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n\t\t}\n\t\treturn this;\n\t}\n\ttoLine() {\n\t\treturn {\n\t\t\tx1: this[0][0],\n\t\t\ty1: this[0][1],\n\t\t\tx2: this[1][0],\n\t\t\ty2: this[1][1]\n\t\t};\n\t}\n\ttoString() {\n\t\tconst array = [];\n\t\tfor (let i = 0, il = this.length; i < il; i++) array.push(this[i].join(\",\"));\n\t\treturn array.join(\" \");\n\t}\n\ttransform(m) {\n\t\treturn this.clone().transformO(m);\n\t}\n\ttransformO(m) {\n\t\tif (!Matrix.isMatrixLike(m)) m = new Matrix(m);\n\t\tfor (let i = this.length; i--;) {\n\t\t\tconst [x, y] = this[i];\n\t\t\tthis[i][0] = m.a * x + m.c * y + m.e;\n\t\t\tthis[i][1] = m.b * x + m.d * y + m.f;\n\t\t}\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/modules/core/pointed.js\nvar pointed_exports = /* @__PURE__ */ __exportAll({\n\tMorphArray: () => MorphArray,\n\theight: () => height$1,\n\twidth: () => width$1,\n\tx: () => x$2,\n\ty: () => y$2\n});\nconst MorphArray = PointArray;\nfunction x$2(x) {\n\treturn x == null ? this.bbox().x : this.move(x, this.bbox().y);\n}\nfunction y$2(y) {\n\treturn y == null ? this.bbox().y : this.move(this.bbox().x, y);\n}\nfunction width$1(width) {\n\tconst b = this.bbox();\n\treturn width == null ? b.width : this.size(width, b.height);\n}\nfunction height$1(height) {\n\tconst b = this.bbox();\n\treturn height == null ? b.height : this.size(b.width, height);\n}\n\n//#endregion\n//#region src/elements/Line.js\nvar Line = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"line\", node), attrs);\n\t}\n\tarray() {\n\t\treturn new PointArray([[this.attr(\"x1\"), this.attr(\"y1\")], [this.attr(\"x2\"), this.attr(\"y2\")]]);\n\t}\n\tmove(x, y) {\n\t\treturn this.attr(this.array().move(x, y).toLine());\n\t}\n\tplot(x1, y1, x2, y2) {\n\t\tif (x1 == null) return this.array();\n\t\telse if (typeof y1 !== \"undefined\") x1 = {\n\t\t\tx1,\n\t\t\ty1,\n\t\t\tx2,\n\t\t\ty2\n\t\t};\n\t\telse x1 = new PointArray(x1).toLine();\n\t\treturn this.attr(x1);\n\t}\n\tsize(width, height) {\n\t\tconst p = proportionalSize(this, width, height);\n\t\treturn this.attr(this.array().size(p.width, p.height).toLine());\n\t}\n};\nextend(Line, pointed_exports);\nregisterMethods({ Container: { line: wrapWithAttrCheck(function(...args) {\n\treturn Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n}) } });\nregister(Line, \"Line\");\n\n//#endregion\n//#region src/elements/Marker.js\nvar Marker = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"marker\", node), attrs);\n\t}\n\theight(height) {\n\t\treturn this.attr(\"markerHeight\", height);\n\t}\n\torient(orient) {\n\t\treturn this.attr(\"orient\", orient);\n\t}\n\tref(x, y) {\n\t\treturn this.attr(\"refX\", x).attr(\"refY\", y);\n\t}\n\ttoString() {\n\t\treturn \"url(#\" + this.id() + \")\";\n\t}\n\tupdate(block) {\n\t\tthis.clear();\n\t\tif (typeof block === \"function\") block.call(this, this);\n\t\treturn this;\n\t}\n\twidth(width) {\n\t\treturn this.attr(\"markerWidth\", width);\n\t}\n};\nregisterMethods({\n\tContainer: { marker(...args) {\n\t\treturn this.defs().marker(...args);\n\t} },\n\tDefs: { marker: wrapWithAttrCheck(function(width, height, block) {\n\t\treturn this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr(\"orient\", \"auto\").update(block);\n\t}) },\n\tmarker: { marker(marker, width, height, block) {\n\t\tlet attr = [\"marker\"];\n\t\tif (marker !== \"all\") attr.push(marker);\n\t\tattr = attr.join(\"-\");\n\t\tmarker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n\t\treturn this.attr(attr, marker);\n\t} }\n});\nregister(Marker, \"Marker\");\n\n//#endregion\n//#region src/animation/Controller.js\n/***\nBase Class\n==========\nThe base stepper class that will be\n***/\nfunction makeSetterGetter(k, f) {\n\treturn function(v) {\n\t\tif (v == null) return this[k];\n\t\tthis[k] = v;\n\t\tif (f) f.call(this);\n\t\treturn this;\n\t};\n}\nconst easing = {\n\t\"-\": function(pos) {\n\t\treturn pos;\n\t},\n\t\"<>\": function(pos) {\n\t\treturn -Math.cos(pos * Math.PI) / 2 + .5;\n\t},\n\t\">\": function(pos) {\n\t\treturn Math.sin(pos * Math.PI / 2);\n\t},\n\t\"<\": function(pos) {\n\t\treturn -Math.cos(pos * Math.PI / 2) + 1;\n\t},\n\tbezier: function(x1, y1, x2, y2) {\n\t\treturn function(t) {\n\t\t\tif (t < 0) if (x1 > 0) return y1 / x1 * t;\n\t\t\telse if (x2 > 0) return y2 / x2 * t;\n\t\t\telse return 0;\n\t\t\telse if (t > 1) if (x2 < 1) return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n\t\t\telse if (x1 < 1) return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n\t\t\telse return 1;\n\t\t\telse return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3;\n\t\t};\n\t},\n\tsteps: function(steps, stepPosition = \"end\") {\n\t\tstepPosition = stepPosition.split(\"-\").reverse()[0];\n\t\tlet jumps = steps;\n\t\tif (stepPosition === \"none\") --jumps;\n\t\telse if (stepPosition === \"both\") ++jumps;\n\t\treturn (t, beforeFlag = false) => {\n\t\t\tlet step = Math.floor(t * steps);\n\t\t\tconst jumping = t * step % 1 === 0;\n\t\t\tif (stepPosition === \"start\" || stepPosition === \"both\") ++step;\n\t\t\tif (beforeFlag && jumping) --step;\n\t\t\tif (t >= 0 && step < 0) step = 0;\n\t\t\tif (t <= 1 && step > jumps) step = jumps;\n\t\t\treturn step / jumps;\n\t\t};\n\t}\n};\nvar Stepper = class {\n\tdone() {\n\t\treturn false;\n\t}\n};\n/***\nEasing Functions\n================\n***/\nvar Ease = class extends Stepper {\n\tconstructor(fn = timeline.ease) {\n\t\tsuper();\n\t\tthis.ease = easing[fn] || fn;\n\t}\n\tstep(from, to, pos) {\n\t\tif (typeof from !== \"number\") return pos < 1 ? from : to;\n\t\treturn from + (to - from) * this.ease(pos);\n\t}\n};\n/***\nController Types\n================\n***/\nvar Controller = class extends Stepper {\n\tconstructor(fn) {\n\t\tsuper();\n\t\tthis.stepper = fn;\n\t}\n\tdone(c) {\n\t\treturn c.done;\n\t}\n\tstep(current, target, dt, c) {\n\t\treturn this.stepper(current, target, dt, c);\n\t}\n};\nfunction recalculate() {\n\tconst duration = (this._duration || 500) / 1e3;\n\tconst overshoot = this._overshoot || 0;\n\tconst eps = 1e-10;\n\tconst pi = Math.PI;\n\tconst os = Math.log(overshoot / 100 + eps);\n\tconst zeta = -os / Math.sqrt(pi * pi + os * os);\n\tconst wn = 3.9 / (zeta * duration);\n\tthis.d = 2 * zeta * wn;\n\tthis.k = wn * wn;\n}\nvar Spring = class extends Controller {\n\tconstructor(duration = 500, overshoot = 0) {\n\t\tsuper();\n\t\tthis.duration(duration).overshoot(overshoot);\n\t}\n\tstep(current, target, dt, c) {\n\t\tif (typeof current === \"string\") return current;\n\t\tc.done = dt === Infinity;\n\t\tif (dt === Infinity) return target;\n\t\tif (dt === 0) return current;\n\t\tif (dt > 100) dt = 16;\n\t\tdt /= 1e3;\n\t\tconst velocity = c.velocity || 0;\n\t\tconst acceleration = -this.d * velocity - this.k * (current - target);\n\t\tconst newPosition = current + velocity * dt + acceleration * dt * dt / 2;\n\t\tc.velocity = velocity + acceleration * dt;\n\t\tc.done = Math.abs(target - newPosition) + Math.abs(velocity) < .002;\n\t\treturn c.done ? target : newPosition;\n\t}\n};\nextend(Spring, {\n\tduration: makeSetterGetter(\"_duration\", recalculate),\n\tovershoot: makeSetterGetter(\"_overshoot\", recalculate)\n});\nvar PID = class extends Controller {\n\tconstructor(p = .1, i = .01, d = 0, windup = 1e3) {\n\t\tsuper();\n\t\tthis.p(p).i(i).d(d).windup(windup);\n\t}\n\tstep(current, target, dt, c) {\n\t\tif (typeof current === \"string\") return current;\n\t\tc.done = dt === Infinity;\n\t\tif (dt === Infinity) return target;\n\t\tif (dt === 0) return current;\n\t\tconst p = target - current;\n\t\tlet i = (c.integral || 0) + p * dt;\n\t\tconst d = (p - (c.error || 0)) / dt;\n\t\tconst windup = this._windup;\n\t\tif (windup !== false) i = Math.max(-windup, Math.min(i, windup));\n\t\tc.error = p;\n\t\tc.integral = i;\n\t\tc.done = Math.abs(p) < .001;\n\t\treturn c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n\t}\n};\nextend(PID, {\n\twindup: makeSetterGetter(\"_windup\"),\n\tp: makeSetterGetter(\"P\"),\n\ti: makeSetterGetter(\"I\"),\n\td: makeSetterGetter(\"D\")\n});\n\n//#endregion\n//#region src/utils/pathParser.js\nconst segmentParameters = {\n\tM: 2,\n\tL: 2,\n\tH: 1,\n\tV: 1,\n\tC: 6,\n\tS: 4,\n\tQ: 4,\n\tT: 2,\n\tA: 7,\n\tZ: 0\n};\nconst pathHandlers = {\n\tM: function(c, p, p0) {\n\t\tp.x = p0.x = c[0];\n\t\tp.y = p0.y = c[1];\n\t\treturn [\n\t\t\t\"M\",\n\t\t\tp.x,\n\t\t\tp.y\n\t\t];\n\t},\n\tL: function(c, p) {\n\t\tp.x = c[0];\n\t\tp.y = c[1];\n\t\treturn [\n\t\t\t\"L\",\n\t\t\tc[0],\n\t\t\tc[1]\n\t\t];\n\t},\n\tH: function(c, p) {\n\t\tp.x = c[0];\n\t\treturn [\"H\", c[0]];\n\t},\n\tV: function(c, p) {\n\t\tp.y = c[0];\n\t\treturn [\"V\", c[0]];\n\t},\n\tC: function(c, p) {\n\t\tp.x = c[4];\n\t\tp.y = c[5];\n\t\treturn [\n\t\t\t\"C\",\n\t\t\tc[0],\n\t\t\tc[1],\n\t\t\tc[2],\n\t\t\tc[3],\n\t\t\tc[4],\n\t\t\tc[5]\n\t\t];\n\t},\n\tS: function(c, p) {\n\t\tp.x = c[2];\n\t\tp.y = c[3];\n\t\treturn [\n\t\t\t\"S\",\n\t\t\tc[0],\n\t\t\tc[1],\n\t\t\tc[2],\n\t\t\tc[3]\n\t\t];\n\t},\n\tQ: function(c, p) {\n\t\tp.x = c[2];\n\t\tp.y = c[3];\n\t\treturn [\n\t\t\t\"Q\",\n\t\t\tc[0],\n\t\t\tc[1],\n\t\t\tc[2],\n\t\t\tc[3]\n\t\t];\n\t},\n\tT: function(c, p) {\n\t\tp.x = c[0];\n\t\tp.y = c[1];\n\t\treturn [\n\t\t\t\"T\",\n\t\t\tc[0],\n\t\t\tc[1]\n\t\t];\n\t},\n\tZ: function(c, p, p0) {\n\t\tp.x = p0.x;\n\t\tp.y = p0.y;\n\t\treturn [\"Z\"];\n\t},\n\tA: function(c, p) {\n\t\tp.x = c[5];\n\t\tp.y = c[6];\n\t\treturn [\n\t\t\t\"A\",\n\t\t\tc[0],\n\t\t\tc[1],\n\t\t\tc[2],\n\t\t\tc[3],\n\t\t\tc[4],\n\t\t\tc[5],\n\t\t\tc[6]\n\t\t];\n\t}\n};\nconst mlhvqtcsaz = \"mlhvqtcsaz\".split(\"\");\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) pathHandlers[mlhvqtcsaz[i]] = function(i) {\n\treturn function(c, p, p0) {\n\t\tif (i === \"H\") c[0] = c[0] + p.x;\n\t\telse if (i === \"V\") c[0] = c[0] + p.y;\n\t\telse if (i === \"A\") {\n\t\t\tc[5] = c[5] + p.x;\n\t\t\tc[6] = c[6] + p.y;\n\t\t} else for (let j = 0, jl = c.length; j < jl; ++j) c[j] = c[j] + (j % 2 ? p.y : p.x);\n\t\treturn pathHandlers[i](c, p, p0);\n\t};\n}(mlhvqtcsaz[i].toUpperCase());\nfunction makeAbsolut(parser) {\n\treturn pathHandlers[parser.segment[0]](parser.segment.slice(1), parser.p, parser.p0);\n}\nfunction segmentComplete(parser) {\n\treturn parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()];\n}\nfunction startNewSegment(parser, token) {\n\tparser.inNumber && finalizeNumber(parser, false);\n\tconst pathLetter = isPathLetter.test(token);\n\tif (pathLetter) parser.segment = [token];\n\telse {\n\t\tconst lastCommand = parser.lastCommand;\n\t\tconst small = lastCommand.toLowerCase();\n\t\tparser.segment = [small === \"m\" ? lastCommand === small ? \"l\" : \"L\" : lastCommand];\n\t}\n\tparser.inSegment = true;\n\tparser.lastCommand = parser.segment[0];\n\treturn pathLetter;\n}\nfunction finalizeNumber(parser, inNumber) {\n\tif (!parser.inNumber) throw new Error(\"Parser Error\");\n\tparser.number && parser.segment.push(parseFloat(parser.number));\n\tparser.inNumber = inNumber;\n\tparser.number = \"\";\n\tparser.pointSeen = false;\n\tparser.hasExponent = false;\n\tif (segmentComplete(parser)) finalizeSegment(parser);\n}\nfunction finalizeSegment(parser) {\n\tparser.inSegment = false;\n\tif (parser.absolute) parser.segment = makeAbsolut(parser);\n\tparser.segments.push(parser.segment);\n}\nfunction isArcFlag(parser) {\n\tif (!parser.segment.length) return false;\n\tconst isArc = parser.segment[0].toUpperCase() === \"A\";\n\tconst length = parser.segment.length;\n\treturn isArc && (length === 4 || length === 5);\n}\nfunction isExponential(parser) {\n\treturn parser.lastToken.toUpperCase() === \"E\";\n}\nconst pathDelimiters = /* @__PURE__ */ new Set([\n\t\" \",\n\t\",\",\n\t\"\t\",\n\t\"\\n\",\n\t\"\\r\",\n\t\"\\f\"\n]);\nfunction pathParser(d, toAbsolute = true) {\n\tlet index = 0;\n\tlet token = \"\";\n\tconst parser = {\n\t\tsegment: [],\n\t\tinNumber: false,\n\t\tnumber: \"\",\n\t\tlastToken: \"\",\n\t\tinSegment: false,\n\t\tsegments: [],\n\t\tpointSeen: false,\n\t\thasExponent: false,\n\t\tabsolute: toAbsolute,\n\t\tp0: new Point(),\n\t\tp: new Point()\n\t};\n\twhile (parser.lastToken = token, token = d.charAt(index++)) {\n\t\tif (!parser.inSegment) {\n\t\t\tif (startNewSegment(parser, token)) continue;\n\t\t}\n\t\tif (token === \".\") {\n\t\t\tif (parser.pointSeen || parser.hasExponent) {\n\t\t\t\tfinalizeNumber(parser, false);\n\t\t\t\t--index;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparser.inNumber = true;\n\t\t\tparser.pointSeen = true;\n\t\t\tparser.number += token;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isNaN(parseInt(token))) {\n\t\t\tif (parser.number === \"0\" || isArcFlag(parser)) {\n\t\t\t\tparser.inNumber = true;\n\t\t\t\tparser.number = token;\n\t\t\t\tfinalizeNumber(parser, true);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparser.inNumber = true;\n\t\t\tparser.number += token;\n\t\t\tcontinue;\n\t\t}\n\t\tif (pathDelimiters.has(token)) {\n\t\t\tif (parser.inNumber) finalizeNumber(parser, false);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"-\" || token === \"+\") {\n\t\t\tif (parser.inNumber && !isExponential(parser)) {\n\t\t\t\tfinalizeNumber(parser, false);\n\t\t\t\t--index;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparser.number += token;\n\t\t\tparser.inNumber = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.toUpperCase() === \"E\") {\n\t\t\tparser.number += token;\n\t\t\tparser.hasExponent = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPathLetter.test(token)) {\n\t\t\tif (parser.inNumber) finalizeNumber(parser, false);\n\t\t\telse if (!segmentComplete(parser)) throw new Error(\"parser Error\");\n\t\t\telse finalizeSegment(parser);\n\t\t\t--index;\n\t\t}\n\t}\n\tif (parser.inNumber) finalizeNumber(parser, false);\n\tif (parser.inSegment && segmentComplete(parser)) finalizeSegment(parser);\n\treturn parser.segments;\n}\n\n//#endregion\n//#region src/types/PathArray.js\nfunction arrayToString(a) {\n\tlet s = \"\";\n\tfor (let i = 0, il = a.length; i < il; i++) {\n\t\ts += a[i][0];\n\t\tif (a[i][1] != null) {\n\t\t\ts += a[i][1];\n\t\t\tif (a[i][2] != null) {\n\t\t\t\ts += \" \";\n\t\t\t\ts += a[i][2];\n\t\t\t\tif (a[i][3] != null) {\n\t\t\t\t\ts += \" \";\n\t\t\t\t\ts += a[i][3];\n\t\t\t\t\ts += \" \";\n\t\t\t\t\ts += a[i][4];\n\t\t\t\t\tif (a[i][5] != null) {\n\t\t\t\t\t\ts += \" \";\n\t\t\t\t\t\ts += a[i][5];\n\t\t\t\t\t\ts += \" \";\n\t\t\t\t\t\ts += a[i][6];\n\t\t\t\t\t\tif (a[i][7] != null) {\n\t\t\t\t\t\t\ts += \" \";\n\t\t\t\t\t\t\ts += a[i][7];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn s + \" \";\n}\nvar PathArray = class extends SVGArray {\n\tbbox() {\n\t\tparser().path.setAttribute(\"d\", this.toString());\n\t\treturn new Box(parser.nodes.path.getBBox());\n\t}\n\tmove(x, y) {\n\t\tconst box = this.bbox();\n\t\tx -= box.x;\n\t\ty -= box.y;\n\t\tif (!isNaN(x) && !isNaN(y)) for (let l, i = this.length - 1; i >= 0; i--) {\n\t\t\tl = this[i][0];\n\t\t\tif (l === \"M\" || l === \"L\" || l === \"T\") {\n\t\t\t\tthis[i][1] += x;\n\t\t\t\tthis[i][2] += y;\n\t\t\t} else if (l === \"H\") this[i][1] += x;\n\t\t\telse if (l === \"V\") this[i][1] += y;\n\t\t\telse if (l === \"C\" || l === \"S\" || l === \"Q\") {\n\t\t\t\tthis[i][1] += x;\n\t\t\t\tthis[i][2] += y;\n\t\t\t\tthis[i][3] += x;\n\t\t\t\tthis[i][4] += y;\n\t\t\t\tif (l === \"C\") {\n\t\t\t\t\tthis[i][5] += x;\n\t\t\t\t\tthis[i][6] += y;\n\t\t\t\t}\n\t\t\t} else if (l === \"A\") {\n\t\t\t\tthis[i][6] += x;\n\t\t\t\tthis[i][7] += y;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\tparse(d = \"M0 0\") {\n\t\tif (Array.isArray(d)) d = Array.prototype.concat.apply([], d).toString();\n\t\treturn pathParser(d);\n\t}\n\tsize(width, height) {\n\t\tconst box = this.bbox();\n\t\tlet i, l;\n\t\tbox.width = box.width === 0 ? 1 : box.width;\n\t\tbox.height = box.height === 0 ? 1 : box.height;\n\t\tfor (i = this.length - 1; i >= 0; i--) {\n\t\t\tl = this[i][0];\n\t\t\tif (l === \"M\" || l === \"L\" || l === \"T\") {\n\t\t\t\tthis[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n\t\t\t\tthis[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n\t\t\t} else if (l === \"H\") this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n\t\t\telse if (l === \"V\") this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n\t\t\telse if (l === \"C\" || l === \"S\" || l === \"Q\") {\n\t\t\t\tthis[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n\t\t\t\tthis[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n\t\t\t\tthis[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n\t\t\t\tthis[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n\t\t\t\tif (l === \"C\") {\n\t\t\t\t\tthis[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n\t\t\t\t\tthis[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n\t\t\t\t}\n\t\t\t} else if (l === \"A\") {\n\t\t\t\tthis[i][1] = this[i][1] * width / box.width;\n\t\t\t\tthis[i][2] = this[i][2] * height / box.height;\n\t\t\t\tthis[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n\t\t\t\tthis[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn arrayToString(this);\n\t}\n};\n\n//#endregion\n//#region src/animation/Morphable.js\nconst getClassForType = (value) => {\n\tconst type = typeof value;\n\tif (type === \"number\") return SVGNumber;\n\telse if (type === \"string\") if (Color.isColor(value)) return Color;\n\telse if (delimiter.test(value)) return isPathLetter.test(value) ? PathArray : SVGArray;\n\telse if (numberAndUnit.test(value)) return SVGNumber;\n\telse return NonMorphable;\n\telse if (morphableTypes.indexOf(value.constructor) > -1) return value.constructor;\n\telse if (Array.isArray(value)) return SVGArray;\n\telse if (type === \"object\") return ObjectBag;\n\telse return NonMorphable;\n};\nvar Morphable = class {\n\tconstructor(stepper) {\n\t\tthis._stepper = stepper || new Ease(\"-\");\n\t\tthis._from = null;\n\t\tthis._to = null;\n\t\tthis._type = null;\n\t\tthis._context = null;\n\t\tthis._morphObj = null;\n\t}\n\tat(pos) {\n\t\treturn this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context);\n\t}\n\tdone() {\n\t\treturn this._context.map(this._stepper.done).reduce(function(last, curr) {\n\t\t\treturn last && curr;\n\t\t}, true);\n\t}\n\tfrom(val) {\n\t\tif (val == null) return this._from;\n\t\tthis._from = this._set(val);\n\t\treturn this;\n\t}\n\tstepper(stepper) {\n\t\tif (stepper == null) return this._stepper;\n\t\tthis._stepper = stepper;\n\t\treturn this;\n\t}\n\tto(val) {\n\t\tif (val == null) return this._to;\n\t\tthis._to = this._set(val);\n\t\treturn this;\n\t}\n\ttype(type) {\n\t\tif (type == null) return this._type;\n\t\tthis._type = type;\n\t\treturn this;\n\t}\n\t_set(value) {\n\t\tif (!this._type) this.type(getClassForType(value));\n\t\tlet result = new this._type(value);\n\t\tif (this._type === Color) result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n\t\tif (this._type === ObjectBag) result = this._to ? result.align(this._to) : this._from ? result.align(this._from) : result;\n\t\tresult = result.toConsumable();\n\t\tthis._morphObj = this._morphObj || new this._type();\n\t\tthis._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function(o) {\n\t\t\to.done = true;\n\t\t\treturn o;\n\t\t});\n\t\treturn result;\n\t}\n};\nvar NonMorphable = class {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\tinit(val) {\n\t\tval = Array.isArray(val) ? val[0] : val;\n\t\tthis.value = val;\n\t\treturn this;\n\t}\n\ttoArray() {\n\t\treturn [this.value];\n\t}\n\tvalueOf() {\n\t\treturn this.value;\n\t}\n};\nvar TransformBag = class TransformBag {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\tinit(obj) {\n\t\tif (Array.isArray(obj)) obj = {\n\t\t\tscaleX: obj[0],\n\t\t\tscaleY: obj[1],\n\t\t\tshear: obj[2],\n\t\t\trotate: obj[3],\n\t\t\ttranslateX: obj[4],\n\t\t\ttranslateY: obj[5],\n\t\t\toriginX: obj[6],\n\t\t\toriginY: obj[7]\n\t\t};\n\t\tObject.assign(this, TransformBag.defaults, obj);\n\t\treturn this;\n\t}\n\ttoArray() {\n\t\tconst v = this;\n\t\treturn [\n\t\t\tv.scaleX,\n\t\t\tv.scaleY,\n\t\t\tv.shear,\n\t\t\tv.rotate,\n\t\t\tv.translateX,\n\t\t\tv.translateY,\n\t\t\tv.originX,\n\t\t\tv.originY\n\t\t];\n\t}\n};\nTransformBag.defaults = {\n\tscaleX: 1,\n\tscaleY: 1,\n\tshear: 0,\n\trotate: 0,\n\ttranslateX: 0,\n\ttranslateY: 0,\n\toriginX: 0,\n\toriginY: 0\n};\nconst sortByKey = (a, b) => {\n\treturn a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n};\nvar ObjectBag = class {\n\tconstructor(...args) {\n\t\tthis.init(...args);\n\t}\n\talign(other) {\n\t\tconst values = this.values;\n\t\tfor (let i = 0, il = values.length; i < il; ++i) {\n\t\t\tif (values[i + 1] === other[i + 1]) {\n\t\t\t\tif (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n\t\t\t\t\tconst space = other[i + 7];\n\t\t\t\t\tconst color = new Color(this.values.splice(i + 3, 5))[space]().toArray();\n\t\t\t\t\tthis.values.splice(i + 3, 0, ...color);\n\t\t\t\t}\n\t\t\t\ti += values[i + 2] + 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!other[i + 1]) return this;\n\t\t\tconst defaultObject = new other[i + 1]().toArray();\n\t\t\tconst toDelete = values[i + 2] + 3;\n\t\t\tvalues.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject);\n\t\t\ti += values[i + 2] + 2;\n\t\t}\n\t\treturn this;\n\t}\n\tinit(objOrArr) {\n\t\tthis.values = [];\n\t\tif (Array.isArray(objOrArr)) {\n\t\t\tthis.values = objOrArr.slice();\n\t\t\treturn;\n\t\t}\n\t\tobjOrArr = objOrArr || {};\n\t\tconst entries = [];\n\t\tfor (const i in objOrArr) {\n\t\t\tconst Type = getClassForType(objOrArr[i]);\n\t\t\tconst val = new Type(objOrArr[i]).toArray();\n\t\t\tentries.push([\n\t\t\t\ti,\n\t\t\t\tType,\n\t\t\t\tval.length,\n\t\t\t\t...val\n\t\t\t]);\n\t\t}\n\t\tentries.sort(sortByKey);\n\t\tthis.values = entries.reduce((last, curr) => last.concat(curr), []);\n\t\treturn this;\n\t}\n\ttoArray() {\n\t\treturn this.values;\n\t}\n\tvalueOf() {\n\t\tconst obj = {};\n\t\tconst arr = this.values;\n\t\twhile (arr.length) {\n\t\t\tconst key = arr.shift();\n\t\t\tconst Type = arr.shift();\n\t\t\tconst num = arr.shift();\n\t\t\tobj[key] = new Type(arr.splice(0, num));\n\t\t}\n\t\treturn obj;\n\t}\n};\nconst morphableTypes = [\n\tNonMorphable,\n\tTransformBag,\n\tObjectBag\n];\nfunction registerMorphableType(type = []) {\n\tmorphableTypes.push(...[].concat(type));\n}\nfunction makeMorphable() {\n\textend(morphableTypes, {\n\t\tto(val) {\n\t\t\treturn new Morphable().type(this.constructor).from(this.toArray()).to(val);\n\t\t},\n\t\tfromArray(arr) {\n\t\t\tthis.init(arr);\n\t\t\treturn this;\n\t\t},\n\t\ttoConsumable() {\n\t\t\treturn this.toArray();\n\t\t},\n\t\tmorph(from, to, pos, stepper, context) {\n\t\t\tconst mapper = function(i, index) {\n\t\t\t\treturn stepper.step(i, to[index], pos, context[index], context);\n\t\t\t};\n\t\t\treturn this.fromArray(from.map(mapper));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region src/elements/Path.js\nvar Path = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"path\", node), attrs);\n\t}\n\tarray() {\n\t\treturn this._array || (this._array = new PathArray(this.attr(\"d\")));\n\t}\n\tclear() {\n\t\tdelete this._array;\n\t\treturn this;\n\t}\n\theight(height) {\n\t\treturn height == null ? this.bbox().height : this.size(this.bbox().width, height);\n\t}\n\tmove(x, y) {\n\t\treturn this.attr(\"d\", this.array().move(x, y));\n\t}\n\tplot(d) {\n\t\treturn d == null ? this.array() : this.clear().attr(\"d\", typeof d === \"string\" ? d : this._array = new PathArray(d));\n\t}\n\tsize(width, height) {\n\t\tconst p = proportionalSize(this, width, height);\n\t\treturn this.attr(\"d\", this.array().size(p.width, p.height));\n\t}\n\twidth(width) {\n\t\treturn width == null ? this.bbox().width : this.size(width, this.bbox().height);\n\t}\n\tx(x) {\n\t\treturn x == null ? this.bbox().x : this.move(x, this.bbox().y);\n\t}\n\ty(y) {\n\t\treturn y == null ? this.bbox().y : this.move(this.bbox().x, y);\n\t}\n};\nPath.prototype.MorphArray = PathArray;\nregisterMethods({ Container: { path: wrapWithAttrCheck(function(d) {\n\treturn this.put(new Path()).plot(d || new PathArray());\n}) } });\nregister(Path, \"Path\");\n\n//#endregion\n//#region src/modules/core/poly.js\nvar poly_exports = /* @__PURE__ */ __exportAll({\n\tarray: () => array,\n\tclear: () => clear,\n\tmove: () => move$2,\n\tplot: () => plot,\n\tsize: () => size$1\n});\nfunction array() {\n\treturn this._array || (this._array = new PointArray(this.attr(\"points\")));\n}\nfunction clear() {\n\tdelete this._array;\n\treturn this;\n}\nfunction move$2(x, y) {\n\treturn this.attr(\"points\", this.array().move(x, y));\n}\nfunction plot(p) {\n\treturn p == null ? this.array() : this.clear().attr(\"points\", typeof p === \"string\" ? p : this._array = new PointArray(p));\n}\nfunction size$1(width, height) {\n\tconst p = proportionalSize(this, width, height);\n\treturn this.attr(\"points\", this.array().size(p.width, p.height));\n}\n\n//#endregion\n//#region src/elements/Polygon.js\nvar Polygon = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"polygon\", node), attrs);\n\t}\n};\nregisterMethods({ Container: { polygon: wrapWithAttrCheck(function(p) {\n\treturn this.put(new Polygon()).plot(p || new PointArray());\n}) } });\nextend(Polygon, pointed_exports);\nextend(Polygon, poly_exports);\nregister(Polygon, \"Polygon\");\n\n//#endregion\n//#region src/elements/Polyline.js\nvar Polyline = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"polyline\", node), attrs);\n\t}\n};\nregisterMethods({ Container: { polyline: wrapWithAttrCheck(function(p) {\n\treturn this.put(new Polyline()).plot(p || new PointArray());\n}) } });\nextend(Polyline, pointed_exports);\nextend(Polyline, poly_exports);\nregister(Polyline, \"Polyline\");\n\n//#endregion\n//#region src/elements/Rect.js\nvar Rect = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"rect\", node), attrs);\n\t}\n};\nextend(Rect, {\n\trx,\n\try\n});\nregisterMethods({ Container: { rect: wrapWithAttrCheck(function(width, height) {\n\treturn this.put(new Rect()).size(width, height);\n}) } });\nregister(Rect, \"Rect\");\n\n//#endregion\n//#region src/animation/Queue.js\nvar Queue = class {\n\tconstructor() {\n\t\tthis._first = null;\n\t\tthis._last = null;\n\t}\n\tfirst() {\n\t\treturn this._first && this._first.value;\n\t}\n\tlast() {\n\t\treturn this._last && this._last.value;\n\t}\n\tpush(value) {\n\t\tconst item = typeof value.next !== \"undefined\" ? value : {\n\t\t\tvalue,\n\t\t\tnext: null,\n\t\t\tprev: null\n\t\t};\n\t\tif (this._last) {\n\t\t\titem.prev = this._last;\n\t\t\tthis._last.next = item;\n\t\t\tthis._last = item;\n\t\t} else {\n\t\t\tthis._last = item;\n\t\t\tthis._first = item;\n\t\t}\n\t\treturn item;\n\t}\n\tremove(item) {\n\t\tif (item.prev) item.prev.next = item.next;\n\t\tif (item.next) item.next.prev = item.prev;\n\t\tif (item === this._last) this._last = item.prev;\n\t\tif (item === this._first) this._first = item.next;\n\t\titem.prev = null;\n\t\titem.next = null;\n\t}\n\tshift() {\n\t\tconst remove = this._first;\n\t\tif (!remove) return null;\n\t\tthis._first = remove.next;\n\t\tif (this._first) this._first.prev = null;\n\t\tthis._last = this._first ? this._last : null;\n\t\treturn remove.value;\n\t}\n};\n\n//#endregion\n//#region src/animation/Animator.js\nconst Animator = {\n\tnextDraw: null,\n\tframes: new Queue(),\n\ttimeouts: new Queue(),\n\timmediates: new Queue(),\n\ttimer: () => globals.window.performance || globals.window.Date,\n\ttransforms: [],\n\tframe(fn) {\n\t\tconst node = Animator.frames.push({ run: fn });\n\t\tif (Animator.nextDraw === null) Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n\t\treturn node;\n\t},\n\ttimeout(fn, delay) {\n\t\tdelay = delay || 0;\n\t\tconst time = Animator.timer().now() + delay;\n\t\tconst node = Animator.timeouts.push({\n\t\t\trun: fn,\n\t\t\ttime\n\t\t});\n\t\tif (Animator.nextDraw === null) Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n\t\treturn node;\n\t},\n\timmediate(fn) {\n\t\tconst node = Animator.immediates.push(fn);\n\t\tif (Animator.nextDraw === null) Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n\t\treturn node;\n\t},\n\tcancelFrame(node) {\n\t\tnode != null && Animator.frames.remove(node);\n\t},\n\tclearTimeout(node) {\n\t\tnode != null && Animator.timeouts.remove(node);\n\t},\n\tcancelImmediate(node) {\n\t\tnode != null && Animator.immediates.remove(node);\n\t},\n\t_draw(now) {\n\t\ttry {\n\t\t\tlet nextTimeout = null;\n\t\t\tconst lastTimeout = Animator.timeouts.last();\n\t\t\twhile (nextTimeout = Animator.timeouts.shift()) {\n\t\t\t\tif (now >= nextTimeout.time) nextTimeout.run();\n\t\t\t\telse Animator.timeouts.push(nextTimeout);\n\t\t\t\tif (nextTimeout === lastTimeout) break;\n\t\t\t}\n\t\t\tlet nextFrame = null;\n\t\t\tconst lastFrame = Animator.frames.last();\n\t\t\twhile (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) nextFrame.run(now);\n\t\t\tlet nextImmediate = null;\n\t\t\twhile (nextImmediate = Animator.immediates.shift()) nextImmediate();\n\t\t} finally {\n\t\t\tconst pending = Animator.timeouts.first() || Animator.frames.first() || Animator.immediates.first();\n\t\t\tAnimator.nextDraw = pending ? globals.window.requestAnimationFrame(Animator._draw) : null;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/animation/Timeline.js\nconst makeSchedule = function(runnerInfo) {\n\tconst start = runnerInfo.start;\n\tconst duration = runnerInfo.runner.duration();\n\treturn {\n\t\tstart,\n\t\tduration,\n\t\tend: start + duration,\n\t\trunner: runnerInfo.runner\n\t};\n};\nconst defaultSource = function() {\n\tconst w = globals.window;\n\treturn (w.performance || w.Date).now();\n};\nvar Timeline = class extends EventTarget {\n\tconstructor(timeSource = defaultSource) {\n\t\tsuper();\n\t\tthis._timeSource = timeSource;\n\t\tthis.terminate();\n\t}\n\tactive() {\n\t\treturn !!this._nextFrame;\n\t}\n\tfinish() {\n\t\tthis.time(this.getEndTimeOfTimeline() + 1);\n\t\treturn this.pause();\n\t}\n\tgetEndTime() {\n\t\tconst lastRunnerInfo = this.getLastRunnerInfo();\n\t\tconst lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n\t\treturn (lastRunnerInfo ? lastRunnerInfo.start : this._time) + lastDuration;\n\t}\n\tgetEndTimeOfTimeline() {\n\t\tconst endTimes = this._runners.map((i) => i.start + i.runner.duration());\n\t\treturn Math.max(0, ...endTimes);\n\t}\n\tgetLastRunnerInfo() {\n\t\treturn this.getRunnerInfoById(this._lastRunnerId);\n\t}\n\tgetRunnerInfoById(id) {\n\t\treturn this._runners[this._runnerIds.indexOf(id)] || null;\n\t}\n\tpause() {\n\t\tthis._paused = true;\n\t\treturn this._continue();\n\t}\n\tpersist(dtOrForever) {\n\t\tif (dtOrForever == null) return this._persist;\n\t\tthis._persist = dtOrForever;\n\t\treturn this;\n\t}\n\tplay() {\n\t\tthis._paused = false;\n\t\treturn this.updateTime()._continue();\n\t}\n\treverse(yes) {\n\t\tconst currentSpeed = this.speed();\n\t\tif (yes == null) return this.speed(-currentSpeed);\n\t\tconst positive = Math.abs(currentSpeed);\n\t\treturn this.speed(yes ? -positive : positive);\n\t}\n\tschedule(runner, delay, when) {\n\t\tif (runner == null) return this._runners.map(makeSchedule);\n\t\tlet absoluteStartTime = 0;\n\t\tconst endTime = this.getEndTime();\n\t\tdelay = delay || 0;\n\t\tif (when == null || when === \"last\" || when === \"after\") absoluteStartTime = endTime;\n\t\telse if (when === \"absolute\" || when === \"start\") {\n\t\t\tabsoluteStartTime = delay;\n\t\t\tdelay = 0;\n\t\t} else if (when === \"now\") absoluteStartTime = this._time;\n\t\telse if (when === \"relative\") {\n\t\t\tconst runnerInfo = this.getRunnerInfoById(runner.id);\n\t\t\tif (runnerInfo) {\n\t\t\t\tabsoluteStartTime = runnerInfo.start + delay;\n\t\t\t\tdelay = 0;\n\t\t\t}\n\t\t} else if (when === \"with-last\") {\n\t\t\tconst lastRunnerInfo = this.getLastRunnerInfo();\n\t\t\tabsoluteStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n\t\t} else throw new Error(\"Invalid value for the \\\"when\\\" parameter\");\n\t\trunner.unschedule();\n\t\trunner.timeline(this);\n\t\tconst persist = runner.persist();\n\t\tconst runnerInfo = {\n\t\t\tpersist: persist === null ? this._persist : persist,\n\t\t\tstart: absoluteStartTime + delay,\n\t\t\trunner\n\t\t};\n\t\tthis._lastRunnerId = runner.id;\n\t\tthis._runners.push(runnerInfo);\n\t\tthis._runners.sort((a, b) => a.start - b.start);\n\t\tthis._runnerIds = this._runners.map((info) => info.runner.id);\n\t\tthis.updateTime()._continue();\n\t\treturn this;\n\t}\n\tseek(dt) {\n\t\treturn this.time(this._time + dt);\n\t}\n\tsource(fn) {\n\t\tif (fn == null) return this._timeSource;\n\t\tthis._timeSource = fn;\n\t\treturn this;\n\t}\n\tspeed(speed) {\n\t\tif (speed == null) return this._speed;\n\t\tthis._speed = speed;\n\t\treturn this;\n\t}\n\tstop() {\n\t\tthis.time(0);\n\t\treturn this.pause();\n\t}\n\ttime(time) {\n\t\tif (time == null) return this._time;\n\t\tthis._time = time;\n\t\treturn this._continue(true);\n\t}\n\tunschedule(runner) {\n\t\tconst index = this._runnerIds.indexOf(runner.id);\n\t\tif (index < 0) return this;\n\t\tthis._runners.splice(index, 1);\n\t\tthis._runnerIds.splice(index, 1);\n\t\trunner.timeline(null);\n\t\treturn this;\n\t}\n\tupdateTime() {\n\t\tif (!this.active()) this._lastSourceTime = this._timeSource();\n\t\treturn this;\n\t}\n\t_continue(immediateStep = false) {\n\t\tAnimator.cancelFrame(this._nextFrame);\n\t\tthis._nextFrame = null;\n\t\tif (immediateStep) return this._stepImmediate();\n\t\tif (this._paused) return this;\n\t\tthis._nextFrame = Animator.frame(this._step);\n\t\treturn this;\n\t}\n\t_stepFn(immediateStep = false) {\n\t\tconst time = this._timeSource();\n\t\tlet dtSource = time - this._lastSourceTime;\n\t\tif (immediateStep) dtSource = 0;\n\t\tconst dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n\t\tthis._lastSourceTime = time;\n\t\tif (!immediateStep) {\n\t\t\tthis._time += dtTime;\n\t\t\tthis._time = this._time < 0 ? 0 : this._time;\n\t\t}\n\t\tthis._lastStepTime = this._time;\n\t\tthis.fire(\"time\", this._time);\n\t\tfor (let k = this._runners.length; k--;) {\n\t\t\tconst runnerInfo = this._runners[k];\n\t\t\tconst runner = runnerInfo.runner;\n\t\t\tif (this._time - runnerInfo.start <= 0) runner.reset();\n\t\t}\n\t\tlet runnersLeft = false;\n\t\tfor (let i = 0, len = this._runners.length; i < len; i++) {\n\t\t\tconst runnerInfo = this._runners[i];\n\t\t\tconst runner = runnerInfo.runner;\n\t\t\tlet dt = dtTime;\n\t\t\tconst dtToStart = this._time - runnerInfo.start;\n\t\t\tif (dtToStart <= 0) {\n\t\t\t\trunnersLeft = true;\n\t\t\t\tcontinue;\n\t\t\t} else if (dtToStart < dt) dt = dtToStart;\n\t\t\tif (!runner.active()) continue;\n\t\t\tif (!runner.step(dt).done) runnersLeft = true;\n\t\t\telse if (runnerInfo.persist !== true) {\n\t\t\t\tif (runner.duration() - runner.time() + this._time + runnerInfo.persist < this._time) {\n\t\t\t\t\trunner.unschedule();\n\t\t\t\t\t--i;\n\t\t\t\t\t--len;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) this._continue();\n\t\telse {\n\t\t\tthis.pause();\n\t\t\tthis.fire(\"finished\");\n\t\t}\n\t\treturn this;\n\t}\n\tterminate() {\n\t\tthis._startTime = 0;\n\t\tthis._speed = 1;\n\t\tthis._persist = 0;\n\t\tthis._nextFrame = null;\n\t\tthis._paused = true;\n\t\tthis._runners = [];\n\t\tthis._runnerIds = [];\n\t\tthis._lastRunnerId = -1;\n\t\tthis._time = 0;\n\t\tthis._lastSourceTime = 0;\n\t\tthis._lastStepTime = 0;\n\t\tthis._step = this._stepFn.bind(this, false);\n\t\tthis._stepImmediate = this._stepFn.bind(this, true);\n\t}\n};\nregisterMethods({ Element: { timeline: function(timeline) {\n\tif (timeline == null) {\n\t\tthis._timeline = this._timeline || new Timeline();\n\t\treturn this._timeline;\n\t} else {\n\t\tthis._timeline = timeline;\n\t\treturn this;\n\t}\n} } });\n\n//#endregion\n//#region src/animation/Runner.js\nvar Runner = class Runner extends EventTarget {\n\tconstructor(options) {\n\t\tsuper();\n\t\tthis.id = Runner.id++;\n\t\toptions = options == null ? timeline.duration : options;\n\t\toptions = typeof options === \"function\" ? new Controller(options) : options;\n\t\tthis._element = null;\n\t\tthis._timeline = null;\n\t\tthis.done = false;\n\t\tthis._queue = [];\n\t\tthis._duration = typeof options === \"number\" && options;\n\t\tthis._isDeclarative = options instanceof Controller;\n\t\tthis._stepper = this._isDeclarative ? options : new Ease();\n\t\tthis._history = {};\n\t\tthis.enabled = true;\n\t\tthis._time = 0;\n\t\tthis._lastTime = 0;\n\t\tthis._reseted = true;\n\t\tthis.transforms = new Matrix();\n\t\tthis.transformId = 1;\n\t\tthis._haveReversed = false;\n\t\tthis._reverse = false;\n\t\tthis._loopsDone = 0;\n\t\tthis._swing = false;\n\t\tthis._wait = 0;\n\t\tthis._times = 1;\n\t\tthis._frameId = null;\n\t\tthis._persist = this._isDeclarative ? true : null;\n\t}\n\tstatic sanitise(duration, delay, when) {\n\t\tlet times = 1;\n\t\tlet swing = false;\n\t\tlet wait = 0;\n\t\tduration = duration ?? timeline.duration;\n\t\tdelay = delay ?? timeline.delay;\n\t\twhen = when || \"last\";\n\t\tif (typeof duration === \"object\" && !(duration instanceof Stepper)) {\n\t\t\tdelay = duration.delay ?? delay;\n\t\t\twhen = duration.when ?? when;\n\t\t\tswing = duration.swing || swing;\n\t\t\ttimes = duration.times ?? times;\n\t\t\twait = duration.wait ?? wait;\n\t\t\tduration = duration.duration ?? timeline.duration;\n\t\t}\n\t\treturn {\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\tswing,\n\t\t\ttimes,\n\t\t\twait,\n\t\t\twhen\n\t\t};\n\t}\n\tactive(enabled) {\n\t\tif (enabled == null) return this.enabled;\n\t\tthis.enabled = enabled;\n\t\treturn this;\n\t}\n\taddTransform(transform) {\n\t\tthis.transforms.lmultiplyO(transform);\n\t\treturn this;\n\t}\n\tafter(fn) {\n\t\treturn this.on(\"finished\", fn);\n\t}\n\tanimate(duration, delay, when) {\n\t\tconst o = Runner.sanitise(duration, delay, when);\n\t\tconst runner = new Runner(o.duration);\n\t\tif (this._timeline) runner.timeline(this._timeline);\n\t\tif (this._element) runner.element(this._element);\n\t\treturn runner.loop(o).schedule(o.delay, o.when);\n\t}\n\tclearTransform() {\n\t\tthis.transforms = new Matrix();\n\t\treturn this;\n\t}\n\tclearTransformsFromQueue() {\n\t\tvar _context;\n\t\tif (!this.done || !this._timeline || !(0, import_includes.default)(_context = this._timeline._runnerIds).call(_context, this.id)) this._queue = this._queue.filter((item) => {\n\t\t\treturn !item.isTransform;\n\t\t});\n\t}\n\tdelay(delay) {\n\t\treturn this.animate(0, delay);\n\t}\n\tduration() {\n\t\treturn this._times * (this._wait + this._duration) - this._wait;\n\t}\n\tduring(fn) {\n\t\treturn this.queue(null, fn);\n\t}\n\tease(fn) {\n\t\tthis._stepper = new Ease(fn);\n\t\treturn this;\n\t}\n\telement(element) {\n\t\tif (element == null) return this._element;\n\t\tthis._element = element;\n\t\telement._prepareRunner();\n\t\treturn this;\n\t}\n\tfinish() {\n\t\treturn this.step(Infinity);\n\t}\n\tloop(times, swing, wait) {\n\t\tif (typeof times === \"object\") {\n\t\t\tswing = times.swing;\n\t\t\twait = times.wait;\n\t\t\ttimes = times.times;\n\t\t}\n\t\tthis._times = times || Infinity;\n\t\tthis._swing = swing || false;\n\t\tthis._wait = wait || 0;\n\t\tif (this._times === true) this._times = Infinity;\n\t\treturn this;\n\t}\n\tloops(p) {\n\t\tconst loopDuration = this._duration + this._wait;\n\t\tif (p == null) {\n\t\t\tconst loopsDone = Math.floor(this._time / loopDuration);\n\t\t\tconst position = (this._time - loopsDone * loopDuration) / this._duration;\n\t\t\treturn Math.min(loopsDone + position, this._times);\n\t\t}\n\t\tconst whole = Math.floor(p);\n\t\tconst partial = p % 1;\n\t\tconst time = loopDuration * whole + this._duration * partial;\n\t\treturn this.time(time);\n\t}\n\tpersist(dtOrForever) {\n\t\tif (dtOrForever == null) return this._persist;\n\t\tthis._persist = dtOrForever;\n\t\treturn this;\n\t}\n\tposition(p) {\n\t\tconst x = this._time;\n\t\tconst d = this._duration;\n\t\tconst w = this._wait;\n\t\tconst t = this._times;\n\t\tconst s = this._swing;\n\t\tconst r = this._reverse;\n\t\tlet position;\n\t\tif (p == null) {\n\t\t\tconst f = function(x) {\n\t\t\t\tconst swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n\t\t\t\tconst backwards = swinging && !r || !swinging && r;\n\t\t\t\tconst uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n\t\t\t\treturn Math.max(Math.min(uncliped, 1), 0);\n\t\t\t};\n\t\t\tconst endTime = t * (w + d) - w;\n\t\t\tposition = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n\t\t\treturn position;\n\t\t}\n\t\tconst loopsDone = Math.floor(this.loops());\n\t\tconst swingForward = s && loopsDone % 2 === 0;\n\t\tposition = loopsDone + (swingForward && !r || r && swingForward ? p : 1 - p);\n\t\treturn this.loops(position);\n\t}\n\tprogress(p) {\n\t\tif (p == null) return Math.min(1, this._time / this.duration());\n\t\treturn this.time(p * this.duration());\n\t}\n\tqueue(initFn, runFn, retargetFn, isTransform) {\n\t\tthis._queue.push({\n\t\t\tinitialiser: initFn || noop,\n\t\t\trunner: runFn || noop,\n\t\t\tretarget: retargetFn,\n\t\t\tisTransform,\n\t\t\tinitialised: false,\n\t\t\tfinished: false\n\t\t});\n\t\tthis.timeline() && this.timeline()._continue();\n\t\treturn this;\n\t}\n\treset() {\n\t\tif (this._reseted) return this;\n\t\tthis.time(0);\n\t\tthis._reseted = true;\n\t\treturn this;\n\t}\n\treverse(reverse) {\n\t\tthis._reverse = reverse == null ? !this._reverse : reverse;\n\t\treturn this;\n\t}\n\tschedule(timeline, delay, when) {\n\t\tif (!(timeline instanceof Timeline)) {\n\t\t\twhen = delay;\n\t\t\tdelay = timeline;\n\t\t\ttimeline = this.timeline();\n\t\t}\n\t\tif (!timeline) throw Error(\"Runner cannot be scheduled without timeline\");\n\t\ttimeline.schedule(this, delay, when);\n\t\treturn this;\n\t}\n\tstep(dt) {\n\t\tif (!this.enabled) return this;\n\t\tdt = dt == null ? 16 : dt;\n\t\tthis._time += dt;\n\t\tconst position = this.position();\n\t\tconst running = this._lastPosition !== position && this._time >= 0;\n\t\tthis._lastPosition = position;\n\t\tconst duration = this.duration();\n\t\tconst justStarted = this._lastTime <= 0 && this._time > 0;\n\t\tconst justFinished = this._lastTime < duration && this._time >= duration;\n\t\tthis._lastTime = this._time;\n\t\tif (justStarted) this.fire(\"start\", this);\n\t\tconst declarative = this._isDeclarative;\n\t\tthis.done = !declarative && !justFinished && this._time >= duration;\n\t\tthis._reseted = false;\n\t\tlet converged = false;\n\t\tif (running || declarative) {\n\t\t\tthis._initialise(running);\n\t\t\tthis.transforms = new Matrix();\n\t\t\tconverged = this._run(declarative ? dt : position);\n\t\t\tthis.fire(\"step\", this);\n\t\t}\n\t\tthis.done = this.done || converged && declarative;\n\t\tif (justFinished) this.fire(\"finished\", this);\n\t\treturn this;\n\t}\n\ttime(time) {\n\t\tif (time == null) return this._time;\n\t\tconst dt = time - this._time;\n\t\tthis.step(dt);\n\t\treturn this;\n\t}\n\ttimeline(timeline) {\n\t\tif (typeof timeline === \"undefined\") return this._timeline;\n\t\tthis._timeline = timeline;\n\t\treturn this;\n\t}\n\tunschedule() {\n\t\tconst timeline = this.timeline();\n\t\ttimeline && timeline.unschedule(this);\n\t\treturn this;\n\t}\n\t_initialise(running) {\n\t\tif (!running && !this._isDeclarative) return;\n\t\tfor (let i = 0, len = this._queue.length; i < len; ++i) {\n\t\t\tconst current = this._queue[i];\n\t\t\tconst needsIt = this._isDeclarative || !current.initialised && running;\n\t\t\trunning = !current.finished;\n\t\t\tif (needsIt && running) {\n\t\t\t\tcurrent.initialiser.call(this);\n\t\t\t\tcurrent.initialised = true;\n\t\t\t}\n\t\t}\n\t}\n\t_rememberMorpher(method, morpher) {\n\t\tthis._history[method] = {\n\t\t\tmorpher,\n\t\t\tcaller: this._queue[this._queue.length - 1]\n\t\t};\n\t\tif (this._isDeclarative) {\n\t\t\tconst timeline = this.timeline();\n\t\t\ttimeline && timeline.play();\n\t\t}\n\t}\n\t_run(positionOrDt) {\n\t\tlet allfinished = true;\n\t\tfor (let i = 0, len = this._queue.length; i < len; ++i) {\n\t\t\tconst current = this._queue[i];\n\t\t\tconst converged = current.runner.call(this, positionOrDt);\n\t\t\tcurrent.finished = current.finished || converged === true;\n\t\t\tallfinished = allfinished && current.finished;\n\t\t}\n\t\treturn allfinished;\n\t}\n\t_tryRetarget(method, target, extra) {\n\t\tif (this._history[method]) {\n\t\t\tif (!this._history[method].caller.initialised) {\n\t\t\t\tconst index = this._queue.indexOf(this._history[method].caller);\n\t\t\t\tthis._queue.splice(index, 1);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this._history[method].caller.retarget) this._history[method].caller.retarget.call(this, target, extra);\n\t\t\telse this._history[method].morpher.to(target);\n\t\t\tthis._history[method].caller.finished = false;\n\t\t\tconst timeline = this.timeline();\n\t\t\ttimeline && timeline.play();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n};\nRunner.id = 0;\nvar FakeRunner = class {\n\tconstructor(transforms = new Matrix(), id = -1, done = true) {\n\t\tthis.transforms = transforms;\n\t\tthis.id = id;\n\t\tthis.done = done;\n\t}\n\tclearTransformsFromQueue() {}\n};\nextend([Runner, FakeRunner], { mergeWith(runner) {\n\treturn new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n} });\nconst lmultiply = (last, curr) => last.lmultiplyO(curr);\nconst getRunnerTransform = (runner) => runner.transforms;\nfunction mergeTransforms() {\n\tconst netTransform = this._transformationRunners.runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n\tthis.transform(netTransform);\n\tthis._transformationRunners.merge();\n\tif (this._transformationRunners.length() === 1) this._frameId = null;\n}\nvar RunnerArray = class {\n\tconstructor() {\n\t\tthis.runners = [];\n\t\tthis.ids = [];\n\t}\n\tadd(runner) {\n\t\tvar _context2;\n\t\tif ((0, import_includes.default)(_context2 = this.runners).call(_context2, runner)) return;\n\t\tconst id = runner.id + 1;\n\t\tthis.runners.push(runner);\n\t\tthis.ids.push(id);\n\t\treturn this;\n\t}\n\tclearBefore(id) {\n\t\tconst deleteCnt = this.ids.indexOf(id + 1) || 1;\n\t\tthis.ids.splice(0, deleteCnt, 0);\n\t\tthis.runners.splice(0, deleteCnt, new FakeRunner()).forEach((r) => r.clearTransformsFromQueue());\n\t\treturn this;\n\t}\n\tedit(id, newRunner) {\n\t\tconst index = this.ids.indexOf(id + 1);\n\t\tthis.ids.splice(index, 1, id + 1);\n\t\tthis.runners.splice(index, 1, newRunner);\n\t\treturn this;\n\t}\n\tgetByID(id) {\n\t\treturn this.runners[this.ids.indexOf(id + 1)];\n\t}\n\tlength() {\n\t\treturn this.ids.length;\n\t}\n\tmerge() {\n\t\tlet lastRunner = null;\n\t\tfor (let i = 0; i < this.runners.length; ++i) {\n\t\t\tvar _context3, _context4;\n\t\t\tconst runner = this.runners[i];\n\t\t\tif (lastRunner && runner.done && lastRunner.done && (!runner._timeline || !(0, import_includes.default)(_context3 = runner._timeline._runnerIds).call(_context3, runner.id)) && (!lastRunner._timeline || !(0, import_includes.default)(_context4 = lastRunner._timeline._runnerIds).call(_context4, lastRunner.id))) {\n\t\t\t\tthis.remove(runner.id);\n\t\t\t\tconst newRunner = runner.mergeWith(lastRunner);\n\t\t\t\tthis.edit(lastRunner.id, newRunner);\n\t\t\t\tlastRunner = newRunner;\n\t\t\t\t--i;\n\t\t\t} else lastRunner = runner;\n\t\t}\n\t\treturn this;\n\t}\n\tremove(id) {\n\t\tconst index = this.ids.indexOf(id + 1);\n\t\tthis.ids.splice(index, 1);\n\t\tthis.runners.splice(index, 1);\n\t\treturn this;\n\t}\n};\nregisterMethods({ Element: {\n\tanimate(duration, delay, when) {\n\t\tconst o = Runner.sanitise(duration, delay, when);\n\t\tconst timeline = this.timeline();\n\t\treturn new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n\t},\n\tdelay(by, when) {\n\t\treturn this.animate(0, by, when);\n\t},\n\t_clearTransformRunnersBefore(currentRunner) {\n\t\tthis._transformationRunners.clearBefore(currentRunner.id);\n\t},\n\t_currentTransform(current) {\n\t\treturn this._transformationRunners.runners.filter((runner) => runner.id <= current.id).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n\t},\n\t_addRunner(runner) {\n\t\tthis._transformationRunners.add(runner);\n\t\tAnimator.cancelImmediate(this._frameId);\n\t\tthis._frameId = Animator.immediate(mergeTransforms.bind(this));\n\t},\n\t_prepareRunner() {\n\t\tif (this._frameId == null) this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n\t}\n} });\nconst difference = (a, b) => a.filter((x) => !(0, import_includes.default)(b).call(b, x));\nextend(Runner, {\n\tattr(a, v) {\n\t\treturn this.styleAttr(\"attr\", a, v);\n\t},\n\tcss(s, v) {\n\t\treturn this.styleAttr(\"css\", s, v);\n\t},\n\tstyleAttr(type, nameOrAttrs, val) {\n\t\tif (typeof nameOrAttrs === \"string\") return this.styleAttr(type, { [nameOrAttrs]: val });\n\t\tconst attrs = nameOrAttrs;\n\t\tconst history = this._history[type];\n\t\tif (history && !history.caller.initialised && history.caller.retarget) {\n\t\t\thistory.caller.retarget.call(this, attrs);\n\t\t\treturn this;\n\t\t}\n\t\tif (this._tryRetarget(type, attrs)) return this;\n\t\tlet morpher = new Morphable(this._stepper).to(attrs);\n\t\tlet keys = Object.keys(attrs);\n\t\tthis.queue(function() {\n\t\t\tmorpher = morpher.from(this.element()[type](keys));\n\t\t}, function(pos) {\n\t\t\tthis.element()[type](morpher.at(pos).valueOf());\n\t\t\treturn morpher.done();\n\t\t}, function(newToAttrs) {\n\t\t\tconst differences = difference(Object.keys(newToAttrs), keys);\n\t\t\tif (differences.length && morpher.from() != null) {\n\t\t\t\tconst addedFromAttrs = this.element()[type](differences);\n\t\t\t\tconst oldFromAttrs = new ObjectBag(morpher.from()).valueOf();\n\t\t\t\tObject.assign(oldFromAttrs, addedFromAttrs);\n\t\t\t\tmorpher.from(oldFromAttrs);\n\t\t\t}\n\t\t\tconst mergedToAttrs = new ObjectBag(morpher.to()).valueOf();\n\t\t\tObject.assign(mergedToAttrs, newToAttrs);\n\t\t\tmorpher.to(mergedToAttrs);\n\t\t\tkeys = Object.keys(mergedToAttrs);\n\t\t});\n\t\tthis._rememberMorpher(type, morpher);\n\t\treturn this;\n\t},\n\tzoom(level, point) {\n\t\tif (this._tryRetarget(\"zoom\", level, point)) return this;\n\t\tlet morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n\t\tthis.queue(function() {\n\t\t\tmorpher = morpher.from(this.element().zoom());\n\t\t}, function(pos) {\n\t\t\tthis.element().zoom(morpher.at(pos), point);\n\t\t\treturn morpher.done();\n\t\t}, function(newLevel, newPoint) {\n\t\t\tpoint = newPoint;\n\t\t\tmorpher.to(newLevel);\n\t\t});\n\t\tthis._rememberMorpher(\"zoom\", morpher);\n\t\treturn this;\n\t},\n\t/**\n\t** absolute transformations\n\t**/\n\ttransform(transforms, relative, affine) {\n\t\trelative = transforms.relative || relative;\n\t\tif (this._isDeclarative && !relative && this._tryRetarget(\"transform\", transforms)) return this;\n\t\tconst isMatrix = Matrix.isMatrixLike(transforms);\n\t\taffine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix;\n\t\tconst morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n\t\tlet origin;\n\t\tlet element;\n\t\tlet current;\n\t\tlet currentAngle;\n\t\tlet startTransform;\n\t\tfunction setup() {\n\t\t\telement = element || this.element();\n\t\t\torigin = origin || getOrigin(transforms, element);\n\t\t\tstartTransform = new Matrix(relative ? void 0 : element);\n\t\t\telement._addRunner(this);\n\t\t\tif (!relative) element._clearTransformRunnersBefore(this);\n\t\t}\n\t\tfunction run(pos) {\n\t\t\tif (!relative) this.clearTransform();\n\t\t\tconst { x, y } = new Point(origin).transform(element._currentTransform(this));\n\t\t\tconst targetTransforms = {\n\t\t\t\t...transforms,\n\t\t\t\torigin: [x, y]\n\t\t\t};\n\t\t\tif (targetTransforms.relative === true) delete targetTransforms.relative;\n\t\t\tlet target = new Matrix(targetTransforms);\n\t\t\tlet start = this._isDeclarative && current ? current : startTransform;\n\t\t\tif (affine) {\n\t\t\t\ttarget = target.decompose(x, y);\n\t\t\t\tstart = start.decompose(x, y);\n\t\t\t\tconst rTarget = target.rotate;\n\t\t\t\tconst rCurrent = start.rotate;\n\t\t\t\tconst possibilities = [\n\t\t\t\t\trTarget - 360,\n\t\t\t\t\trTarget,\n\t\t\t\t\trTarget + 360\n\t\t\t\t];\n\t\t\t\tconst distances = possibilities.map((a) => Math.abs(a - rCurrent));\n\t\t\t\tconst shortest = Math.min(...distances);\n\t\t\t\tconst index = distances.indexOf(shortest);\n\t\t\t\ttarget.rotate = possibilities[index];\n\t\t\t}\n\t\t\tif (relative) {\n\t\t\t\tif (!isMatrix) target.rotate = transforms.rotate || 0;\n\t\t\t\tif (this._isDeclarative && currentAngle) start.rotate = currentAngle;\n\t\t\t}\n\t\t\tmorpher.from(start);\n\t\t\tmorpher.to(target);\n\t\t\tconst affineParameters = morpher.at(pos);\n\t\t\tcurrentAngle = affineParameters.rotate;\n\t\t\tcurrent = new Matrix(affineParameters);\n\t\t\tthis.addTransform(current);\n\t\t\telement._addRunner(this);\n\t\t\treturn morpher.done();\n\t\t}\n\t\tfunction retarget(newTransforms) {\n\t\t\tif ((newTransforms.origin || \"center\").toString() !== (transforms.origin || \"center\").toString()) origin = getOrigin(newTransforms, element);\n\t\t\ttransforms = {\n\t\t\t\t...newTransforms,\n\t\t\t\torigin\n\t\t\t};\n\t\t}\n\t\tthis.queue(setup, run, retarget, true);\n\t\tthis._isDeclarative && this._rememberMorpher(\"transform\", morpher);\n\t\treturn this;\n\t},\n\tx(x) {\n\t\treturn this._queueNumber(\"x\", x);\n\t},\n\ty(y) {\n\t\treturn this._queueNumber(\"y\", y);\n\t},\n\tax(x) {\n\t\treturn this._queueNumber(\"ax\", x);\n\t},\n\tay(y) {\n\t\treturn this._queueNumber(\"ay\", y);\n\t},\n\tdx(x = 0) {\n\t\treturn this._queueNumberDelta(\"x\", x);\n\t},\n\tdy(y = 0) {\n\t\treturn this._queueNumberDelta(\"y\", y);\n\t},\n\tdmove(x, y) {\n\t\treturn this.dx(x).dy(y);\n\t},\n\t_queueNumberDelta(method, to) {\n\t\tto = new SVGNumber(to);\n\t\tif (this._tryRetarget(method, to)) return this;\n\t\tconst morpher = new Morphable(this._stepper).to(to);\n\t\tlet from = null;\n\t\tthis.queue(function() {\n\t\t\tfrom = this.element()[method]();\n\t\t\tmorpher.from(from);\n\t\t\tmorpher.to(from + to);\n\t\t}, function(pos) {\n\t\t\tthis.element()[method](morpher.at(pos));\n\t\t\treturn morpher.done();\n\t\t}, function(newTo) {\n\t\t\tmorpher.to(from + new SVGNumber(newTo));\n\t\t});\n\t\tthis._rememberMorpher(method, morpher);\n\t\treturn this;\n\t},\n\t_queueObject(method, to) {\n\t\tif (this._tryRetarget(method, to)) return this;\n\t\tconst morpher = new Morphable(this._stepper).to(to);\n\t\tthis.queue(function() {\n\t\t\tmorpher.from(this.element()[method]());\n\t\t}, function(pos) {\n\t\t\tthis.element()[method](morpher.at(pos));\n\t\t\treturn morpher.done();\n\t\t});\n\t\tthis._rememberMorpher(method, morpher);\n\t\treturn this;\n\t},\n\t_queueNumber(method, value) {\n\t\treturn this._queueObject(method, new SVGNumber(value));\n\t},\n\tcx(x) {\n\t\treturn this._queueNumber(\"cx\", x);\n\t},\n\tcy(y) {\n\t\treturn this._queueNumber(\"cy\", y);\n\t},\n\tmove(x, y) {\n\t\treturn this.x(x).y(y);\n\t},\n\tamove(x, y) {\n\t\treturn this.ax(x).ay(y);\n\t},\n\tcenter(x, y) {\n\t\treturn this.cx(x).cy(y);\n\t},\n\tsize(width, height) {\n\t\tconst size = proportionalSize(this._element, width, height);\n\t\treturn this.width(size.width).height(size.height);\n\t},\n\twidth(width) {\n\t\treturn this._queueNumber(\"width\", width);\n\t},\n\theight(height) {\n\t\treturn this._queueNumber(\"height\", height);\n\t},\n\tplot(a, b, c, d) {\n\t\tif (arguments.length === 4) return this.plot([\n\t\t\ta,\n\t\t\tb,\n\t\t\tc,\n\t\t\td\n\t\t]);\n\t\tif (this._tryRetarget(\"plot\", a)) return this;\n\t\tconst morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n\t\tthis.queue(function() {\n\t\t\tmorpher.from(this._element.array());\n\t\t}, function(pos) {\n\t\t\tthis._element.plot(morpher.at(pos));\n\t\t\treturn morpher.done();\n\t\t});\n\t\tthis._rememberMorpher(\"plot\", morpher);\n\t\treturn this;\n\t},\n\tleading(value) {\n\t\treturn this._queueNumber(\"leading\", value);\n\t},\n\tviewbox(x, y, width, height) {\n\t\treturn this._queueObject(\"viewbox\", new Box(x, y, width, height));\n\t},\n\tupdate(o) {\n\t\tif (typeof o !== \"object\") return this.update({\n\t\t\toffset: arguments[0],\n\t\t\tcolor: arguments[1],\n\t\t\topacity: arguments[2]\n\t\t});\n\t\tif (o.opacity != null) this.attr(\"stop-opacity\", o.opacity);\n\t\tif (o.color != null) this.attr(\"stop-color\", o.color);\n\t\tif (o.offset != null) this.attr(\"offset\", o.offset);\n\t\treturn this;\n\t}\n});\nextend(Runner, {\n\trx,\n\try,\n\tfrom,\n\tto\n});\nregister(Runner, \"Runner\");\n\n//#endregion\n//#region src/elements/Svg.js\nvar Svg = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"svg\", node), attrs);\n\t\tthis.namespace();\n\t}\n\tdefs() {\n\t\tif (!this.isRoot()) return this.root().defs();\n\t\treturn adopt(this.node.querySelector(\"defs\")) || this.put(new Defs());\n\t}\n\tisRoot() {\n\t\treturn !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== \"#document-fragment\";\n\t}\n\tnamespace() {\n\t\tif (!this.isRoot()) return this.root().namespace();\n\t\treturn this.attr({\n\t\t\txmlns: svg,\n\t\t\tversion: \"1.1\"\n\t\t}).attr(\"xmlns:xlink\", xlink, xmlns);\n\t}\n\tremoveNamespace() {\n\t\treturn this.attr({\n\t\t\txmlns: null,\n\t\t\tversion: null\n\t\t}).attr(\"xmlns:xlink\", null, xmlns).attr(\"xmlns:svgjs\", null, xmlns);\n\t}\n\troot() {\n\t\tif (this.isRoot()) return this;\n\t\treturn super.root();\n\t}\n};\nregisterMethods({ Container: { nested: wrapWithAttrCheck(function() {\n\treturn this.put(new Svg());\n}) } });\nregister(Svg, \"Svg\", true);\n\n//#endregion\n//#region src/elements/Symbol.js\nvar Symbol$1 = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"symbol\", node), attrs);\n\t}\n};\nregisterMethods({ Container: { symbol: wrapWithAttrCheck(function() {\n\treturn this.put(new Symbol$1());\n}) } });\nregister(Symbol$1, \"Symbol\");\n\n//#endregion\n//#region src/modules/core/textable.js\nvar textable_exports = /* @__PURE__ */ __exportAll({\n\tamove: () => amove,\n\tax: () => ax,\n\tay: () => ay,\n\tbuild: () => build,\n\tcenter: () => center,\n\tcx: () => cx,\n\tcy: () => cy,\n\tlength: () => length,\n\tmove: () => move$1,\n\tplain: () => plain,\n\tx: () => x$1,\n\ty: () => y$1\n});\nfunction plain(text) {\n\tif (this._build === false) this.clear();\n\tthis.node.appendChild(globals.document.createTextNode(text));\n\treturn this;\n}\nfunction length() {\n\treturn this.node.getComputedTextLength();\n}\nfunction x$1(x, box = this.bbox()) {\n\tif (x == null) return box.x;\n\treturn this.attr(\"x\", this.attr(\"x\") + x - box.x);\n}\nfunction y$1(y, box = this.bbox()) {\n\tif (y == null) return box.y;\n\treturn this.attr(\"y\", this.attr(\"y\") + y - box.y);\n}\nfunction move$1(x, y, box = this.bbox()) {\n\treturn this.x(x, box).y(y, box);\n}\nfunction cx(x, box = this.bbox()) {\n\tif (x == null) return box.cx;\n\treturn this.attr(\"x\", this.attr(\"x\") + x - box.cx);\n}\nfunction cy(y, box = this.bbox()) {\n\tif (y == null) return box.cy;\n\treturn this.attr(\"y\", this.attr(\"y\") + y - box.cy);\n}\nfunction center(x, y, box = this.bbox()) {\n\treturn this.cx(x, box).cy(y, box);\n}\nfunction ax(x) {\n\treturn this.attr(\"x\", x);\n}\nfunction ay(y) {\n\treturn this.attr(\"y\", y);\n}\nfunction amove(x, y) {\n\treturn this.ax(x).ay(y);\n}\nfunction build(build) {\n\tthis._build = !!build;\n\treturn this;\n}\n\n//#endregion\n//#region src/elements/Text.js\nvar Text = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"text\", node), attrs);\n\t\tthis.dom.leading = this.dom.leading ?? new SVGNumber(1.3);\n\t\tthis._rebuild = true;\n\t\tthis._build = false;\n\t}\n\tleading(value) {\n\t\tif (value == null) return this.dom.leading;\n\t\tthis.dom.leading = new SVGNumber(value);\n\t\treturn this.rebuild();\n\t}\n\trebuild(rebuild) {\n\t\tif (typeof rebuild === \"boolean\") this._rebuild = rebuild;\n\t\tif (this._rebuild) {\n\t\t\tconst self = this;\n\t\t\tlet blankLineOffset = 0;\n\t\t\tconst leading = this.dom.leading;\n\t\t\tthis.each(function(i) {\n\t\t\t\tif (isDescriptive(this.node)) return;\n\t\t\t\tconst fontSize = globals.window.getComputedStyle(this.node).getPropertyValue(\"font-size\");\n\t\t\t\tconst dy = leading * new SVGNumber(fontSize);\n\t\t\t\tif (this.dom.newLined) {\n\t\t\t\t\tthis.attr(\"x\", self.attr(\"x\"));\n\t\t\t\t\tif (this.text() === \"\\n\") blankLineOffset += dy;\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.attr(\"dy\", i ? dy + blankLineOffset : 0);\n\t\t\t\t\t\tblankLineOffset = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.fire(\"rebuild\");\n\t\t}\n\t\treturn this;\n\t}\n\tsetData(o) {\n\t\tthis.dom = o;\n\t\tthis.dom.leading = new SVGNumber(o.leading || 1.3);\n\t\treturn this;\n\t}\n\twriteDataToDom() {\n\t\treturn super.writeDataToDom({ leading: 1.3 });\n\t}\n\ttext(text) {\n\t\tif (text === void 0) {\n\t\t\tconst children = this.node.childNodes;\n\t\t\tlet firstLine = 0;\n\t\t\ttext = \"\";\n\t\t\tfor (let i = 0, len = children.length; i < len; ++i) {\n\t\t\t\tif (children[i].nodeName === \"textPath\" || isDescriptive(children[i])) {\n\t\t\t\t\tif (i === 0) firstLine = i + 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) text += \"\\n\";\n\t\t\t\ttext += children[i].textContent;\n\t\t\t}\n\t\t\treturn text;\n\t\t}\n\t\tthis.clear().build(true);\n\t\tif (typeof text === \"function\") text.call(this, this);\n\t\telse {\n\t\t\ttext = (text + \"\").split(\"\\n\");\n\t\t\tfor (let j = 0, jl = text.length; j < jl; j++) this.newLine(text[j]);\n\t\t}\n\t\treturn this.build(false).rebuild();\n\t}\n};\nextend(Text, textable_exports);\nregisterMethods({ Container: {\n\ttext: wrapWithAttrCheck(function(text = \"\") {\n\t\treturn this.put(new Text()).text(text);\n\t}),\n\tplain: wrapWithAttrCheck(function(text = \"\") {\n\t\treturn this.put(new Text()).plain(text);\n\t})\n} });\nregister(Text, \"Text\");\n\n//#endregion\n//#region src/elements/Tspan.js\nvar Tspan = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"tspan\", node), attrs);\n\t\tthis._build = false;\n\t}\n\tdx(dx) {\n\t\treturn this.attr(\"dx\", dx);\n\t}\n\tdy(dy) {\n\t\treturn this.attr(\"dy\", dy);\n\t}\n\tnewLine() {\n\t\tthis.dom.newLined = true;\n\t\tconst text = this.parent();\n\t\tif (!(text instanceof Text)) return this;\n\t\tconst i = text.index(this);\n\t\tconst fontSize = globals.window.getComputedStyle(this.node).getPropertyValue(\"font-size\");\n\t\tconst dy = text.dom.leading * new SVGNumber(fontSize);\n\t\treturn this.dy(i ? dy : 0).attr(\"x\", text.x());\n\t}\n\ttext(text) {\n\t\tif (text == null) return this.node.textContent + (this.dom.newLined ? \"\\n\" : \"\");\n\t\tif (typeof text === \"function\") {\n\t\t\tthis.clear().build(true);\n\t\t\ttext.call(this, this);\n\t\t\tthis.build(false);\n\t\t} else this.plain(text);\n\t\treturn this;\n\t}\n};\nextend(Tspan, textable_exports);\nregisterMethods({\n\tTspan: { tspan: wrapWithAttrCheck(function(text = \"\") {\n\t\tconst tspan = new Tspan();\n\t\tif (!this._build) this.clear();\n\t\treturn this.put(tspan).text(text);\n\t}) },\n\tText: { newLine: function(text = \"\") {\n\t\treturn this.tspan(text).newLine();\n\t} }\n});\nregister(Tspan, \"Tspan\");\n\n//#endregion\n//#region src/elements/Circle.js\nvar Circle = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"circle\", node), attrs);\n\t}\n\tradius(r) {\n\t\treturn this.attr(\"r\", r);\n\t}\n\trx(rx) {\n\t\treturn this.attr(\"r\", rx);\n\t}\n\try(ry) {\n\t\treturn this.rx(ry);\n\t}\n\tsize(size) {\n\t\treturn this.radius(new SVGNumber(size).divide(2));\n\t}\n};\nextend(Circle, {\n\tx: x$3,\n\ty: y$3,\n\tcx: cx$1,\n\tcy: cy$1,\n\twidth: width$2,\n\theight: height$2\n});\nregisterMethods({ Container: { circle: wrapWithAttrCheck(function(size = 0) {\n\treturn this.put(new Circle()).size(size).move(0, 0);\n}) } });\nregister(Circle, \"Circle\");\n\n//#endregion\n//#region src/elements/ClipPath.js\nvar ClipPath = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"clipPath\", node), attrs);\n\t}\n\tremove() {\n\t\tthis.targets().forEach(function(el) {\n\t\t\tel.unclip();\n\t\t});\n\t\treturn super.remove();\n\t}\n\ttargets() {\n\t\treturn findReferences(this.node, \"clip-path\");\n\t}\n};\nregisterMethods({\n\tContainer: { clip: wrapWithAttrCheck(function() {\n\t\treturn this.defs().put(new ClipPath());\n\t}) },\n\tElement: {\n\t\tclipper() {\n\t\t\treturn this.reference(\"clip-path\");\n\t\t},\n\t\tclipWith(element) {\n\t\t\tconst clipper = element instanceof ClipPath ? element : this.parent().clip().add(element);\n\t\t\treturn this.attr(\"clip-path\", \"url(#\" + clipper.id() + \")\");\n\t\t},\n\t\tunclip() {\n\t\t\treturn this.attr(\"clip-path\", null);\n\t\t}\n\t}\n});\nregister(ClipPath, \"ClipPath\");\n\n//#endregion\n//#region src/elements/ForeignObject.js\nvar ForeignObject = class extends Element {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"foreignObject\", node), attrs);\n\t}\n};\nregisterMethods({ Container: { foreignObject: wrapWithAttrCheck(function(width, height) {\n\treturn this.put(new ForeignObject()).size(width, height);\n}) } });\nregister(ForeignObject, \"ForeignObject\");\n\n//#endregion\n//#region src/modules/core/containerGeometry.js\nvar containerGeometry_exports = /* @__PURE__ */ __exportAll({\n\tdmove: () => dmove,\n\tdx: () => dx,\n\tdy: () => dy,\n\theight: () => height,\n\tmove: () => move,\n\tsize: () => size,\n\twidth: () => width,\n\tx: () => x,\n\ty: () => y\n});\nfunction dmove(dx, dy) {\n\tthis.children().forEach((child) => {\n\t\tlet bbox;\n\t\ttry {\n\t\t\tbbox = child.node instanceof getWindow().SVGSVGElement ? new Box(child.attr([\n\t\t\t\t\"x\",\n\t\t\t\t\"y\",\n\t\t\t\t\"width\",\n\t\t\t\t\"height\"\n\t\t\t])) : child.bbox();\n\t\t} catch (e) {\n\t\t\treturn;\n\t\t}\n\t\tconst m = new Matrix(child);\n\t\tconst matrix = m.translate(dx, dy).transform(m.inverse());\n\t\tconst p = new Point(bbox.x, bbox.y).transform(matrix);\n\t\tchild.dmove(p.x - bbox.x, p.y - bbox.y);\n\t});\n\treturn this;\n}\nfunction dx(dx) {\n\treturn this.dmove(dx, 0);\n}\nfunction dy(dy) {\n\treturn this.dmove(0, dy);\n}\nfunction height(height, box = this.bbox()) {\n\tif (height == null) return box.height;\n\treturn this.size(box.width, height, box);\n}\nfunction move(x = 0, y = 0, box = this.bbox()) {\n\tconst dx = x - box.x;\n\tconst dy = y - box.y;\n\treturn this.dmove(dx, dy);\n}\nfunction size(width, height, box = this.bbox()) {\n\tconst p = proportionalSize(this, width, height, box);\n\tconst scaleX = p.width / box.width;\n\tconst scaleY = p.height / box.height;\n\tthis.children().forEach((child) => {\n\t\tconst o = new Point(box).transform(new Matrix(child).inverse());\n\t\tchild.scale(scaleX, scaleY, o.x, o.y);\n\t});\n\treturn this;\n}\nfunction width(width, box = this.bbox()) {\n\tif (width == null) return box.width;\n\treturn this.size(width, box.height, box);\n}\nfunction x(x, box = this.bbox()) {\n\tif (x == null) return box.x;\n\treturn this.move(x, box.y, box);\n}\nfunction y(y, box = this.bbox()) {\n\tif (y == null) return box.y;\n\treturn this.move(box.x, y, box);\n}\n\n//#endregion\n//#region src/elements/G.js\nvar G = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"g\", node), attrs);\n\t}\n};\nextend(G, containerGeometry_exports);\nregisterMethods({ Container: { group: wrapWithAttrCheck(function() {\n\treturn this.put(new G());\n}) } });\nregister(G, \"G\");\n\n//#endregion\n//#region src/elements/A.js\nvar A = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"a\", node), attrs);\n\t}\n\ttarget(target) {\n\t\treturn this.attr(\"target\", target);\n\t}\n\tto(url) {\n\t\treturn this.attr(\"href\", url, xlink);\n\t}\n};\nextend(A, containerGeometry_exports);\nregisterMethods({\n\tContainer: { link: wrapWithAttrCheck(function(url) {\n\t\treturn this.put(new A()).to(url);\n\t}) },\n\tElement: {\n\t\tunlink() {\n\t\t\tconst link = this.linker();\n\t\t\tif (!link) return this;\n\t\t\tconst parent = link.parent();\n\t\t\tif (!parent) return this.remove();\n\t\t\tconst index = parent.index(link);\n\t\t\tparent.add(this, index);\n\t\t\tlink.remove();\n\t\t\treturn this;\n\t\t},\n\t\tlinkTo(url) {\n\t\t\tlet link = this.linker();\n\t\t\tif (!link) {\n\t\t\t\tlink = new A();\n\t\t\t\tthis.wrap(link);\n\t\t\t}\n\t\t\tif (typeof url === \"function\") url.call(link, link);\n\t\t\telse link.to(url);\n\t\t\treturn this;\n\t\t},\n\t\tlinker() {\n\t\t\tconst link = this.parent();\n\t\t\tif (link && link.node.nodeName.toLowerCase() === \"a\") return link;\n\t\t\treturn null;\n\t\t}\n\t}\n});\nregister(A, \"A\");\n\n//#endregion\n//#region src/elements/Mask.js\nvar Mask = class extends Container {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"mask\", node), attrs);\n\t}\n\tremove() {\n\t\tthis.targets().forEach(function(el) {\n\t\t\tel.unmask();\n\t\t});\n\t\treturn super.remove();\n\t}\n\ttargets() {\n\t\treturn findReferences(this.node, \"mask\");\n\t}\n};\nregisterMethods({\n\tContainer: { mask: wrapWithAttrCheck(function() {\n\t\treturn this.defs().put(new Mask());\n\t}) },\n\tElement: {\n\t\tmasker() {\n\t\t\treturn this.reference(\"mask\");\n\t\t},\n\t\tmaskWith(element) {\n\t\t\tconst masker = element instanceof Mask ? element : this.parent().mask().add(element);\n\t\t\treturn this.attr(\"mask\", \"url(#\" + masker.id() + \")\");\n\t\t},\n\t\tunmask() {\n\t\t\treturn this.attr(\"mask\", null);\n\t\t}\n\t}\n});\nregister(Mask, \"Mask\");\n\n//#endregion\n//#region src/elements/Stop.js\nvar Stop = class extends Element {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"stop\", node), attrs);\n\t}\n\tupdate(o) {\n\t\tif (typeof o === \"number\" || o instanceof SVGNumber) o = {\n\t\t\toffset: arguments[0],\n\t\t\tcolor: arguments[1],\n\t\t\topacity: arguments[2]\n\t\t};\n\t\tif (o.opacity != null) this.attr(\"stop-opacity\", o.opacity);\n\t\tif (o.color != null) this.attr(\"stop-color\", o.color);\n\t\tif (o.offset != null) this.attr(\"offset\", new SVGNumber(o.offset));\n\t\treturn this;\n\t}\n};\nregisterMethods({ Gradient: { stop: function(offset, color, opacity) {\n\treturn this.put(new Stop()).update(offset, color, opacity);\n} } });\nregister(Stop, \"Stop\");\n\n//#endregion\n//#region src/elements/Style.js\nfunction cssRule(selector, rule) {\n\tif (!selector) return \"\";\n\tif (!rule) return selector;\n\tlet ret = selector + \"{\";\n\tfor (const i in rule) ret += unCamelCase(i) + \":\" + rule[i] + \";\";\n\tret += \"}\";\n\treturn ret;\n}\nvar Style = class extends Element {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"style\", node), attrs);\n\t}\n\taddText(w = \"\") {\n\t\tthis.node.textContent += w;\n\t\treturn this;\n\t}\n\tfont(name, src, params = {}) {\n\t\treturn this.rule(\"@font-face\", {\n\t\t\tfontFamily: name,\n\t\t\tsrc,\n\t\t\t...params\n\t\t});\n\t}\n\trule(selector, obj) {\n\t\treturn this.addText(cssRule(selector, obj));\n\t}\n};\nregisterMethods(\"Dom\", {\n\tstyle(selector, obj) {\n\t\treturn this.put(new Style()).rule(selector, obj);\n\t},\n\tfontface(name, src, params) {\n\t\treturn this.put(new Style()).font(name, src, params);\n\t}\n});\nregister(Style, \"Style\");\n\n//#endregion\n//#region src/elements/TextPath.js\nvar TextPath = class extends Text {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"textPath\", node), attrs);\n\t}\n\tarray() {\n\t\tconst track = this.track();\n\t\treturn track ? track.array() : null;\n\t}\n\tplot(d) {\n\t\tconst track = this.track();\n\t\tlet pathArray = null;\n\t\tif (track) pathArray = track.plot(d);\n\t\treturn d == null ? pathArray : this;\n\t}\n\ttrack() {\n\t\treturn this.reference(\"href\");\n\t}\n};\nregisterMethods({\n\tContainer: { textPath: wrapWithAttrCheck(function(text, path) {\n\t\tif (!(text instanceof Text)) text = this.text(text);\n\t\treturn text.path(path);\n\t}) },\n\tText: {\n\t\tpath: wrapWithAttrCheck(function(track, importNodes = true) {\n\t\t\tconst textPath = new TextPath();\n\t\t\tif (!(track instanceof Path)) track = this.defs().path(track);\n\t\t\ttextPath.attr(\"href\", \"#\" + track, xlink);\n\t\t\tlet node;\n\t\t\tif (importNodes) while (node = this.node.firstChild) textPath.node.appendChild(node);\n\t\t\treturn this.put(textPath);\n\t\t}),\n\t\ttextPath() {\n\t\t\treturn this.findOne(\"textPath\");\n\t\t}\n\t},\n\tPath: {\n\t\ttext: wrapWithAttrCheck(function(text) {\n\t\t\tif (!(text instanceof Text)) text = new Text().addTo(this.parent()).text(text);\n\t\t\treturn text.path(this);\n\t\t}),\n\t\ttargets() {\n\t\t\treturn findReferences(this.node, \"href\", \"textPath\");\n\t\t}\n\t}\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, \"TextPath\");\n\n//#endregion\n//#region src/elements/Use.js\nvar Use = class extends Shape {\n\tconstructor(node, attrs = node) {\n\t\tsuper(nodeOrNew(\"use\", node), attrs);\n\t}\n\tuse(element, file) {\n\t\treturn this.attr(\"href\", (file || \"\") + \"#\" + element, xlink);\n\t}\n};\nregisterMethods({ Container: { use: wrapWithAttrCheck(function(element, file) {\n\treturn this.put(new Use()).use(element, file);\n}) } });\nregister(Use, \"Use\");\n\n//#endregion\n//#region src/main.js\nconst SVG = makeInstance;\nextend([\n\tSvg,\n\tSymbol$1,\n\tImage,\n\tPattern,\n\tMarker\n], getMethodsFor(\"viewbox\"));\nextend([\n\tLine,\n\tPolyline,\n\tPolygon,\n\tPath\n], getMethodsFor(\"marker\"));\nextend(Text, getMethodsFor(\"Text\"));\nextend(Path, getMethodsFor(\"Path\"));\nextend(Defs, getMethodsFor(\"Defs\"));\nextend([Text, Tspan], getMethodsFor(\"Tspan\"));\nextend([\n\tRect,\n\tEllipse,\n\tGradient,\n\tRunner\n], getMethodsFor(\"radius\"));\nextend(EventTarget, getMethodsFor(\"EventTarget\"));\nextend(Dom, getMethodsFor(\"Dom\"));\nextend(Element, getMethodsFor(\"Element\"));\nextend(Shape, getMethodsFor(\"Shape\"));\nextend([Container, Fragment], getMethodsFor(\"Container\"));\nextend(Gradient, getMethodsFor(\"Gradient\"));\nextend(Runner, getMethodsFor(\"Runner\"));\nList.extend(getMethodNames());\nregisterMorphableType([\n\tSVGNumber,\n\tColor,\n\tBox,\n\tMatrix,\n\tSVGArray,\n\tPointArray,\n\tPathArray,\n\tPoint\n]);\nmakeMorphable();\n\n//#endregion\nexport { A, Animator, SVGArray as Array, Box, Circle, ClipPath, Color, Container, Controller, Defs, Dom, Ease, Element, Ellipse, EventTarget, ForeignObject, Fragment, G, Gradient, Image, Line, List, Marker, Mask, Matrix, Morphable, NonMorphable, SVGNumber as Number, ObjectBag, PID, Path, PathArray, Pattern, Point, PointArray, Polygon, Polyline, Queue, Rect, Runner, SVG, Shape, Spring, Stop, Style, Svg, Symbol$1 as Symbol, Text, TextPath, Timeline, TransformBag, Tspan, Use, adopt, assignNewId, create, defaults_exports as defaults, dispatch, easing, eid, extend, baseFind as find, getClass, getWindow, makeInstance, makeMorphable, mockAdopt, namespaces_exports as namespaces, nodeOrNew, off, on, parser, regex_exports as regex, register, registerMorphableType, registerWindow, root, utils_exports as utils, withWindow, wrapWithAttrCheck };\n//# sourceMappingURL=svg.esm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPaper = getPaper;\nconst svg_js_1 = require(\"@svgdotjs/svg.js\");\nfunction getPaper() {\n    // eslint-disable-next-line new-cap\n    return (0, svg_js_1.SVG)();\n}\n//# sourceMappingURL=getPaper.browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResiduesPosition = appendResiduesPosition;\nconst getPaper_1 = require(\"./getPaper\");\nfunction appendResiduesPosition(data, options = {}) {\n    const residues = data.residues;\n    const { leftRightBorders = 20, spaceBetweenResidues = 20, width = 600, } = options;\n    let xPos = leftRightBorders;\n    let xOld = xPos;\n    let line = 0;\n    // we create a temporary paper in order to get the width of the text blocs\n    const paper = (0, getPaper_1.getPaper)();\n    for (let i = 0; i < residues.all.length; i++) {\n        let residue = residues.all[i];\n        let textWidth = getTextWidth(paper, residue.label, options);\n        xPos += textWidth;\n        if (xPos > width - leftRightBorders) {\n            xOld = leftRightBorders;\n            xPos = leftRightBorders + textWidth;\n            line++;\n        }\n        setPaper(residue, xOld, xPos, line);\n        xPos += spaceBetweenResidues;\n        xOld = xPos;\n    }\n    residues.nbLines = line;\n}\nfunction setPaper(residue, xFrom, xTo, line) {\n    residue.paper = {\n        xFrom,\n        xTo,\n        line,\n        usedSlots: [],\n        topPosition: 0,\n        bottomPosition: 0,\n    };\n}\nfunction getTextWidth(paper, label, options = {}) {\n    const { labelFontFamily = 'Verdana', labelSize = 12 } = options;\n    let text = paper.text(label);\n    text.font({\n        family: labelFontFamily,\n        size: labelSize,\n        weight: 'bold',\n        fill: '#888',\n    });\n    let textWidth = text.length() || text.bbox().width;\n    text.remove();\n    return textWidth;\n}\n//# sourceMappingURL=appendResiduesPosition.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResults = appendResults;\nfunction appendResults(data, analysisResult, options = {}) {\n    const numberResidues = data.residues.residues.length;\n    const { merge = {}, filter = {} } = options;\n    let results = structuredClone(analysisResult);\n    results = results.filter((result) => !result.type.match(/^-B\\d$/));\n    // we calculate all the lines based on the results\n    for (let result of results) {\n        let parts = result.type.split(/:|(?=[a-z])/); // we may have ':' but not mandatory\n        if (parts.length === 2) {\n            result.internal = true;\n            if (parts[1].match(/^[a-d][1-9]/)) {\n                [parts[0], parts[1]] = [parts[1], parts[0]];\n            }\n            result.to = getNumber(parts[0]) - 1;\n            result.from = numberResidues - getNumber(parts[1]);\n        }\n        else {\n            if (parts[0].match(/^[a-d][1-9]/)) {\n                result.fromBegin = true;\n                result.position = getNumber(parts[0]) - 1;\n            }\n            if (parts[0].match(/^[w-z][1-9]/)) {\n                result.fromEnd = true;\n                result.position = numberResidues - 1 - getNumber(parts[0]);\n            }\n        }\n        if (result.fromEnd)\n            result.color = 'red';\n        if (result.fromBegin)\n            result.color = 'blue';\n        if (result.internal) {\n            switch (result.type.slice(0, 1)) {\n                case 'a':\n                    result.color = 'green';\n                    break;\n                case 'b':\n                    result.color = 'orange';\n                    break;\n                case 'c':\n                    result.color = 'cyan';\n                    break;\n                default:\n                    result.color = 'green';\n            }\n        }\n    }\n    if (merge.charge) {\n        const unique = {};\n        for (let result of results) {\n            if (!unique[result.type]) {\n                unique[result.type] = [];\n            }\n            unique[result.type].push(result);\n        }\n        results = [];\n        for (let key in unique) {\n            let current = unique[key][0];\n            current.similarity = unique[key].reduce((previous, item) => previous + item.similarity, 0);\n            current.similarity = current.similarity / unique[key].length;\n            results.push(current);\n            current.charge = '';\n        }\n    }\n    for (let result of results) {\n        if (result.similarity > 0.95) {\n            result.textColor = 'black';\n        }\n        else if (result.similarity > 0.9) {\n            result.textColor = '#333';\n        }\n        else if (result.similariy > 0.8) {\n            result.textColor = '#666';\n        }\n        else {\n            result.textColor = '#999';\n        }\n    }\n    results = filterResults(results, filter);\n    // sort by residue length\n    results.sort((a, b) => a.length - b.length);\n    data.results = results;\n}\nfunction getNumber(text) {\n    return Number(text.replace(/^.(\\d+).*$/, '$1'));\n}\nfunction filterResults(results, filter) {\n    if (!filter)\n        return;\n    let { minRelativeQuantity = 0, minSimilarity = 0, minQuantity = 0, showInternals = true, } = filter;\n    if (minRelativeQuantity) {\n        minQuantity =\n            Math.max(...results.map((entry) => entry.quantity)) * minRelativeQuantity;\n    }\n    if (minSimilarity) {\n        results = results.filter((result) => !result.similarity || result.similarity >= minSimilarity);\n    }\n    if (minQuantity) {\n        results = results.filter((result) => !result.quantity || result.quantity >= minQuantity);\n    }\n    if (!showInternals) {\n        results = results.filter((result) => !result.internal);\n    }\n    return results;\n}\n//# sourceMappingURL=appendResults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRows = appendRows;\nfunction appendRows(data) {\n    let allResidues = data.residues.all.toSorted((a, b) => a.line - b.line);\n    data.rows = [];\n    for (let residue of allResidues) {\n        let line = residue.paper.line;\n        if (!data.rows[line]) {\n            data.rows[line] = {\n                residues: [],\n            };\n        }\n        data.rows[line].residues.push(residue);\n    }\n    for (let row of data.rows) {\n        row.info = {};\n    }\n}\n//# sourceMappingURL=appendRows.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRowsInformation = appendRowsInformation;\n/**\n * For each row we calculate internals, label over and label under\n * @param {*} data\n */\nfunction appendRowsInformation(data) {\n    for (let row of data.rows) {\n        let filtered = row.residues.filter((entry) => entry.fromBegin !== undefined);\n        if (filtered.length > 0) {\n            row.info.firstResidue = filtered[0].fromBegin;\n            row.info.lastResidue = filtered.at(-1).fromBegin;\n        }\n        row.internals = [];\n    }\n    for (let result of data.results) {\n        if (result.internal) {\n            let fromResidue = data.residues.residues[result.from];\n            let from = fromResidue.fromBegin;\n            let toResidue = data.residues.residues[result.to];\n            let to = toResidue.fromBegin;\n            for (let row of data.rows) {\n                if (from <= row.info.lastResidue && to >= row.info.firstResidue) {\n                    result = structuredClone(result);\n                    result.fromResidue = fromResidue;\n                    if (from < row.info.firstResidue) {\n                        result.firstIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === from) {\n                                result.firstIndex = index;\n                            }\n                        }\n                    }\n                    result.toResidue = toResidue;\n                    if (to > row.info.lastResidue) {\n                        result.lastIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === to) {\n                                result.lastIndex = index;\n                            }\n                        }\n                    }\n                    row.internals.push(result);\n                }\n            }\n        }\n        else if (result.position !== undefined &&\n            data.residues.residues[result.position]) {\n            let residue = data.residues.residues[result.position];\n            if (result.fromEnd) {\n                residue.info.nbOver++;\n                residue.results.end.push(result);\n            }\n            if (result.fromBegin) {\n                residue.info.nbUnder++;\n                residue.results.begin.push(result);\n            }\n        }\n    }\n    for (let row of data.rows) {\n        let maxNbOver = 0;\n        let maxNbUnder = 0;\n        for (let residue of row.residues) {\n            if (residue.info.nbOver > maxNbOver)\n                maxNbOver = residue.info.nbOver;\n            if (residue.info.nbUnder > maxNbUnder)\n                maxNbUnder = residue.info.nbUnder;\n        }\n        row.info.nbOver = maxNbOver;\n        row.info.nbUnder = maxNbUnder;\n    }\n}\n//# sourceMappingURL=appendRowsInformation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addScript = addScript;\nfunction addScript(paper) {\n    let scriptCode = ` // <![CDATA[\n        function mouseOver(evt) {\n           \n            let targetRange=evt.target.id.replace(/^line/,'');\n            let from=targetRange.replace(/-.*/,'')*1;\n            let to=targetRange.replace(/.*-/,'')*1;\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','highlight');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    let residueNumber=child.id.replace(/residue-/,'')*1;\n                    if (residueNumber>=from && residueNumber<=to) {\n                        child.setAttribute('class','highlightText');\n                    }\n                }\n            }\n        }\n        function mouseOut(evt) {\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    child.setAttribute('class','');\n                }\n            }\n        }\n     // ]]>\n    `;\n    let script = paper.element('script');\n    script.attr({\n        type: 'application/ecmascript',\n    });\n    script.words(scriptCode);\n}\n//# sourceMappingURL=addScript.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawLabel = drawLabel;\nfunction drawLabel(paper, result, x, y, options) {\n    let label = result.type;\n    let similarity = String(Math.round(result.similarity * 100));\n    let charge = result.charge > 0 ? `+${result.charge}` : result.charge;\n    let text = paper.plain(label);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        weight: 'bold',\n        size: options.labelSize,\n        anchor: 'end',\n    });\n    text.attr({\n        x,\n        y,\n    });\n    let textWidth = 0;\n    text = paper.plain(charge);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y: y - options.labelSize / 2 });\n    text = paper.plain(similarity);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y });\n}\n//# sourceMappingURL=drawLabel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawInternals = drawInternals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawInternals(paper, row, options) {\n    let fromX = 0;\n    let toX = 0;\n    for (const internal of row.internals) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        if (internal.firstIndex === true) {\n            fromX = 0;\n        }\n        else {\n            fromX =\n                internal.fromResidue.paper.xFrom - options.spaceBetweenResidues / 2;\n        }\n        if (internal.lastIndex === true) {\n            toX = options.width - 1;\n        }\n        else {\n            toX = internal.toResidue.paper.xTo + options.spaceBetweenResidues / 2;\n        }\n        let y = options.verticalPosition;\n        let drawLine = paper.line(fromX, y, toX, y);\n        drawLine.attr({\n            onmouseover: 'mouseOver(evt)',\n            onmouseout: 'mouseOut(evt)',\n            id: `line${internal.fromResidue.fromBegin}-${internal.toResidue.fromBegin}`,\n        });\n        drawLine.stroke({\n            color: internal.color,\n            width: options.strokeWidth,\n        });\n        let center = (fromX + toX + (internal.type.length * options.labelSize * 2) / 3) / 2;\n        (0, drawLabel_1.drawLabel)(paper, internal, center, y - 2, options);\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawInternals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawReplacements = drawReplacements;\nfunction drawReplacements(paper, data, options) {\n    let replacements = data.residues.replacements;\n    replacements = Object.keys(replacements).map((key) => {\n        return { key, ...replacements[key] };\n    });\n    for (let replacement of replacements) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        let text = paper.plain(`${replacement.label} = ${replacement.key}`);\n        text.font({\n            fill: 'darkviolet',\n            family: options.labelFontFamily,\n            weight: 'bold',\n            size: 10,\n        });\n        text.attr({\n            x: options.leftRightBorders,\n            y: options.verticalPosition,\n        });\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines;\n}\n//# sourceMappingURL=drawReplacements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawTerminals = drawTerminals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawTerminals(paper, row, options) {\n    for (let residue of row.residues) {\n        if (!residue.results)\n            continue;\n        for (let result of residue.results.begin) {\n            let line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2 - 5, residue.paper.y + 5);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y +\n                options.labelSize +\n                6 +\n                residue.paper.bottomPosition * options.labelSize, options);\n            residue.paper.bottomPosition++;\n        }\n        for (let result of residue.results.end) {\n            let line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                5 +\n                options.strokeWidth, residue.paper.y - 13);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues, residue.paper.y - 17 - residue.paper.topPosition * options.labelSize, options);\n            residue.paper.topPosition++;\n        }\n    }\n}\n//# sourceMappingURL=drawTerminals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawSequence = drawSequence;\nconst drawTerminals_1 = require(\"./drawTerminals\");\nfunction drawSequence(paper, row, options) {\n    // need to plan some space for the OVER\n    options.verticalPosition += row.info.nbOver * (options.labelSize + 1);\n    for (const residue of row.residues) {\n        residue.paper.y = options.verticalPosition;\n        let text = paper.plain(residue.label);\n        let textColor = residue.replaced\n            ? 'darkviolet'\n            : residue.kind === 'residue'\n                ? '#555'\n                : '#CCC';\n        text.font({\n            family: options.labelFontFamily,\n            size: 12,\n            weight: 'bold',\n            fill: textColor,\n        });\n        text.attr({\n            x: residue.paper.xFrom,\n            y: residue.paper.y,\n        });\n        text.attr({ id: `residue-${residue.fromBegin}` });\n    }\n    (0, drawTerminals_1.drawTerminals)(paper, row, options);\n    // need to plan some space for the UNDER\n    options.verticalPosition += row.info.nbUnder * (options.labelSize + 1);\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceSVG = sequenceSVG;\nconst appendInternals_1 = require(\"./appendInternals\");\nconst appendResidues_1 = require(\"./appendResidues\");\nconst appendResiduesPosition_1 = require(\"./appendResiduesPosition\");\nconst appendResults_1 = require(\"./appendResults\");\nconst appendRows_1 = require(\"./appendRows\");\nconst appendRowsInformation_1 = require(\"./appendRowsInformation\");\nconst addCSS_1 = require(\"./draw/addCSS\");\nconst addScript_1 = require(\"./draw/addScript\");\nconst drawInternals_1 = require(\"./draw/drawInternals\");\nconst drawReplacements_1 = require(\"./draw/drawReplacements\");\nconst drawSequence_1 = require(\"./draw/drawSequence\");\nconst getPaper_1 = require(\"./getPaper\");\n/**\n *\n * @param {string} sequence\n * @param {array} analysisResults\n * @param {object} [options={}]\n * @param {number} [options.leftRightBorders=50]\n * @param {number} [options.width=600]\n * @param {number} [options.spaceBetweenResidues=30]\n * @param {number} [options.spaceBetweenInternalLines=12]\n * @param {number} [options.strokeWidth=2]\n * @param {string} [options.labelFontFamily='Verdana']\n * @param {number} [options.labelSize=8]\n * @param {number} [options.parsing] Sequence parsing options\n * @param {object} [options.merge={}]\n * @param {boolean} [options.merge.charge] Merge results if only differs by charge\n * @param {object} [options.filter={}] define some filters\n * @param {number} [options.filter.minSimilarity=0]  minimal similarity\n * @param {number} [options.filter.minQuantity=0]  minimal quantity\n * @param {number} [options.filter.minRelativeQuantity=0]  minimal relative quantity. This value should be between 0 and 1 and supersede minQuantity.\n * @param {boolean} [options.filter.showInternals=true] show the internal fragments\n *\n */\nfunction sequenceSVG(sequence, analysisResults, options = {}) {\n    const { width = 600, leftRightBorders = 50, spaceBetweenResidues = 30, spaceBetweenInternalLines = 12, strokeWidth = 2, labelFontFamily = 'Verdana', labelSize = 8, parsing, merge, filter, } = options;\n    const drawOptions = {\n        spaceBetweenResidues,\n        leftRightBorders,\n        spaceBetweenInternalLines,\n        strokeWidth,\n        labelSize,\n        labelFontFamily,\n        verticalPosition: spaceBetweenInternalLines,\n        width,\n    };\n    let data = {};\n    (0, appendResidues_1.appendResidues)(data, sequence, parsing);\n    (0, appendResults_1.appendResults)(data, analysisResults, {\n        merge,\n        filter,\n    });\n    (0, appendResiduesPosition_1.appendResiduesPosition)(data, {\n        leftRightBorders,\n        spaceBetweenResidues,\n        labelFontFamily,\n        labelSize,\n        width,\n    });\n    (0, appendRows_1.appendRows)(data);\n    (0, appendInternals_1.appendInternals)(data);\n    (0, appendRowsInformation_1.appendRowsInformation)(data);\n    // We start to create the SVG and create the paper\n    const paper = (0, getPaper_1.getPaper)();\n    (0, addCSS_1.addCSS)(paper);\n    (0, addScript_1.addScript)(paper);\n    for (let row of data.rows) {\n        (0, drawInternals_1.drawInternals)(paper, row, drawOptions);\n        (0, drawSequence_1.drawSequence)(paper, row, drawOptions);\n    }\n    (0, drawReplacements_1.drawReplacements)(paper, data, drawOptions);\n    paper.size(width, drawOptions.verticalPosition);\n    let svg = paper.svg();\n    paper.clear();\n    return svg;\n}\n//# sourceMappingURL=sequenceSVG.js.map","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nfunction v4() {\n\tvar i=0, num, out='';\n\n\tif (!BUFFER || ((IDX + 16) > 256)) {\n\t\tBUFFER = Array(i=256);\n\t\twhile (i--) BUFFER[i] = 256 * Math.random() | 0;\n\t\ti = IDX = 0;\n\t}\n\n\tfor (; i < 16; i++) {\n\t\tnum = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[num & 15 | 64];\n\t\telse if (i==8) out += HEX[num & 63 | 128];\n\t\telse out += HEX[num];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX++;\n\treturn out;\n}\n\nexports.v4 = v4;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakWidthFct = getPeakWidthFct;\n/**\n *\n * @param {object} [options ={}]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns\n */\nfunction getPeakWidthFct(options = {}) {\n    const { logger, mass: massOptions = {} } = options;\n    const { precision = 0, peakWidthFct } = massOptions;\n    if (typeof peakWidthFct === 'function') {\n        return peakWidthFct;\n    }\n    if (!peakWidthFct) {\n        return () => 0.01;\n    }\n    try {\n        // eslint-disable-next-line no-new-func\n        return new Function('mass', `return ${peakWidthFct} + ${precision} * mass / 1e6`);\n    }\n    catch (error) {\n        logger?.warn(`error in peakWidthFct: ${error.toString()}`);\n        return fixedWidthFct;\n    }\n}\nfunction fixedWidthFct() {\n    return 0.01;\n}\n//# sourceMappingURL=getPeakWidthFct.js.map","/**\n * From an array of arrays it constructs a unique key for each array,\n * given by its values, such that same arrays have same keys.\n *\n * @param collection - Array of arrays\n * @returns - Array of objects with the original array, its index and its key\n */\nfunction addUniqueKeyToColumns(collection) {\n    return collection.map((positiveRows, columnIndexInK) => {\n        //indices of positive values within the column. (Pset)\n        let key = BigInt(0);\n        // items will be the indexes of Pset, so it's always an integer.\n        positiveRows.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n        return { positiveRows, columnIndexInK, key };\n    });\n}\n/**\n * From an array of arrays it constructs a unique key for each subarray,\n * given by its values, such that same arrays have same keys.\n * @param collection - Array of arrays\n * @returns Array of objects with the original array, its index and its key\n */\nexport default function groupColumnsBySign(collection) {\n    const mapped = addUniqueKeyToColumns(collection);\n    mapped.sort((a, b) => {\n        if (a.key - b.key < 0)\n            return -1;\n        return 1;\n    });\n    const sorted = [];\n    const indices = [];\n    let key;\n    for (const set of mapped) {\n        if (set.key !== key) {\n            key = set.key;\n            indices.push([]);\n            sorted.push(set.positiveRows);\n        }\n        indices[indices.length - 1].push(set.columnIndexInK);\n    }\n    const result = {\n        values: sorted,\n        indices,\n    };\n    return result;\n}\n//# sourceMappingURL=sortCollectionSet.js.map","import { Matrix, LuDecomposition, solve, CholeskyDecomposition, } from 'ml-matrix';\nimport sortCollectionSet from './util/sortCollectionSet';\n/**\n * Combinatorial Subspace Least Squares - subfunction for the FC-NNLS\n * Solves XtX*K = XtY for the variables in Pset\n * if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudo-inverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n * it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditioned square X rank 2, Y 3x1' in cssls.test)\n * @param XtX - Gram matrix\n * @param XtY\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param l - number of rows of X\n * @param p - number of columns of Y\n */\nexport function cssls(XtX, XtY, Pset, l, p) {\n    let K = Matrix.zeros(l, p);\n    if (Pset === null) {\n        // used for initialisation where OLS is solved.\n        const choXtX = new CholeskyDecomposition(XtX);\n        if (choXtX.isPositiveDefinite()) {\n            K = choXtX.solve(XtY);\n        }\n        else {\n            const luXtX = new LuDecomposition(XtX);\n            if (!luXtX.isSingular()) {\n                K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n            }\n            else {\n                K = solve(XtX, XtY, true);\n            }\n        }\n    }\n    else {\n        const { values: sortedPset, indices: sortedEset } = sortCollectionSet(Pset);\n        if (sortedPset.length === 1 &&\n            sortedPset[0].length === 0 &&\n            sortedEset[0].length === p) {\n            return K;\n        }\n        else if (sortedPset.length === 1 &&\n            sortedPset[0].length === l &&\n            sortedEset[0].length === p) {\n            const choXtX = new CholeskyDecomposition(XtX);\n            if (choXtX.isPositiveDefinite()) {\n                K = choXtX.solve(XtY);\n            }\n            else {\n                const luXtX = new LuDecomposition(XtX);\n                if (!luXtX.isSingular()) {\n                    K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n                }\n                else {\n                    K = solve(XtX, XtY, true);\n                }\n            }\n        }\n        else {\n            for (let k = 0; k < sortedPset.length; k++) {\n                const cols2Solve = sortedEset[k];\n                const vars = sortedPset[k];\n                let L;\n                const choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n                if (choXtX.isPositiveDefinite()) {\n                    L = choXtX.solve(XtY.selection(vars, cols2Solve));\n                }\n                else {\n                    const luXtX = new LuDecomposition(XtX.selection(vars, vars));\n                    if (!luXtX.isSingular()) {\n                        L = luXtX\n                            .solve(Matrix.eye(vars.length))\n                            .mmul(XtY.selection(vars, cols2Solve));\n                    }\n                    else {\n                        L = solve(XtX.selection(vars, vars), XtY.selection(vars, cols2Solve), true);\n                    }\n                }\n                for (let i = 0; i < L.rows; i++) {\n                    for (let j = 0; j < L.columns; j++) {\n                        K.set(vars[i], cols2Solve[j], L.get(i, j));\n                    }\n                }\n            }\n        }\n    }\n    return K;\n}\n//# sourceMappingURL=cssls.js.map","/**\n * Computes the set difference A\\B\n * @param set A as an array\n * @param set B as an array\n * @returns Elements of A that are not in B\n */\nexport default function setDifference(A, B) {\n    const C = [];\n    for (const i of A) {\n        if (!B.includes(i))\n            C.push(i);\n    }\n    return C;\n}\n//# sourceMappingURL=setDifference.js.map","import setDifference from './util/setDifference';\n/**\n * Checks whether the solution has converged\n * @param iter - current iteration\n * @param maxIter - maximum number of iterations, @default 3 times the number of columns of X\n * @param XtX - Gram matrix\n * @param XtY\n * @param Fset - Columns to be optimized (active), it stores indices of columns with negative values\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param W - Gradient Matrix\n * @param K - Coefficients Matrix\n * @param l - Number of rows of X\n * @param p - Number of columns of X\n * @param D - K clone\n * @param gradientTolerance - Control over the optimality of the solution; applied over the largest gradient value of all. @default 1e-5.\n * @returns - {Pset, Fset, W}\n */\nexport function optimality(iter, maxIter, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance) {\n    if (iter === maxIter) {\n        throw new Error('Maximum number of iterations exceeded');\n    }\n    // Check solution for optimality\n    const V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n    for (let j = 0; j < Fset.length; j++) {\n        // for the \"negative\" columns, we set the new gradient.\n        W.setColumn(Fset[j], V.subMatrixColumn([j]));\n    }\n    const Jset = [];\n    const fullSet = [];\n    for (let i = 0; i < l; i++) {\n        fullSet.push(i);\n    }\n    for (const colIndex of Fset) {\n        const notPset = setDifference(fullSet, Pset[colIndex]);\n        if (notPset.length === 0) {\n            Jset.push(colIndex);\n        }\n        else if (W.selection(notPset, [colIndex]).max() <= gradientTolerance) {\n            Jset.push(colIndex);\n        }\n    }\n    Fset = setDifference(Fset, Jset);\n    // For non-optimal solutions, add the appropriate variables to Pset\n    if (Fset.length !== 0) {\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (Pset[Fset[j]].includes(i))\n                    W.set(i, Fset[j], -Infinity);\n            }\n            Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n        }\n        for (const colIndex of Fset) {\n            D.setColumn(colIndex, K.getColumn(colIndex));\n        }\n    }\n    for (let j = 0; j < p; j++) {\n        Pset[j].sort((a, b) => a - b);\n    }\n    return { Pset, Fset, W };\n}\n//# sourceMappingURL=optimality.js.map","/**\n * Returns a new array based on extraction of specific indices of an array\n * @param collection or array\n * @param indices\n */\nexport default function selection(vector, indices) {\n    const u = []; //new Float64Array(indices.length);\n    for (let i = 0; i < indices.length; i++) {\n        u[i] = vector[indices[i]];\n    }\n    return u;\n}\n//# sourceMappingURL=selection.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\nimport { initialisation } from './initialisation';\nimport { optimality } from './optimality';\nimport selection from './util/selection';\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param X\n * @param Y\n * @param options\n * @returns Solution Matrix.\n */\nexport default function fcnnls(X, Y, options = {}) {\n    X = Matrix.checkMatrix(X);\n    Y = Matrix.checkMatrix(Y);\n    const init = initialisation(X, Y);\n    const { l, p, XtX, XtY, K, D } = init;\n    let { iter, W, Pset, Fset } = init;\n    const { maxIterations = X.columns * 3, gradientTolerance = 1e-5 } = options;\n    // Active set algorithm for NNLS main loop\n    while (Fset.length > 0) {\n        // Solves for the passive variables (uses subroutine below)\n        let L = cssls(XtX, XtY.subMatrixColumn(Fset), selection(Pset, Fset), l, Fset.length);\n        for (let i = 0; i < l; i++) {\n            for (let j = 0; j < Fset.length; j++) {\n                K.set(i, Fset[j], L.get(i, j));\n            }\n        }\n        // Finds any infeasible solutions\n        const infeasIndex = [];\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (L.get(i, j) < 0) {\n                    infeasIndex.push(j);\n                    break;\n                }\n            }\n        }\n        let Hset = selection(Fset, infeasIndex);\n        // Makes infeasible solutions feasible (standard NNLS inner loop)\n        if (Hset.length > 0) {\n            let m = Hset.length;\n            const alpha = Matrix.ones(l, m);\n            while (m > 0 && iter < maxIterations) {\n                iter++;\n                alpha.mul(Infinity);\n                // Finds indices of negative variables in passive set\n                const hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n                const negRowColIdx = [[], []]; // Same as before\n                for (let j = 0; j < m; j++) {\n                    for (const item of Pset[Hset[j]]) {\n                        if (K.get(item, Hset[j]) < 0) {\n                            hRowColIdx[0].push(item); // i\n                            hRowColIdx[1].push(j);\n                            negRowColIdx[0].push(item); // i\n                            negRowColIdx[1].push(Hset[j]);\n                        } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n                    }\n                }\n                for (let k = 0; k < hRowColIdx[0].length; k++) {\n                    // could be hRowColIdx[1].length as well\n                    alpha.set(hRowColIdx[0][k], hRowColIdx[1][k], D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n                        (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n                            K.get(negRowColIdx[0][k], negRowColIdx[1][k])));\n                }\n                let alphaMin = [];\n                const minIdx = [];\n                for (let j = 0; j < m; j++) {\n                    alphaMin[j] = alpha.minColumn(j);\n                    minIdx[j] = alpha.minColumnIndex(j)[0];\n                }\n                alphaMin = Matrix.rowVector(alphaMin);\n                for (let i = 0; i < l; i++) {\n                    alpha.setSubMatrix(alphaMin, i, 0);\n                }\n                let E = new Matrix(l, m);\n                E = D.subMatrixColumn(Hset).subtract(alpha\n                    .subMatrix(0, l - 1, 0, m - 1)\n                    .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))));\n                for (let j = 0; j < m; j++) {\n                    D.setColumn(Hset[j], E.subMatrixColumn([j]));\n                }\n                const idx2zero = [minIdx, Hset];\n                for (let k = 0; k < m; k++) {\n                    D.set(idx2zero[0][k], idx2zero[1][k], 0);\n                }\n                for (let j = 0; j < m; j++) {\n                    Pset[Hset[j]].splice(Pset[Hset[j]].findIndex((item) => item === minIdx[j]), 1);\n                }\n                L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n                for (let j = 0; j < m; j++) {\n                    K.setColumn(Hset[j], L.subMatrixColumn([j]));\n                }\n                Hset = [];\n                for (let j = 0; j < K.columns; j++) {\n                    for (let i = 0; i < l; i++) {\n                        if (K.get(i, j) < 0) {\n                            Hset.push(j);\n                            break;\n                        }\n                    }\n                }\n                m = Hset.length;\n            }\n        }\n        const newParam = optimality(iter, maxIterations, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance);\n        Pset = newParam.Pset;\n        Fset = newParam.Fset;\n        W = newParam.W;\n    }\n    return K;\n}\n//# sourceMappingURL=fcnnls.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\n/**\n * Solves as std linear squares,\n * and overwrites the negative values of K with 0 as an initial guess for K,\n * It also precomputes part of the pseudoinverse used to solve Least Squares.\n * @param - X input data matrix\n * @param - Y output data matrix\n * @returns - initial values for the algorithm (including the solution K to least squares, overwriting of negative values with 0)\n */\nexport function initialisation(X, Y) {\n    // X = n x l\n    // W = l x p, same as K\n    // Y = n x p\n    const n = X.rows;\n    const l = X.columns;\n    const p = Y.columns;\n    const iter = 0;\n    if (Y.rows !== n)\n        throw new Error('ERROR: matrix size not compatible');\n    const W = Matrix.zeros(l, p);\n    // precomputes part of pseudoinverse\n    const XtX = X.transpose().mmul(X);\n    const XtY = X.transpose().mmul(Y);\n    const K = cssls(XtX, XtY, null, l, p); // K is lxp\n    /* Each subarray corresponds to col of K\n     * And stores indices of positive values of that column\n     */\n    const Pset = [];\n    for (let j = 0; j < p; j++) {\n        Pset[j] = [];\n        for (let i = 0; i < l; i++) {\n            if (K.get(i, j) > 0) {\n                Pset[j].push(i); // [[1,2,3...,l],[1,2,4,7,..,l],[],..] p arrays, each length l or less\n            }\n            else {\n                K.set(i, j, 0);\n            } // This is our initial solution, it's the solution found by overwriting the unconstrained least square solution in K.\n        }\n    }\n    const Fset = [];\n    for (let j = 0; j < p; j++) {\n        if (Pset[j].length !== l) {\n            Fset.push(j); // If column j of K was not all positive, add it to the Fset. So Fset are the indices of columns with negative values\n        }\n    }\n    const D = K.clone();\n    return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n//# sourceMappingURL=initialisation.js.map","import { Matrix } from 'ml-matrix';\nimport fcnnls from './fcnnls';\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param X - input data matrix\n * @param y - output data vector\n * @param options - for maxIterations\n * @returns Solution vector.\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n    if (!Array.isArray(y)) {\n        throw new TypeError('y must be a 1D Array');\n    }\n    const Y = Matrix.columnVector(y);\n    const K = fcnnls(X, Y, options);\n    const k = K.to1DArray();\n    return k;\n}\n//# sourceMappingURL=fcnnlsVector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitMatrix = splitMatrix;\nfunction splitMatrix(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const { nonZeroColumns, nonZeroRows } = createMatrixIndexes(matrix);\n    const rowsMapping = new Int32Array(nbRows).fill(-1);\n    const columnsMapping = new Int32Array(nbColumns).fill(-1);\n    const matrices = [];\n    let currentMappingID = 0;\n    for (let row = 0; row < matrix.length; row++) {\n        for (let column of nonZeroColumns[row]) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            if (rowsMapping[row] !== -1) {\n                continue;\n            }\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            currentMappingID++;\n            const result = { rows: [], columns: [] };\n            matrices.push(result);\n            processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result);\n        }\n    }\n    appendSubMatrix(matrices, matrix);\n    return matrices;\n}\nfunction appendSubMatrix(matrices, matrix) {\n    for (const entry of matrices) {\n        const submatrix = new Array(entry.rows.length)\n            .fill(0)\n            .map(() => new Float64Array(entry.columns.length));\n        for (let i = 0; i < entry.rows.length; i++) {\n            for (let j = 0; j < entry.columns.length; j++) {\n                submatrix[i][j] = matrix[entry.rows[i]][entry.columns[j]];\n            }\n        }\n        entry.submatrix = submatrix;\n    }\n}\nfunction processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result) {\n    const rowsTodo = [row];\n    let nextRow;\n    while ((nextRow = rowsTodo.pop()) !== undefined) {\n        result.rows.push(nextRow);\n        for (let column of nonZeroColumns[nextRow]) {\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            rowsMapping[nextRow] = currentMappingID;\n            columnsMapping[column] = currentMappingID;\n            result.columns.push(column);\n            for (let internalRow of nonZeroRows[column]) {\n                if (rowsMapping[internalRow] === -1) {\n                    if (!rowsTodo.includes(internalRow)) {\n                        rowsTodo.push(internalRow);\n                    }\n                    continue;\n                }\n                if (rowsMapping[internalRow] !== currentMappingID) {\n                    throw new Error('This should not happen');\n                }\n            }\n        }\n    }\n}\nfunction createMatrixIndexes(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const nonZeroColumns = new Array(nbRows).fill(0).map(() => []);\n    const nonZeroRows = new Array(nbColumns).fill(0).map(() => []);\n    for (let row = 0; row < nbRows; row++) {\n        for (let column = 0; column < nbColumns; column++) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            nonZeroColumns[row].push(column);\n            nonZeroRows[column].push(row);\n        }\n    }\n    return { nonZeroColumns, nonZeroRows };\n}\n//# sourceMappingURL=splitMatrix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.blockFcnnls = blockFcnnls;\nconst ml_fcnnls_1 = require(\"ml-fcnnls\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst splitMatrix_js_1 = require(\"./splitMatrix.js\");\nfunction blockFcnnls(fullMatrix) {\n    const target = fullMatrix[0];\n    const originalMatrix = fullMatrix.slice(1);\n    const matrix = [];\n    const emptyRow = new Float64Array(originalMatrix[0].length);\n    row: for (const row of originalMatrix) {\n        for (let i = 0; i < row.length; i++) {\n            if (row[i] !== 0 && target[i] !== 0) {\n                matrix.push(row);\n                continue row;\n            }\n        }\n        matrix.push(emptyRow);\n    }\n    // if there is no match with first spectrum we just ignore this entry\n    const matrices = (0, splitMatrix_js_1.splitMatrix)(matrix);\n    appendTarget(matrices, target);\n    const weights = new Float64Array(matrix.length);\n    const reconstructed = new Float64Array(target.length);\n    for (const entry of matrices) {\n        const A = new ml_matrix_1.Matrix(entry.submatrix);\n        const At = A.transpose();\n        const b = Array.from(entry.target); // target\n        const w = (0, ml_fcnnls_1.fcnnlsVector)(At, b);\n        const W = new ml_matrix_1.Matrix([w]); // weights\n        const partialReconstructed = W.mmul(A).getRow(0);\n        for (let i = 0; i < entry.columns.length; i++) {\n            reconstructed[entry.columns[i]] = partialReconstructed[i];\n        }\n        for (let i = 0; i < entry.rows.length; i++) {\n            weights[entry.rows[i]] = w[i];\n        }\n    }\n    return {\n        reconstructed,\n        weights,\n    };\n}\nfunction appendTarget(matrices, target) {\n    for (const entry of matrices) {\n        entry.target = [];\n        for (let column of entry.columns) {\n            entry.target.push(target[column]);\n        }\n    }\n}\n//# sourceMappingURL=blockFcnnls.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsDeconvolution = mfsDeconvolution;\nconst uuid_1 = require(\"@lukeed/uuid\");\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst getPeakWidthFct_1 = require(\"./getPeakWidthFct\");\nconst blockFcnnls_js_1 = require(\"./utils/blockFcnnls.js\");\n/**\n *\n * @param {import('ms-spectrum').Spectrum} spectrum\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {string[]}      [options.customMFs={}] - An array of MFs to add to the list generated by ranges\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.threshold=0.001]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number}        [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {boolean}       [options.filter.allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @param {string}        [options.filterFct]\n */\nasync function mfsDeconvolution(spectrum, ranges, options = {}) {\n    if (!spectrum || !spectrum.getPeaks || !spectrum.getPeaks()) {\n        throw new Error('spectrum must be an instance of Spectrum');\n    }\n    const { customMFs = [], mass: massOptions = {}, filter, ionizations, logger, } = options;\n    const { threshold = 0.001 } = massOptions;\n    if (!ionizations) {\n        logger?.warn('No ionizations provided this could be an error if the molecule is not naturally charged.');\n    }\n    const peakWidthFct = (0, getPeakWidthFct_1.getPeakWidthFct)(options);\n    const centroids = getCentroids(spectrum, { threshold });\n    let mfs = await (0, mf_generator_1.generateMFs)(ranges, { filter, ionizations });\n    if (customMFs.length > 0) {\n        const newMFs = await (0, mf_generator_1.generateMFs)([customMFs], { filter, ionizations });\n        mfs = mfs.concat(newMFs);\n    }\n    for (const mf of mfs) {\n        mf.id = (0, uuid_1.v4)();\n    }\n    mfs = addIsotopicDistributionAndCheckMF(mfs, { logger, peakWidthFct });\n    mfs.sort((mf1, mf2) => mf1.ms.em - mf2.ms.em);\n    const combined = buildCombined(centroids, mfs, { peakWidthFct });\n    if (!hasOverlap(combined.ys)) {\n        throw new Error('Could not find any overlaping peaks between experimental and theoretical spectra.');\n    }\n    const { weights, reconstructed } = (0, blockFcnnls_js_1.blockFcnnls)(combined.ys);\n    const relativeIntensity = (0, ml_spectra_processing_1.xNormed)(weights);\n    for (let i = 0; i < mfs.length; i++) {\n        mfs[i].absoluteQuantity = weights[i];\n        mfs[i].relativeQuantity = relativeIntensity[i];\n        mfs[i].distribution.y = mfs[i].distribution.y.map((y) => y * weights[i]);\n    }\n    let matchingScore = 0;\n    const difference = [];\n    for (let i = 0; i < combined.ys[0].length; i++) {\n        matchingScore += Math.min(combined.ys[0][i], reconstructed[i]);\n        difference.push(combined.ys[0][i] - reconstructed[i]);\n    }\n    matchingScore = matchingScore / (0, ml_spectra_processing_1.xSum)(combined.ys[0]);\n    let A;\n    let W;\n    return {\n        reconstructed: {\n            x: combined.x,\n            y: reconstructed,\n        },\n        difference: {\n            x: combined.x,\n            y: difference,\n        },\n        mfs: mfs\n            .slice()\n            .toSorted((mf1, mf2) => mf2.absoluteQuantity - mf1.absoluteQuantity),\n        matchingScore,\n        getFilteredReconstructed,\n    };\n    function getFilteredReconstructed(ids = mfs.map((mf) => mf.id)) {\n        if (!A)\n            A = new ml_matrix_1.Matrix(combined.ys.slice(1));\n        if (!W)\n            W = new ml_matrix_1.Matrix([weights]);\n        let wClone = W;\n        if (ids.length !== W.length) {\n            wClone = W.clone();\n            for (let i = 0; i < mfs.length; i++) {\n                if (ids.includes(mfs[i].id))\n                    continue;\n                wClone.set(0, i, 0);\n            }\n        }\n        const filteredReconstructed = wClone.mmul(A).getRow(0);\n        return {\n            x: combined.x,\n            y: filteredReconstructed,\n        };\n    }\n}\n/**\n *\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.threshold=0.001]\n */\nfunction getCentroids(spectrum, options = {}) {\n    const { threshold = 0.001 } = options;\n    const peaks = spectrum.getPeaks({\n        threshold,\n    });\n    return {\n        x: peaks.map((peak) => peak.x),\n        y: peaks.map((peak) => peak.y),\n    };\n}\nfunction addIsotopicDistributionAndCheckMF(mfs, options) {\n    const { logger, peakWidthFct } = options;\n    for (let mf of mfs) {\n        const isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(mf.mf, {\n            fwhm: peakWidthFct(mf.ms.em), // when should we join peaks\n            ionizations: mf.ms.ionization,\n        });\n        mf.distribution = isotopicDistribution.getXY({ sumValue: 1 });\n        if (mf.distribution.y.length === 0) {\n            logger?.warn(`Problem with isotopic distribution calculation. Negative number of atoms ? ${mf.mf} ${mf.ms.ionization}`);\n        }\n    }\n    mfs = mfs.filter((mf) => mf.distribution.x.length > 0);\n    if (mfs.length === 0) {\n        throw new Error('No MF found. Did you forget ionization ?');\n    }\n    return mfs;\n}\nfunction buildCombined(centroids, mfs, options = {}) {\n    const { peakWidthFct } = options;\n    if (!peakWidthFct) {\n        throw new Error('peakWidthFct is mandatory');\n    }\n    const data = [centroids];\n    for (const mf of mfs) {\n        data.push(mf.distribution);\n    }\n    // We align all the spectra to the first one, but if some values (X) are missing, we will add them.\n    return (0, ml_spectra_processing_1.xyArrayAlignToFirst)(data, {\n        delta: peakWidthFct,\n    });\n}\n/**\n * We will check if there is any overlap between the theoretical and experimental spectra\n * @param {number[][]} ys\n */\nfunction hasOverlap(ys) {\n    for (let i = 0; i < ys[0].length; i++) {\n        for (let j = 1; j < ys.length; j++) {\n            if (ys[0][i] > 0 && ys[j][i] > 0) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=mfsDeconvolution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstruct = reconstruct;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Reconstruct a mass spectrum from a set of molecular formulas\n * that has the  distribution property\n * @param {object[]} mfs\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n */\nconst getPeakWidthFct_js_1 = require(\"./getPeakWidthFct.js\");\nfunction reconstruct(mfs, options = {}) {\n    const delta = (0, getPeakWidthFct_js_1.getPeakWidthFct)(options);\n    const data = mfs.map((mf) => mf.distribution);\n    const reconstructed = (0, ml_spectra_processing_1.xyArrayWeightedMerge)(data, { delta });\n    return reconstructed;\n}\n//# sourceMappingURL=reconstruct.js.map","import * as EMDBPkg from 'emdb';\nimport * as SpectrumPkg from 'ms-spectrum';\n\nexport { groups, groupsObject } from 'chemical-groups';\nexport { elements, elementsObject } from 'chemical-elements';\nexport { IsotopicDistribution } from 'isotopic-distribution';\n\nEMDBPkg.EMDB.massShifts = EMDBPkg.massShifts;\nEMDBPkg.EMDB.prototype.massShifts = EMDBPkg.massShifts;\nexport const EMDB = EMDBPkg.EMDB;\n\nSpectrumPkg.Spectrum.JsGraph = SpectrumPkg.JsGraph;\nSpectrumPkg.Spectrum.prototype.JsGraph = SpectrumPkg.JsGraph;\nexport const Spectrum = SpectrumPkg.Spectrum;\nexport const MSComparator = SpectrumPkg.MSComparator;\nexport const getBestPeaks = SpectrumPkg.getBestPeaks;\n\nexport { MF, ensureCase } from 'mf-parser';\nexport {\n  MFRange,\n  getRangesForFragment,\n  preprocessIonizations,\n  preprocessRanges,\n} from 'mf-utilities';\nexport { generateMFs } from 'mf-generator';\n\nexport { atomSorter } from 'atom-sorter';\nexport { mfFromEA } from 'mf-from-ea';\nexport { mfFromAtomicRatio } from 'mf-from-atomic-ratio';\nexport {\n  ActiveOrNaturalSummarizer,\n  OctoChemDB,\n  createTaxonomyTree,\n} from 'octochemdb';\nexport * as MassFragmentation from 'mass-fragmentation';\nexport * as Report from 'ms-report';\nexport * as MFSDeconvolution from 'mfs-deconvolution';\nexport * as Nucleotide from 'nucleotide';\nexport * as Peptide from 'peptide';\n"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","reimAbsolute","data","options","length","re","output","Float64Array","im","i","Math","hypot","getOutputArray","undefined","TypeError","xAbsolute","array","tmpArray","slice","xMedian","input","exact","fromIndex","toIndex","middleIndex","calcMiddle","median","quickSelect","low","high","middle","currentLow","currentHigh","swap","j","temp","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","from","to","xAdd","array1","array2","isConstant","constant","array3","xCheckLengths","xDotProduct","A","B","result","xCrossCorrelation","tau","lag","n","g","q","k","w","l","getSortedFloat64","sort","isNaN","at","xBoxPlot","boxPlotFromSorted","min","max","EPSILON","shortTestNumber","String","q1","q3","posQ1","posQ3","medianPos","q1MinProportion","q3MinProportion","medianMinProportion","xBoxPlotWithOutliers","boxPlotWithOutliersAndBounds","boxPlot","boxPlotWithOutliersFromSorted","lowerWhisker","upperWhisker","minWhisker","maxWhisker","iqr","outliers","bounds","lowIndex","highIndex","getWhiskerBounds","push","xCorrelation","sumA","sumA2","sumB","sumB2","sumAB","a","b","sqrt","CholeskyDecomposition","matrix","LuDecomposition","Matrix","inverse","solve","absDiff","xCumulative","newArray","xMean","sumValue","xVariance","values","unbiased","mean","sqrError","xStandardDeviation","xEnsureFloat64","xEqualIntegrationVectorSimilarity","recenter","similarityFct","depth1","getDepth","depth2","depth","similarity","level","maxSimilarity","slot","value1","value2","shiftSubtree","shift","currentLevel","levelSlotShift","levelShift","levelSlotSize","slotIndex","log2","xGetTargetIndex","targetIndex","FFT","size","this","_csize","table","Array","angle","PI","cos","sin","power","t","_width","_bitrev","revShift","_out","_data","_inv","fft","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","outOff","step","len","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","SFAr","SFAi","SFBr","SFBi","SA","SB","fftCache","maxSize","instances","Map","constructor","isInteger","RangeError","clear","get","set","getFFT","createNumberArray","ArrayConstructor","fill","createDoubleArray","createFromToArray","includeFrom","includeTo","distribution","div","delta","base","firstExponent","log","FLOAT_MUL","multiplyUint32","m","nlo","XSadd","random","state","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","createRandomArray","standardDeviation","range","generator","returnArray","gaussianGenerator","GaussianGenerator","generateGaussian","spare","hasSpare","val","u","v","s","isPowerOfTwo","nextPowerOfTwo","appendPromises","object","promises","key","then","modifier","ArrayBuffer","isView","xSubtract","calculateAdaptiveWeights","yData","baseline","weights","controlPoints","factorStd","learningRate","absResiduals","mad","threshold","rawWeights","exp","oneMinusLearningRate","weight","cleanCyclicObject","removeProperty","visitedObjects","WeakMap","recursiveClean","parent","parentKey","isObject","has","Reflect","ownKeys","isEmpty","deleteProperty","isArray","arrayElement","removeEmptyArrayAndObject","splice","test","repr","arg","isUndefined","isNull","isString","keys","hilbertTransformWithFFT","hilbertSignal","resampling","oldLength","ratio","currentIndex","ceil","xMaxValue","maxValue","xMinValue","minValue","xHistogram","histogram","centerX","nbSlots","logBaseX","logBaseY","absolute","logOfBase","log10","slotSize","y","element","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","xMaxAbsoluteValue","xMedianAbsoluteDeviation","averageDeviations","xMinMaxValues","xMultiply","simpleNormInvMagnitude","P1","Q1","P2","Q2","P3","Q3","P4","Q4","P5","Q5","polyval","c","p","coef","calc","P","Q","Y","simpleNormInvRaw","SQRT2","r","sign","NaN","NEGATIVE_INFINITY","erfcinv","xNoiseSanPlot","mask","cutOffFromPositive","refine","magnitudeMode","scaleFactor","fixOffset","filter","_e","reverse","prepareData","medianIndex","firstNegativeValueIndex","findIndex","e","lastPositiveValueIndex","signPositive","signNegative","createNegativeSign","skyPoint","cutOff","determineCutOff","noiseLevelPositive","calculateNoiseLevel","positive","negative","snr","sanplot","generateSanPlot","fromTo","simpleNormInvValue","cutOffDist","noiseLevel","cloneSign","cutOffSignalsIndex","cutOffSignals","considerList","inverseQuantileFn","indexMax","sigmaEstimates","quantileFraction","sigma","round","halfWindow","bestVariance","bestQuantileFraction","windowCenter","windowFloor","windowTop","count","sum","absSigma","meanSigma","variance","scale","xNoiseStandardDeviation","sd","xNorm","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","factor","sumFactor","xPadding","fromEnd","toEnd","xRolling","fct","window","padding","padded","subarray","xRollingAverage","xRotate","xSequentialFillFromStep","parameters","xSortDescending","matrixClone","map","row","matrixCreateEmpty","nbRows","nbColumns","newMatrix","matrixCheck","firstLength","matrixCholeskySolver","nonZerosArray","dimension","permutationEncoded","pinv","Int32Array","mt","ar","ac","nnz","ap","ai","ax","lnz","idx","colOffset","col","adr","d","lp","lnzArray","flag","pattern","bp1","apLoc","aiLoc","parentLoc","lnzLoc","flagLoc","kk","p2","ldlSymbolic","nz","lx","li","axLoc","lpLoc","liLoc","lxLoc","dLoc","yLoc","patternLoc","yi","lKi","top","p2col","ldlNumeric","perm","xLoc","bLoc","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","matrixCuthillMckee","list","adj","visited","toVisit","eol","ptr","nbhd","matrixCheckRanges","boundaries","startRow","endRow","startColumn","endColumn","matrixMinMaxAbsoluteZ","column","matrixMinMaxZ","matrixMaxAbsoluteZ","matrixToArray","flatten","currentRow","addWeights","leftHandSide","rightHandSide","nbPoints","newLeftHandSide","newRightHandSide","diag","next","xWhittakerSmoother","restOptions","lambda","maxIterations","getWeightsAndControlPoints","prevBaseline","baseDiag","lower","upper","main","rhs","solution","workC","workD","iteration","Infinity","solveTridiagonalFloat64","calculateDelta","whittakerByThomas","upperTriangularNonZeros","permutationEncodedArray","last","createSystemMatrix","cho","newBaseline","whittakerByCholesky","xWhitakerSmoother","cp","dp","cprime","dprime","denom","reimPhaseCorrection","phi0","phi1","inPlace","isFinite","outRe","outIm","firstAngle","alpha","beta","cosTheta","sinTheta","ii","newSinTheta","determiningGlobalValues","ph0Values","ph0","ph1","sxtw","swx","sw","sxtwy","swy","detMx","inMx","weightedLinearRegression","maxDiff","MIN_SAFE_INTEGER","predictedPh0","autoPhaseRegion","x0","start","stop","maxSteps","bestAng","minArea","dAng","negArea","getNegArea","toRadians","phased","area","sumX","robustBaseLineRegionsDetection","maxDistanceToJoin","factorNoise","Uint8Array","change","prev","degree","zeroShift","reimZeroFilling","totalLength","newRE","newIM","xyCheck","xyMaxYPoint","current","STEPS","getCumulativeDensity","beginX","endX","firstX","lastX","getBoundaries","integral","previousIndex","evaluateCumulative","cumulative","lastIndex","startX","startY","width","targetY","findFraction","zonesNormalize","zones","exclusions","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","results","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","unitsPerPoint","reduce","previous","currentTotal","tempZone","tempZoneNumberOfPoints","x1","slope","intercept","getSlope","y0","y1","processZone","variant","xLength","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","equallySpacedSlot","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","add","equallySpacedSmooth","xyJoinX","deltaIsFunction","position","notEnoughPoints","internalZones","totalPoints","newX","newY","getInternalZones","xySortX","floatX","floatY","xyObject","response","xyUniqueX","isSorted","cumulativeY","divider","average","getSlots","possibleXs","flatMap","currentSlot","number","slots","currentDelta","xyArrayWeightedMerge","deltaNumber","positions","point","nextValue","maxX","sumY","sumXY","minIndex","minX","currentX","xyObjectCheck","points","xyObjectMaxXPoint","xyObjectMinXPoint","backtrack","pop","targetMin","targetMax","clamp","algorithmOptions","originalMin","originalMax","convert","kind","getDataConverter","originalRange","targetRange","checkRange","matrixInitial","dictionary","arrayOfValues","targetArray","sourceArray","info","columnArray","q1max","q3min","middleOver","transpose","rows","correlation","getRow","duplicate","subMatrix","fftResult","minMax","xHistogramOptions","finalHistogram","invertedDictionary","ret","nRows","nColumns","dictCategoricalToNumerical","matrixB","normalizationFactor","getRowVector","norm","setRow","referenceSpectrum","columns","currentVariable","getColumn","medianOfQuotients","quotients","getColumnVector","mulRow","to2DArray","currentMin","currentMax","propertiesToRemove","otherOptions","async","Promise","all","applyZeroShift","csize","complexArray","source","minRegSize","finalPeaks","magnitudeData","peaksDs","dk","holoborodko","peaksSp","sp","detectBaselineRegions","indexMask","counter","reTmp","imTmp","newRe","newIm","numRows","resultRe","resultIm","reRow","imRow","numColumns","colRe","colIm","direction","replacer","space","JSON","stringify","internalReplacer","variableLabel","fctString","Function","replaceAll","toReturn","binSize","keepFirstAndLast","innerLength","innerBins","end","binByNumberOfPoints","effectiveBinSize","innerBinCount","outputLength","rowsArray","columnsArray","nb","forceFFT","inClockwise","aSum","cSum","hilbertTransform","maxIndex","sumWeights","minDelta","maxDelta","maxCount","counts","sqrtSD","higherWhisker","filteredArray","downSampling","unique","Set","toReversed","deltaX","xy2","xyValue","data1","data2","common","y2","length1","length2","difference","requiredY","ys","newYs","every","filterRequiredY","firstXs","otherXs","currentPosition","firstSlotCount","getSlotsToFirst","meanX","meanY","error","cumulativeSum","maxY","x25","x50","x75","x100","xMode","currentStep","breakPoint","prevX","total","fraction","zonesWithPointsRes","xResult","yResult","zoneResult","concat","loop","minRelativeYValue","nbPeaks","descending","nbThreshold","currentZoneIndex","numberMaxPoints","xyIntegration","currentxyIntegral","currentxyIntegration","xTarget","sparseIndex","targetX","leftIdx","rightIdx","sumYs","sumProducts","weightedIntegral","firstIntegration","totalIntegration","totalWeightedIntegral","currentIntegration","lastIntegration","getWeightedIntegral","endIndexes","beginIndexes","currentBeginIndex","currentEndIndex","nextIndex","xyMaxY","groupWidth","merged","maxAbscissa","currentxyMaxY","maxima","startEqualIndex","cumSumY","windowSize","xValues","centerIndex","centroids","mergedPoints","originalIndex","mergedIndex","minY","numberCloseSlots","numberSlots","closeSlot","selected","peakLoop","item","close","existing","newPeak","xError","structuredClone","normalizedYs","slotWidth","halfSlot","entry","multiplier","newDiff","after","before","inflectionBefore","inflectionAfter","extrema","inflectionMiddle","gamma","optimize","appendFromTo","zoneNbPoints","first","maxApproximateNbPoints","internalZone","maxNbPoints","currentY","radius","shifted","yCenters","fromX","toX","yShift","currentMinYShift","objectArray","weightedAbscissa","zoneXValues","ensureString","blob","encoding","TextDecoder","decode","uint8","buffer","byteOffset","byteLength","fatal","decodeText","parse","text","rescale","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","lines","split","line","trim","fields","parseFloat","replace","skipFirstColumn","currentFirst","nextFirst","xs","yValues","peaks","searchMonoisotopicRatio","ml_spectra_processing_1","peak","monoisotopic","toSorted","nextItem","getChargeClusters_1","getChargeClusters","clusters","buildClusters","cluster","clusterPeaks","indexes","charge","charges","Int8Array","free","minCharge","maxCharge","precision","masses","byIntensity","claimed","NEUTRON_MASS","expected","spacing","isOnPosition","series","intensity","defineProperty","elementsAndIsotopes","nominal","mass","abundance","symbol","name","monoisotopicMass","elements","elementsAndIsotopes_js_1","require$$0","exports","elementsAndIsotopesObject","elementsAndStableIsotopes","elementsAndStableIsotopesObject","elementsObject","isotopesObject","elementsAndIsotopesObject_js_1","entries","isotope","isotopes","stableIsotopesObject","mostAbundant","unsaturationsObject","O","N","H","Na","K","Li","Ca","F","Si","Cl","I","ensureUppercaseSequence_1","ensureUppercaseSequence","sequence","parts","part","currentSymbol","startsWith","match","toUpperCase","groupsObject","groups_1","groups","forEach","mf","groupsObject_js_1","oneLetter","usefulParts","Kind","BEGIN","ATOM","MULTIPLIER_RANGE","ISOTOPE","ISOTOPE_RATIO","CHARGE","SALT","OPENING_PARENTHESIS","CLOSING_PARENTHESIS","PRE_MULTIPLIER","MULTIPLIER","TEXT","parseCharge_1","parseCharge","chargeNumber","charAt","parse_1","atom_sorter_1","chemical_elements_1","require$$1","chemical_groups_1","require$$2","Kind_1","require$$3","MFParser","expandGroups","simplify","lastKind","char","ascii","charCodeAt","nextAscii","getNumber","MFError","ANCHOR","getAtom","getParenthesisCharge","getIsotope","isotopeRatio","getCurlyBracketIsotopeRatio","lastResult","atom","getNonParenthesisCharge","COMMENT","checkParenthesis","parsed","multipliers","newParsed","realMultiplier","currentMultiplier","distinctParsedObject","atomA","atomB","atomSorter","fromCharCode","indexOfDash","indexOf","parseNumberWithDivision","expandedGroups","substring","begin","SyntaxError","message","super","repeat","string","subSuperscript","superscript","Format","SUBSCRIPT","SUPERSCRIPT","improveLinesForDisplay","Kind_js_1","beginCounter","endCounter","minCounter","nbParenthesisToSuppress","toSuppress","specialCases","Format_1","nbElectrons","improveLinesForDisplay_js_1","special","SUPERIMPOSE","over","formatCharge_js_1","formatCharge","under","join","isMF_1","isMF","Style","toHtml_1","toHtml","html","Style_1","SUPERIMPOSE_SUP_SUB","ensureCase_1","ensureCase","newPart","two","one","getMF","currents","comment","groupIdentical","currentPart","parenthesisLevel","comments","optimizeRanges","newParts","mfsObject","hasRange","createMFs","mfs","getIsotopeRatioInfo_1","getIsotopeRatioInfo","isotopesArray","ratios","normalize","getEA_1","getEA","addMass","isotopeRatioInfo","eas","getElements_1","getElements","addElement","find","newElement","getNumberOfIsotopologues","atoms","nbIsotopes","getNbCombinationsPerAtom","nbAtoms","partToAtoms_1","partToMF_1","partToMF","neutral","getInfoInternal_1","getInfoInternal","customUnsaturations","emFieldName","msemFieldName","oneResult","getProcessedPart","nbIsotopologues","getNumberOfIsotopologues_1","unsaturation","require$$4","require$$5","require$$6","partToAtoms","validUnsaturation","currentElement","getIsotopesInfo","isotopeKey","naturalDeltaNeutrons","deltaNeutrons","getDistribution","mostAbundantKey","partsToDisplay","partLine","toDisplay_js_1","partsToMF_1","partsToMF","expand","shouldExpandGroupsObject","createNewPart","previousKind","openingParenthesis","closingParenthesis","preMultiplier","postMultiplier","globalPartMultiplier","expandGroupsObject","group","expanded","Boolean","combineAtomsIsotopesCharges","calculateAndSortKeys","currentKey","getKey","stringComparator","prop","toText_1","toText","subSuperscript_1","subscript","MFInternal_1","MFInternal","flatten_1","getInfo_1","getIsotopesInfo_1","require$$7","partsToDisplay_1","require$$8","require$$9","toDisplay_1","require$$10","require$$11","toParts_1","require$$12","require$$13","flattenLimit","some","flattened","cache","displayed","toDisplay","toParts","getInfo","ea","isotopesInfo","toMF","MF_1","MF","internal","toCanonicText","parse_js_1","toHtml_js_1","getEutrophicationPotential_1","getEutrophicationPotential","mfString","mf_parser_1","nC","nO","nN","nP","thOD","nH","ep","mw","getMsem_1","getMsem","em","ELECTRON_MASS","allowNeutralMolecules","ionization","forceIonization","targetMass","realIonization","ms","ppm","getRangesForFragment_1","getRangesForFragment","ranges","newRanges","currentMF","possibilities","MFRange_1","MFRange","getRange","currentRange","isInRange","rangeIndex","rangeElement","targetElement","mfDiff_1","mfDiff","mfString1","mfString2","mf1","mf2","preprocessIonizations_1","preprocessIonizations","ionizationsString","ionizations","preprocessRanges_1","preprocessRanges","possibility","originalMinCount","originalMaxCount","currentMinCount","currentMaxCount","currentCount","currentMonoisotopicMass","currentCharge","currentUnsaturation","initialOrder","minInnerMass","maxInnerMass","minInnerCharge","maxInnerCharge","minMass","maxMass","innerCharge","isGroup","innerPossibility","ladders","minRelativeIntensity","preprocessedIonizations","mf_utilities_1","xyObjectMaxYPoint","significantPeaks","claim","relativeTolerance","anchor","best","members","growLadder","ladderPeaks","massSum","weightSum","buildLadders","ladder","assignLadderCharge","selectedPeaks","absoluteTolerance","localMass","predicted","significant","used","unsaturationMatcher_1","unsaturationMatcher","onlyInteger","onlyNonInteger","minMW","maxMW","minEM","maxEM","absoluteCharge","unsaturationMatcher_js_1","targetMasses","targetIntensities","minMSEM","maxMSEM","allowNegativeAtoms","callback","msInfo","getMsInfo","ionizationAtoms","atomKeys","TargetMassCache_1","TargetMassCache","allowNeutral","firstPossibility","currentMinCharge","currentMaxCharge","uniqueMFs","targetMassCache","advancedFilter","filterUnsaturation","fakeMinUnsaturation","fakeMaxUnsaturation","numberMFEvaluated","numberResults","orderMapping","currentIonization","getOrderMapping","currentAtom","previousAtom","theEnd","maxPosition","lastPosition","lastPossibility","initializePossibilities","isValid","unsaturationValue","isOdd","filterCharge","getMinMass","getMaxMass","getResult","mf_matcher_1","msemMatcher","newResult","ensureUniqueMF","updateCurrentAtom","setCurrentMinMax","bestCounts","previousEM","currentCounts","findMFs_1","findMFs","mfIncluded","targetEM","findMFsSync_js_1","findMFsSync","mf_finder_1","getFragmentPeaks","mfInfo","getPeaks_js_1","getPeaks","fromMonoisotopicMass_1","fromMonoisotopicMass","getMassRemainder","minIntensity","maxClusteredFraction","clustered","getChargeClusters_js_1","getPeaksWithClusterCharge","clusteredWithCharge","withLadderCharge","clusteredFraction","getChargeLadders_js_1","getChargeLadders","peaksWithCharge","getChargeAtMass","getPeakChargeBySimilarity","getPeaksWithCharge_js_1","getPeaksWithCharge","getMinIntensity","minSignalToNoise","isContinuous","noise","maxDeltaRatio","relativeHeightThreshold","maxDeltaX","defaultMaxDeltaX","minHeight","minRadio","maxRatio","continuous","previousDelta","success","failed","deltaLimit","sgg","derivative","polynomial","console","warn","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","h","center","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","minDistance","possible","newLastIndex","currentDistance","getPeakFromIntervals","ddY","id","crypto","randomUUID","inflectionPoints","isLessAndGreaterThanZero","back","firstDerivative","crossDy","xGetCrossZeroPoints","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","getGaussianFactor","getData","shape","getGaussianData","calculateHeight","getParameters","dx","dFwhm","gaussianDerivative","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","erfinv","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","denominator","lorentzianDerivative","lorentzianQuantile","tan","halfResidual","LorentzianDispersive","lorentzianDispersiveFct","getLorentzianDispersiveData","lorentzianDispersiveDerivative","sqrtLn2","pGaussian","erf","pPseudoVoigt","mu","atan","pLorentz","PseudoVoigt","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","dMu","lorentz","dEdt","dLdt","dEdfwhm","dLdfwhm","pseudoVoigtDerivative","pTarget","tol","maxIter","lo","hi","it","mid","pseudoVoigtFindFactor","PseudoVoigtTCH","_fwhmG","_fwhmL","_fwhm","_mu","_lorentzianWidthFraction","fwhmG","fwhmL","lorentzianWidthFraction","effectiveFwhm","computeEffectiveWidth","lorentzianFraction","dFwhmG","dFwhmL","dFwhmDfwhmG","dFwhmDfwhmL","dPolyDfraction","dMuDfwhmG","dMuDfwhmL","denominator2","pseudoVoigtTCHDerivative","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","dGamma","lorentzian","rational","dFctDu","duDx","duDfwhm","generalizedLorentzianDerivative","generalizedLorentzianQuantile","Gaussian2D","fwhmX","fwhmY","ensureFWHM2D","gaussian2DFct","getGaussian2DData","volume","getVolume","calculateGaussian2DHeight","getGaussian2DVolume","ensureXYNumber","xFWHM","yFWHM","axis","xCenter","yCenter","sdObject","getShape1D","getShape2D","assert","buildOptimizationLayout","internalPeaks","yScale","peakIndex","internalPeak","parameter","actualIndex","peakId","propertiesValues","gradientDifference","getOptimizeFlag","buildParameterSlots","variables","linkedParameters","groupedActualIndices","slotLookup","idToIndices","getSlotKey","indices","linkedParameter","buildLinkedVariable","sortKey","offset","_sortKey","variable","buildOptimizationVariables","variableMin","variableMax","variableInit","variableGrad","freeIndices","variableToPeakValues","variableValues","actualValues","variableValue","member","resolvedMembers","resolvePeakIndexById","resolveLinkedSlot","getOffset","memberActualIndices","firstMember","sharedMin","sharedMax","sharedInitCandidates","variableBounds","getMemberVariableBounds","transformedMin","transformedMax","optimizeFlag","perPeakParam","globalParam","reconstructPeaks","newPeaks","DefaultParameters","peakShape","properties","getNormalizedValue","property","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","dataLength","getFiller","checkTimeout","endTime","getCheckTimeout","weightSquare","_","errorCalculation","parameterizedFunction","func","params","identity","eye","evaluatedData","gradientFunc","paramFunction","nbParams","zeros","rowIndex","param","auxParams","funcParam","funcParam2","gradientFunction","residualError","matrixFunction","inverseMatrix","mmul","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","mul","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","moveBack","vector","getMinIndex","functionValues","diagonalDistances","choiceLimit","bestCurrentValue","directOptimization","sumOfShapes","epsilon","tolerance2","initialState","objectiveFunction","getObjectiveFunction","lowerBoundaries","upperBoundaries","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","fCalls","smallerDistance","edgeSizes","differentDistances","smallerValuesByDistance","originalCoordinates","optimumValuesIndex","S3","S1","f","a1","b1","a2","S2","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","minFunctionValue","pair","finalState","minimizer","optima","direct","originalPeak","shapeFct","propertiesValuesInternal","propertyValue","generalParameterValue","defaultParameterValues","getInternalPeaks","normalizedY","optimizationLayout","optimizationOptions","selectMethod","optimization","baseSumOfShapes","shapeFctKey","totalY","peakX","getSumOfShapes","sumOfShapesForVariables","globalInit","getFixedParametersResult","gradientDifferences","sumOfShapesToUse","sumOfShapesForReduced","reducedParameters","full","fitted","fittedVariableValues","fittedValues","addMissingShape","defaultShapeInstance","hasShape","findBestCut","bestScore","candidates","score","balance","bestScored","candidate","groupPeaks","groupingFactor","maxNumberOfPeaks","sortedPeaks","previousPeak","currentGroup","cut","splitGroup","optimizePeaksWithLogs","peakList","factorLimits","logs","peakGroup","firstPeak","lastPeak","groupSize","time","optimizedPeaks","addMissingIDs","pushBackPeaks","broadLines","getGSDPeakOptimizedStructure","overlap","xFrom","xTo","mapPeaks","nextPeak","sgOptions","smoothY","maxCriteria","maxAbsoluteRatio","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","noiseInfo","maxAbsoluteValue","xValue","peakData","minddY","secondDerivative","lastJ","yIndex","autoAlgorithm","xCurrent","xPrevious","optimizeTop","broadWidth","broadRatio","maxI","maxDdy","absDdy","initialWidth","shapeInstance","peakPicking","xyEnsureGrowingX","gsdPeaks","ml_gsd_1","gsd","getNoiseLevel","noiseFactor","gsdPeak","checkArrayLength","BaseRegression","predict","_predict","xVal","train","toLaTeX","ySum","chi2","rmsd","xSquared","ySquared","xY","r2","maybeToPrecision","figures","toPrecision","SimpleLinearRegression","yObj","coefficients","numerator","regress","toJSON","computeX","xFactor","absIntercept","load","json","PowerRegression","pr","xl","yl","linear","newInputs","latex","peaksWidth_1","peaksWidth","widths","regression","ml_regression_power_1","regressionChart","fit","predictFct","tex","Spectrum_1","Spectrum","fromPeaks","is_any_array_1","xy_parser_1","peaksWidth_js_1","defaultData","Spectrum$1","enumerable","writable","clearCache","minMaxX","scaleY","rescaleX","ensureOriginalX","xOriginal","getPeakChargeBySimilarity_js_1","setIonizations","chargeLadders","peakPicking_js_1","getPeaksAsDataXY","MSComparator_1","normalizeAndCacheData","dataXY","xyFilterMinYValue","xyFilterTopYValues","returnSimilarity","aligned","massPower","intensityPower","minNbCommonPeaks","nbCommonPeaks","nbPeaks2","nbPeaks1","tanimoto","cosine","vector1","vector2","selectedMasses","xyArrayAlign","dataXY1","dataXY2","bestPeaks","numberDigits","showMF","numberMFs","mfPrefs","displayCharge","displayProperties","mfColors","color","annotations","annotation","type","_highlight","dy","props","rx","ry","fillOpacity","toFixed","textLine","labels","currentMfPrefs","numberOfMFS","getColor","jsgraph","JsGraph","appendFragmentsInfo","experimentalSpectrum","database","onStep","fragments","nbFound","intensityFound","assignments","possibleMFs","bestMF","lib","arguments","toSum","estimate","filterFct","canonizeMF","rawIonizations","filterFctVariables","sizes","evolution","appendResult","uniqueMFsObject","ems","getMonoisotopicMass","getEMFromParts","sum_object_keys_1","default","links","sharps","anchors","xAtomicNumber","getXAtomicNumber","molecule","OCL","getOCL","Molecule","getAtomicNoFromLabel","cPseudoAtomX","isCsp3","atomID","getAtomicNo","getAtomCharge","getImplicitHydrogens","getConnAtoms","makeRacemic","ensureHelperArrays","cHelperCIP","getAllAtoms","getAtomParity","cAtomParityNone","setAtomESR","cESRTypeAnd","tagAtom","iAtom","customLabel","getAtomLabel","setAtomCustomLabel","setAtomicNo","setAtomMass","getAtomMass","FULL_HOSE_CODE","getHoseCodesForAtomsAsFragments","allowedCustomLabels","minSphereSize","maxSphereSize","tagAtoms","tagAtomFct","rootAtoms","getCompactCopy","setAtomMapNo","cHelperNeighbours","mapping","getAtomMapNo","internalTagAtoms","getAtomCustomLabel","mappings","atomMask","atomList","sphere","rootAtom","newMax","getAllConnAtoms","connAtom","getConnAtom","fragment","copyMoleculeByAtoms","removeExplicitHydrogens","addQueryFeaturesAndRemoveMapNo","isAromaticAtom","setAtomQueryFeature","cAtomQFAromatic","cAtomQFNotAromatic","getAtomRingSize","cAtomQFRingSize3","cAtomQFRingSize4","cAtomQFRingSize5","cAtomQFRingSize6","cAtomQFRingSize7","cAtomQFRingSizeLarge","nbHydrogens","getAllHydrogens","cAtomQFNot0Hydrogen","cAtomQFNot1Hydrogen","cAtomQFNot2Hydrogen","cAtomQFNot3Hydrogen","ensureMapNo","existingMapNo","mapNo","nextMapNo","getCompactCopyWithoutCustomLabels","tempMolecule","getConnectivityMatrix","pathLength","atomicNo","negativeAtomicNo","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","getConnBond","isAromaticBond","adjMatrix","isMatrix","numVertices","distMatrix","apply","is","dist","floydWarshall","getEnantioIDs","topicMolecule","racemic","moleculeWithH","heterotopicSymmetryRanks","ids","rank","getCanonizedIDCode","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS","getHoseCodesForAtomsAsStrings","hoses","getChiralOrHeterotopicCarbons","internalMolecule","addImplicitHydrogens","cHelperSymmetryStereoHeterotopicity","getAtoms","getStereoBond","getNeighbourSymmetries","stereoBond","getAtomPreferredStereoBond","setBondType","cBondTypeUp","getBondAtom","setBondAtom","addPossibleChiralBonds","neighbourSymmetries","symmetryRank","getSymmetryRank","ensureHeterotopicChiralBonds","esrType","atLeastThreeAtoms","cHelperBitNeighbours","heterotopicCarbons","TopicMolecule","originalMolecule","idCode","maxPathLength","maxNbAtoms","logger","getIDCode","setAtomNoInMapNo","molecules","getHoseCodesForPath","minPathLength","toAtomicNo","fromAtomicNo","atomsPaths","fromAtom","fromDiaID","diaIDs","paths","pathOfSpecificLength","path","toAtom","toDiaID","getCanonizedHoseCodesForPath","getHoseFragment","sphereSize","getAtomPathsFrom","atomPaths","atomPathValue","atomPath","getAtomPaths","atom1","atom2","maxDistance","allAtomsPaths","oneAtomPaths","nextIndexes","nextAtoms","currentIndexes","currentAtoms","previousPath","conn","connectedAtom","getAllAtomsPaths","toMolfile","version","toMolfileV3","getMolecule","fromMolecule","canonizedDiaIDs","canonizedHoseCodes","prochiralityByEnantioID","getMoleculeWithH","xMolecule","xAtomNumber","getXMolecule","finalRanks","enantioIDs","getDiaIDsObject","groupDiastereotopicAtomIDsAsObject","hoseCodes","atomIDs","canonized","getCanonizedDiaIDs","diaID","getCanonizedHoseCodes","distanceMatrix","diaIDsAndInfo","newDiaIDs","newDiaID","attachedHydrogensIDCodes","attachedHydrogens","nbAttachedHydrogens","atomLabel","nbEquivalentAtoms","heavyAtom","atomMapNo","hydrogenDiaID","getDiaIDsAndInfo","symmetryRanks","getHeterotopicSymmetryRanks","getFinalRanks","toMolfileWithH","toMolfileWithoutH","atomsToDelete","getExplicitHydrogens","deleteAtoms","getGroupedDiastereotopicAtomIDs","groupDiastereotopicAtomIDs","prochiralities","hydrogens","nonHydrogenCount","connected","enantioID0","enantioID1","probe","cipParity","getAtomCIPParity","cAtomCIPParityRorM","cAtomCIPParitySorP","computeProchiralityByEnantioID","setProchiralHydrogenLabels","moleculeAtoms","letter","appendProchiralLabel","removeProchiralHydrogenLabels","stripTrailingProchiralLetter","getDiaIDsMapping","originalDiaIDs","destinationDiaIDs","destinationDiaID","originalDiaID","newIDCode","oldIDCode","oldHydrogenIDCode","newHydrogenIDCode","hydrogen","parentLabel","stripped","diaIDsObject","oclID","existingAtoms","heavyAtoms","customLabels","attachedHydrogensCustomLabels","heavyAtomsCustomLabels","heavyAtomCustomLabel","attachedHydrogenCustomLabel","diaIDObject","getSymmetryRanks","getDiastereotopicAtomIDs","numberAtoms","getDiastereotopicAtomIDsAndH","hydrogenOCLIDs","getHoseCodesForAtoms","maxLength","originalFrom","originalTo","originalAtoms","torsion","getPath","calculateTorsion","tag1","tag2","atomMap","getUnit","unit","markMonomer","addBond","firstAtomicNo","secondAtomicNo","checkEntity","nbR1","nbR2","r1AtomicNo","r2AtomicNo","getR1R2AtomicNo","r1Count","r2Count","cPseudoAtomsRGroups","applyFragmentLabels","prefix","suffix","sssearcher","SSSearcher","setMolecule","setFragment","found","findFragmentInMolecule","countMode","matches","getMatchList","fragmentAtomIndex","moleculeAtomIndex","label","autoLabelDatabase","coordinates","raw","appendMolecule","core","rGroups","newSmiles","smiles","currentMol","fromSmiles","toIsomericSmiles","combinedSmiles","molfile","MoleculeProperties","nbHAcceptor","acceptorCount","nbHDonor","donorCount","logP","logS","PSA","polarSurfaceArea","nbRottable","rotatableBondCount","nbStereoCenter","stereoCenterCount","getMolecularFormula","formula","relativeWeight","updateRPosition","rGroup","currentChar","currentSubstring","getCamelCase","parseColumnbProperties","columnProperties","currentColumnName","columnPropery","related","specialType","valueEhnhancer","header","rawEntry","atomMapping","idcoordinates2D","parseDefault","getAtomsInfo","cHelperRings","extra","singleBonds","doubleBonds","tripleBonds","aromaticBonds","cnoHybridation","abnormalValence","getAtomAbnormalValence","getAtomColor","radical","getAtomRadical","ringBondCount","getAtomRingBondCount","ringSize","getAtomX","getAtomY","z","getAtomZ","allHydrogens","connAtoms","allConnAtoms","implicitHydrogens","isAromatic","isAllylic","isAllylicAtom","isStereoCenter","isAtomStereoCenter","isRing","isRingAtom","isSmallRing","isSmallRingAtom","isStabilized","isStabilizedAtom","bond","bondOrder","getBondOrder","totalBonds","hydrogenOnAtomicNo","labileHydrogen","getFragments","allAtoms","getFragmentMF","sortedKeys","toMFString","getUnsaturation","parseInt","elementObject","defaultPossibleHints","anyMatches","remarks","getNMRHints","correct","proposed","hints","checkMF","checkUnsaturation","checkStereoAndTautomer","possibleHints","searcherCorrect","searcherAnswer","possibleHint","anyMatch","matchFragment","fromIDCode","isFragmentInMolecule","isMFCorrect","answer","nbCorrectRanks","nbAnswerRanks","checkSymmetry","hint","hash","getHash","mfCorrect","mfAnswer","unsaturationCorrect","unsaturationAnswer","getNoStereoIDCode","getTautomerIDCode","CanonizerUtil","TAUTOMER","NOSTEREO","str","h1","h2","ch","codePointAt","imul","toxicityPredictor","druglikenessPredictor","appendAtomPart","getPathAndTorsion","module","self","document","postMessage","IS_PAPA_WORKER","o","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","meta","chunkSize","chunk","streamer","_config","parseChunk","skipFirstNLines","newline","quoteChar","guessLineEndings","beforeFirstChunk","paused","aborted","cursor","preview","workerId","WORKER_ID","finished","complete","_sendError","RemoteChunkSize","_readChunk","_chunkLoaded","stream","XMLHttpRequest","withCredentials","onload","onerror","_chunkError","open","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","status","readyState","responseText","getResponseHeader","lastIndexOf","statusText","LocalChunkSize","FileReader","webkitSlice","mozSlice","FileReaderSync","readAsText","pause","resume","on","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","pow","skipEmptyLines","DefaultDelimiter","transformHeader","dynamicTypingFunction","dynamicTyping","code","abort","delimiter","RECORD_SEP","UNIT_SEP","E","successful","bestDelimiter","delimitersToGuess","getCharIndex","setTimeout","RegExp","U","S","T","fastMode","L","escapeChar","BAD_DELIMITERS","M","R","substr","create","linebreak","truncated","renamedHeaders","userError","file","userStep","userChunk","userComplete","terminate","worker","WORKERS_SUPPORTED","NODE_STREAM_INPUT","download","readable","read","File","URL","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","config","unparse","quotes","escapeFormulae","BYTE_ORDER_MARK","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","fn","each","attr","toLowerCase","files","inputElem","instanceConfig","extend","action","reason","getMoleculeCreators","fromMolfile","smarts","SmilesParser","smartsMode","parseMolecule","defaultCSVOptions","__name","segs","joinChar","splitChar","isValidObject","getValue","pathIsArray","pathIsString","separator","hasProp","index_default","sdfPart","currentLabels","include","exclude","modifiers","isNumeric","keep","modifiedValue","appendSDF","moleculesDB","sdf","mixedEOL","sdfString","workingSdf","forEachMap","entriesBoundaries","nextMatch","getEntriesBoundaries","boundary","currentLabel","always","statistics","pushEntry","updateStatistics","stat","noWait","resolve","setImmediate","AbortError","getQuery","query","format","moleculeCreators","search","mode","exactSearch","exactSearchNoStereo","queryMW","getMW","searchResult","substructureSearchBegin","queryIndex","getIndex","searcher","db","substructureSearchEnd","substructureSearch","substructureSearchOR","similaritySearch","processResult","searchAsync","interval","controller","shouldAbort","abortEventListener","signal","addEventListener","performance","subStructureSearchAsync","queryIDCode","stripStereoInformation","candidateMolecule","queries","queryIdCode","SSSearcherWithIndex","getSimilarityTanimoto","copy","flattenResult","keepMolecule","rAtomicNumber","getRAtomicNumber","cPseudoAtomR","checkIfExistsOrAddInfo","processedMolecules","moleculeInfoCallback","asReagent","asProduct","exists","applyOneReactantReactions","tree","reactions","currentDepth","maxDepth","maxCurrentDepth","stats","limitReactions","reactants","reactant","todoNextDepth","reaction","reactor","Reactor","oclReaction","setReactant","oneReactionProducts","getProducts","oneReactionProduct","reactionProduct","needToBeCharged","reactionWithoutOCL","oneReaction","children","getFilteredTrees","nodesToKeep","getNodes","parentMap","getParentMap","currentNode","getValidChildren","trees","nodes","validNodes","node","validChildren","child","appendLeavesSS","leaves","currentBranch","getNodesSS","Reactions","skipProcessed","moleculeInfo","appendHead","moleculesOrIDCodes","getLeaves","getValidNodes","getFilteredReactions","filteredReactions","clearAsFromProcessedMolecules","newReactions","rxnCode","ReactionEncoder","appendOCLReaction","todoCurrentLevel","nexts","todo","flat","newNodes","computeProperties","keepEmptyMolecules","dataStatistics","calculatedStatistics","nbMolecules","nbData","calculated","statistic","isNumber","appendEntries","idCodePath","indexPath","coordinatesPath","mwPath","smilesPath","molfilePath","appendCSV","csv","Papa","firstElement","moleculeCreator","moleculeField","lowerField","appendSmilesList","smilesArray","oneSmiles","moleculeIDCode","getMoleculeIDCode","molecularFormula","absoluteWeight","pushMoleculeInfo","getDB","appendColor","dataLabel","propertyLabel","minHue","maxHue","saturation","lightness","colorLabel","datum","definedValues","coreSmiles","complexity","originalSmiles","getCore","getRGroups","getComplexity","mols","m1","m2","generate","getAlphaGamma","polymer","addMolecule","bonds","getAllBonds","order","getBondType","isRingBond","brokenMolecule","markBondForDeletion","deleteMarkedAtomsAndBonds","fragmentMap","nbFragments","getFragmentNumbers","includeAtom","addAtom","currentSphere","fromMolfileWithAtomMap","diaIDsArray","destination","atomLabels","atomicNumbers","calculateDiastereotopicIDs","newMolfile","newMolfileWithH","hose","molfileWithH","moleculeWithHydrogens","fromF","toF","fromMoleculeF","toMoleculeF","toMolecule","fromFinalRanks","toFinalRanks","toFrom","fromRank","toRank","providedHints","providedHint","nonUniqueCustomLabels","fromLabel","toLabel","withHOSES","fromAtomicNumber","toAtomicNumber","atomsInfo","pathLengthMatrix","includeToxicities","includeDruglikeness","moleculeFormula","ToxicityPredictor","mutagenic","assessRisk","TYPE_MUTAGENIC","tumorigenic","TYPE_TUMORIGENIC","irritant","TYPE_IRRITANT","reproductiveEffective","TYPE_REPRODUCTIVE_EFFECTIVE","DruglikenessPredictor","drugLikeness","assessDruglikeness","drugScore","DrugScoreCalculator","calculate","tumurogenic","allShortestPaths","carbonyl","carbonOrHydrogen","neighbour","neighbourAtom","neighbourBond","cn","hydroxyl","amine","getParts","headers","rawEntries","parseData","rawData","improveParts","heavyAtomHydrogen","svg","hydrogenInfo","groupedDiaIDs","toSVG","diastereotopic","customAtomLabel","collapseHydrogens","copyH","labelMolecule","atomIndices","atomIndex","totalAtoms","isHydrogen","indexRemap","newIdx","highlight","_atoms","fragmentAcyclicBonds","calculateHoseCodes","parentIDCode","openchemlib_utils_1","removeAtomCustomLabels","cleavedBonds","getRingsInfo_1","getRingsInfo","ringSet","getRingSet","ringBonds","nbRingForBonds","getSize","getRingBonds","bondIndex","ringIndex","nbRings","getFragmentableRings","ringsInfo","getRingsInfo_js_1","fragmentableRingBonds","ring","second","getFragmentableRings_js_1","fragmentationResults","rLinks","acyclic","fragmentType","acyclicBonds","ql","copyMolecule","Z","vt","getIDCodeAndCoordinates","navigator","clipboard","writeText","pasteMolecule","ZS","ao","zl","padStart","Qw","R9","globalThis","devicePixelRatio","$2","ctx","textAlign","textBaseline","currentFontSize","currentFont","font","currentColor","currentLineWidth","canvasCache","clearRect","ot","kt","getBackgroundRGB","getForegroundRGB","getSelectionBackgroundRGB","getLineWidth","setRGB","fillStyle","strokeStyle","setFont","getFontSize","getBounds","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","drawString","fillText","drawCenteredString","setLineWidth","lineWidth","fillRectangle","fillRect","fillCircle","beginPath","arc","drawLine","moveTo","lineTo","stroke","drawPolygon","getX","getY","drawRectangle","strokeRect","fillPolygon","drawImage","C1","jt","T1","u1","s1","createElement","r0","imageData","K0","getContext","globalAlpha","putImageData","isDarkBackground","Kl","canvasElement","changeListener","drawContext","getCanvasWidth","getCanvasHeight","getDrawContext","onChange","what","isUserEvent","getClipboardHandler","_S","CSSStyleSheet","replaceSync","ow","button","fireMouseEvent","offsetX","offsetY","shiftKey","ctrlKey","altKey","pointerId","MOUSE_EVENT_RELEASED","MOUSE_EVENT_PRESSED","MOUSE_EVENT_CLICKED","detail","MOUSE_EVENT_ENTERED","MOUSE_EVENT_EXITED","MOUSE_EVENT_DRAGGED","MOUSE_EVENT_MOVED","removeEventListener","Jl","setDimensions","style","aS","Uw","Yl","HOTSPOT_32","IMAGE_NAME_32","cPointerCursor","cTextCursor","getCursor","buildCursor","Xl","title","rootElement","dialogElement","setLayout","hLayout","eI","vLayout","component","x2","createTextField","createLabel","Lw","createComboBox","yw","createCheckBox","lw","setEventConsumer","consumer","showMessage","alert","showDialog","getBoundingClientRect","assign","marginBlock","left","right","body","parentElement","clientWidth","offsetTop","getRootNode","append","display","gridTemplateColumns","gridTemplateRows","preventDefault","fireOk","gridColumn","gridRow","getElement","flexDirection","gap","textContent","fireCancel","showModal","disposeDialog","remove","setEventHandler","eventHandler","fireEvent","setText","getText","selectedIndex","setEnabled","disabled","addItem","getSelectedIndex","setSelectedIndex","setSelectedItem","getSelectedItem","removeAllItems","innerHTML","setEditable","checked","checkBox","isSelected","setSelected","tU","dataView","DataView","getWidth","getHeight","getRGB","getInt32","setInt32","toDataURL","Zl","dialogRoot","JavaEditorArea","register","javaUiHelper","cursorManager","grabFocus","focus","preventScroll","setCursor","showHelpDialog","createImage","ImageData","createImageFromBase64","WS","Uint8ClampedArray","createDialog","runLater","requestAnimationFrame","AI","readOnly","initialMode","initialFragment","dataset","openchemlibCanvasEditor","alignItems","backgroundColor","touchAction","userSelect","webkitUserSelect","attachShadow","adoptedStyleSheets","qe","N0","tabIndex","outline","S8","JP","MODE_REACTION","MODE_MULTIPLE_FRAGMENTS","_8t","we","setReaction","setEditorArea","tu","eu","repaint","Au","ResizeObserver","contentRect","observe","nu","Pu","ru","platform","metaKey","KEY_CTRL","KEY_ALT","KEY_SHIFT","KEY_DELETE","KEY_HELP","KEY_ESCAPE","KEY_ENTER","W8t","fireKeyEvent","KEY_EVENT_PRESSED","KEY_EVENT_RELEASED","clipboardData","fromText","addPastedOrDropped","$S","editorArea","toolbar","uiHelper","destroy","disconnect","$8t","fromCodePoint","E8","a8t","uI","programName","keepIdCode","rD","compatMode","clearTimeout","setInterval","clearInterval","Art","eU","AU","iD","Tw","cw","ww","gw","dw","_l","fD","Bw","DD","v1","vw","Fw","kw","ki","$l","Q0","bw","nU","jw","Rw","PU","al","pw","Mw","Cw","Hw","Vw","Ew","Sw","Iw","xw","Nw","Gw","Ow","qw","zw","Kw","Jw","Yw","Xw","Zw","Ww","yI","G","cI","th","J","iu","_w","$w","rU","p9","WA","aw","t7","e7","A7","n7","P7","r7","i7","f7","D7","u7","fu","iU","uD","Q7","Du","o7","U7","eh","mi","uu","Ah","nh","Ph","QD","rh","ih","fh","oD","UD","br","jr","Dh","fU","L7","s7","Zt","y7","uh","l7","h7","T7","c7","w7","g7","d7","RI","DU","B7","HI","f2","VI","eb","N1","fq","II","EI","Dq","xI","SI","oc","sz","Vx","Qh","Ft","oh","YP","uU","cA","n1","bD","Qu","hU","Jn","i8","Uh","skipCoordinateTemplates","makeHydrogenExplicit","noCactvs","singleDotSeparator","createSmartsWarnings","zc","DZ","QU","v7","F7","S9","ou","LD","k7","m7","MU","b7","Lh","sh","Rr","bi","hP","o0","yh","q0","JI","QA","Ni","ZI","w0","_u","lh","j7","mA","hh","R7","p7","dQ","M7","Vr","C7","Th","gD","tx","sD","exec","ZK","ji","oU","gk","cP","H7","V7","fM","Et","Ri","zL","M9","H1","E7","nx","UU","LU","sU","X","yD","Ct","e0","R1","S7","ge","h0","fe","c1","wh","Z0","Uu","Lu","lD","I7","x7","ox","XG","Xi","er","NB","MK","N7","G7","PX","O7","Htt","q7","_U","z7","K7","J7","XP","Y7","X7","ts","pi","hD","TD","Z7","$i","Mi","I8","ZP","yU","W7","cD","gh","xu","lU","dh","_7","WP","$7","Bh","uv","a7","zu","jb","v0","Rt","oA","ze","Fn","wD","HD","bA","qA","tg","dD","vh","_A","J1","i3","eg","Mr","Hr","Ag","ng","_P","su","C0","Fh","TU","Pg","NU","rg","ig","XB","kh","x8","mh","fg","xr","Oh","Dg","p1","Td","ug","cc","bh","wc","Hi","cl","Er","jo","yu","qU","lu","hF","bx","jI","rd","LN","rN","uN","cU","Z1","W1","jh","Qg","Rh","Lx","H0","zU","ph","C9","jA","hu","Tu","tj","u6","og","kn","ut","Mx","Mh","b0","g0","Ug","Lg","Cx","Go","Oo","Ch","w5","tS","Eo","wU","Ji","sg","Sr","yg","UA","TP","cu","wu","Vi","a0","gU","Ktt","BD","nZ","dU","sq","vD","gu","lg","$P","hg","ae","Tg","cg","BU","FD","gg","dg","vU","Hh","Ei","Bg","GA","MA","Vh","At","k9","FU","Vl","vg","Ll","Fg","ID","kg","un","aP","mg","bg","Qf","Nt","EA","Eh","jg","Rg","CA","Gx","pg","No","ML","Mg","eM","P1t","Cg","Ir","Hg","I1","du","Kr","Bu","$g","Sh","H9","Cv","kU","JU","Vg","mU","zr","vu","bU","Eg","wP","Sg","jU","Ig","xg","Ng","Fu","Ii","s9","N8","Mf","z1","Ih","Kx","j6","Gg","Og","nm","tA","de","Ve","Yn","n0","ku","qg","gt","zg","xh","Nh","xi","RU","Le","Gh","pU","Kg","Jg","Yg","pf","Gr","K2","gr","B9","F9","tf","DJ","CU","Ac","zA","Xg","Zf","nn","Zg","R8","g6","YB","Wg","qh","U8","Nr","t8","jd","_g","G0","G8","dP","Bn","bu","LA","ag","L0","td","V0","ed","kD","Vk","uG","ju","e8","HU","Ad","mD","nd","iP","Pd","Fe","Ce","Qz","fd","Dd","ud","Yq","Xo","pd","zh","Qd","oW","qn","A0","od","Kh","E9","rL","dt","VU","fr","gP","Jh","g8","Ru","d8","Ud","V9","Yh","W0","oo","O8","wn","Gi","gn","f0","Ee","q8","Xh","v8","i0","A8","Zh","Wh","Qn","DF","sA","An","UL","Ld","RL","iN","Yt","lE","xd","yE","sE","vJ","EU","gL","DN","Nb","Zq","_h","wv","GL","SU","k6","De","$h","ah","z8","PP","backingJsObject","mn","eA","UN","yd","t3","ld","e3","uS","c0","pu","Ke","hd","IU","a3","kc","hN","jD","$H","hE","A3","Mu","Wt","f$","Ot","d0","Y1","j0","a_","Ftt","xU","XA","cd","createSymmetryRank","considerStereoheterotopicity","encodeAtomCustomLabels","encodeAtomSelection","assignParitiesToTetrahedralN","coordsAre3d","createPseudoStereoGroups","distinguishRacemicOrGroups","tieBreakFreeValenceAtoms","encodeAtomCustomLabelsWithoutRanking","Qe","neglectAnyStereoInformation","O1","r$","wd","gd","dd","bn","K8","Bd","vd","Fd","GU","Ge","n3","jL","Oi","Be","Cu","en","OU","I9","BN","pY","Jp","RD","n8","se","vN","We","Rd","pD","$F","FN","yb","kd","Tj","md","Xc","Yc","Vc","Uc","Wc","Ls","gZ","bd","x9","MD","Hu","Mk","Xn","Md","Pt","mN","Cd","Hd","LR","Vd","$8","VO","CD","S5","qi","Ed","AA","aN","wx","r3","$B","qD","Sd","Id","F2","Nd","e1","EN","ub","V","Gd","Vu","Od","qd","zd","uF","oR","f3","D3","BP","Kd","Jd","Yd","KU","Xd","HT","J8","oz","iT","Hc","Zd","Wd","ringMatchMode","rE","aY","N9","Kc","e9","YU","mk","KO","E3","SN","p0","M1","IA","u3","_d","xt","$d","P0","G9","b8","ye","Pe","XU","Gu","Yu","rB","ON","tt","W","$","st","fb","ND","Y9","v3","xB","nA","_D","x3","Dm","zj","OT","Qv","kB","HF","oY","lI","TI","Al","nl","Pl","rl","E5","To","ni","On","Bt","QP","DP","xq","hI","Wn","Rl","U9","a8","hf","ck","ab","EV","FT","_5","lA","Att","s3","rY","sK","$R","a5","oL","z3","k$","KD","el","_F","T4","Lc","nL","Z9","xX","Mb","PZ","h6","tX","_t","Ib","Az","yy","rf","W4","c8","zW","oK","Wz","hy","hA","C3","GP","aL","GD","hb","kb","ib","lb","Ie","WD","AL","v5","eE","AE","gG","$s","h1t","pB","VD","ad","tB","zi","ZU","O9","eB","Je","o3","F5","Zc","AB","N3","fF","nB","Ki","Gc","WU","Mc","ED","Zn","Vn","z0","Pn","cG","Se","PB","Dk","WN","ee","U3","YL","iB","y6","Jy","fB","SD","CT","L3","Hs","DB","uB","Ry","q9","Or","z9","QB","$4","rM","Fc","kO","$U","oB","Dc","ve","pj","UB","P8","Eu","j1","u0","OA","cF","K3","tz","g_","pe","Ha","et","ht","wt","o1","oi","cQ","dn","kT","att","xtt","N_","Su","LB","Ub","aU","Y8","Gt","$A","tL","vP","rG","cL","Ex","Ev","iG","tr","U1","_n","$c","y3","qr","L1","f1","sB","vc","x8t","yB","N8t","lB","G8t","hB","JF","$D","Qr","Hl","FP","HQ","xL","TB","K9","QG","cB","si","W8","qt","OL","VW","r8","wB","BA","gB","eL","l3","h3","aR","T3","xD","BL","dB","BB","Jj","Cb","O0","R5","sX","vB","rr","Yk","X8","FB","c3","Iu","Vs","w3","le","mB","w6","xe","mo","$b","E1","vi","Sn","n9","E0","zQ","$9","Am","BT","k_","Qi","fR","jP","ss","$k","SQ","v2","be","mP","D6","Ko","I$","bB","rt","ct","Xt","St","A1","Qt","bt","yt","Jt","D1","Lt","pt","U0","V1","l0","Vj","r1t","Z8","jB","l8","wG","RB","kP","yA","Bc","MB","Cc","xA","Jr","Yi","g3","zt","f8","Ju","jn","J9","d3","qL","CB","matchAtomCharge","matchAtomMass","matchDBondToDelocalized","matchAromDBondToDelocalized","eZ","HB","VB","EB","Ye","$n","Uf","_8","PL","py","B3","pG","IB","iL","F0","MG","HG","K1","F3","Ou","D8","Ku","GB","wZ","Zi","It","OB","k3","I4","fL","qB","zB","Jq","DL","zb","m3","SP","uL","J0","Ae","Nu","EG","an","QL","KB","xG","Ip","XQ","n2","aj","jZ","iy","jX","us","b3","NG","q1t","t5","BY","ux","j3","En","GG","JB","xb","pL","Vo","ZB","$t","WB","OD","Jc","Ic","iJ","Yr","_B","Mt","aB","Rn","NA","X9","u8","tv","ev","Av","qu","R3","F6","nS","af","eS","xE","AS","NE","PS","GE","p3","I3","k0","Wi","aG","P9","Y2","M3","jy","LL","nv","sL","pn","Q8","yL","H3","Pv","tn","RT","te","i9","V3","rv","Nj","oj","zT","htt","iv","y9","bP","lL","fv","Ms","SR","Dv","H4","KE","Ss","V4","JE","PE","YE","s_","Tc","V6","E6","iO","ak","QO","zD","o8","pP","Ut","Tt","Mn","hL","Kt","t1","lO","ov","Fb","Uv","am","Lv","sv","yv","lv","hv","Tv","cv","_0","pA","cO","yG","lG","hG","wO","W9","_9","_i","G1","gv","Wk","TL","Hz","bN","SF","KJ","Cn","removeAtIndex","JD","dv","Bv","cT","G3","vv","Fv","PQ","Xr","g1","D0","kv","k2","JA","O3","CX","mv","bv","dO","Op","ja","BO","rS","pb","mq","LJ","HN","kq","Jx","XO","_T","ti","oP","UP","wN","dq","jv","Rv","YD","wL","J3","RA","Y3","pS","pv","sF","Mv","dL","getAtIndex","X3","Hv","yJ","Hm","TA","he","Ec","Vv","l1","m0","_6","Xu","MI","Pr","RJ","RP","vr","Lr","zs","Zu","bb","SE","IG","IE","jl","$u","ke","W$","Z3","Wu","JT","Sv","Zr","Iv","u9","xv","W3","vL","Nv","xO","pc","yn","cs","sW","_3","Bz","Tb","fG","qx","$q","qc","ol","sN","Wr","$3","Gv","Ov","cb","Ts","oM","tP","_k","z_","qv","iM","Un","FL","YQ","B2","GY","JQ","bT","R$","GO","zv","Xe","Kv","Jv","NN","pm","kL","mL","Yv","bL","SY","Xv","_r","Fm","Cj","tT","a9","Zv","Wv","zq","RR","_v","b5","yk","$v","av","mG","XD","eT","KQ","F$","PW","tF","eF","AF","nF","CL","PA","HL","Y_","Zm","VL","PF","me","EL","ZO","Ne","WO","p6","Ka","rF","iF","$r","SL","Qc","AT","ir","ZD","nT","PT","IL","z8t","In","H6","LM","QF","oF","aO","sn","_1","au","L8","rT","tq","Tl","NL","UF","Mj","LF","h5","Pq","TG","dS","BS","vS","yF","__elementTypeCategory$","fT","lF","Kb","_s","qT","ln","Ze","Qs","__elementTypeId$","DT","nc","TF","oq","Uq","Lq","Wp","e4","gM","h9","T9","c9","w9","g9","w8","Vf","mj","Ia","L9","jp","G$","B5","Utt","sY","uT","yT","QT","DM","wF","lc","gF","ef","oT","lq","hq","UT","dF","SO","Bj","gq","Bb","Yp","BF","vF","gc","iS","B8","dc","vq","tQ","FF","kF","rA","ei","LT","mF","KL","bF","dj","bj","eP","VA","JL","sT","jF","Rq","jT","XL","Cq","Qb","UX","eQ","v9","gE","dE","RF","ly","pF","bo","AP","configurable","defineProperties","AQ","Sq","CF","w1","VF","ZL","EF","Kz","Jz","PJ","IF","WL","_L","xF","vn","p8","NF","Xb","lT","Btt","Tf","HA","W6","vtt","X5","rk","nQ","f9","tN","tb","ia","Bm","GF","xN","gm","OF","uO","YA","Hf","zf","Ps","CQ","Ra","qF","zF","OJ","rQ","hn","iQ","nr","Af","Me","rtt","ip","rP","dA","S0","ky","uP","je","lr","xT","yr","NP","d9","F8","Qo","vs","Z$","k8","l9","X6","xf","no","Nf","M2","k1t","KF","n5","aD","$L","ce","Hn","YF","Re","Wb","es","qW","XF","ZF","As","Pf","nf","WF","ns","ws","hT","aF","vT","tk","ek","Dz","TT","fQ","Ak","wT","t9","nk","Zs","sS","LS","JK","T_","Ln","Fr","ZT","Pk","gT","xP","dT","Oz","N2","rs","WZ","ik","lz","hz","fk","Tz","__java$exception","D9","uk","DQ","Qk","wA","ER","R2","j2","If","KA","sR","PR","FE","g1t","ok","qk","Uk","kz","Lk","sk","bz","delete","lk","qP","i1t","hk","$1","uQ","pz","Ns","Mz","MP","toArray","Vz","Tk","QQ","w2","xj","wk","Nz","qz","hc","uY","zE","s8","Sl","ft","Dt","Oe","uA","Bk","vk","oQ","contains","mT","Fk","QM","Rb","UQ","ui","az","SJ","zn","VG","QK","tK","Sk","eK","bk","t2","nK","jk","Rk","LQ","pk","rK","sQ","e2","q2","V2","Ck","b1t","yQ","o9","fK","DK","uK","k1","ma","nM","up","Hk","GN","om","UM","fs","Lj","Ek","Oc","Pc","lQ","Ds","Ik","xk","Nk","iY","Gk","Ok","zk","Pp","Kk","cK","cR","iZ","pT","uM","Wf","pE","gQ","hQ","FS","Yo","Jk","MT","CP","TJ","Te","wM","A9","R1t","j1t","TE","MN","Sb","ff","IT","TQ","Iz","Xk","Zk","P_","JZ","T1t","os","VT","HO","gs","RK","stack","fY","S4","FY","hY","ET","fa","mz","tm","A2","kS","sO","wQ","T2","Df","uf","HK","Ix","xx","PO","wl","gi","$j","Pm","rm","qE","RE","fm","FQ","VK","Hb","EK","Us","IK","_m","La","co","ca","Ur","I8t","aX","EQ","l$","OR","xK","DA","wX","v1t","Ja","iz","um","vf","Qm","hp","DY","NT","$V","xp","ST","Um","Hj","q8t","oE","N4","Lm","YK","GT","sm","NK","GK","Gy","ym","RQ","hW","lm","gJ","hm","OK","uo","Tm","K6","Lb","J6","XK","TO","XR","Ej","cm","wm","$0","nt","fP","US","T6","k4","j8","HE","$y","ay","m4","XV","tl","b4","j4","ZV","R4","WV","_V","L5","di","ro","io","Ti","Ty","cy","wy","gy","x6","N6","fo","By","Do","G6","O6","q6","Po","Sf","Ef","Gn","eo","Ao","Fo","s1t","B1t","dm","ny","_p","ga","EE","LP","o2","X1","vy","ie","ur","Stt","Wtt","jK","WK","e6","DR","B_","vm","r5","km","mm","o6","tJ","LO","bm","PG","eJ","Uy","yc","qY","bQ","AJ","jm","ds","Rm","sc","wi","YV","Aj","Ta","e1t","b2","jc","Xtt","r9","Mm","of","Cm","uJ","QJ","Pi","Vm","ls","HP","lJ","hJ","Em","BQ","Sm","wJ","Im","xm","IZ","VP","Nm","BJ","$Z","Gm","z6","fA","C2","Om","Mo","vQ","jQ","Oj","B$","ej","Js","F_","Ytt","OY","ps","FJ","$Y","MR","k5","GJ","wY","qm","M1t","p1t","C1t","KT","kJ","mJ","ob","hashCode","jJ","i2","Gb","aA","zm","Km","Jm","acos","YT","pJ","kN","CJ","Ym","XT","XJ","Xm","kQ","OW","mC","wo","mtt","U1t","Wm","IJ","WT","I5","ec","po","a4","tc","BE","M$","gN","$m","R0","EP","vb","wb","YJ","D2","ri","WJ","IP","wr","jG","ett","Bs","Ab","so","y8","o5","$J","Nn","Zb","AY","gA","ue","Pb","Lf","rb","QY","Fl","vl","Bl","kl","So","ml","containsKey","Db","$T","mb","equals","mE","cX","mQ","bl","G1t","Io","$p","sJ","bX","YW","bZ","qR","BX","JV","Q9","SW","btt","wj","lY","TY","sf","_j","Rf","aT","qb","vA","yX","yf","sb","c2","JW","pQ","FR","lf","Wj","N5","e5","A5","kR","Kj","gb","cE","MY","mX","JY","CY","Jf","Fs","u2","EY","B0","NY","Up","Cs","nX","i5","J2","da","YY","f5","ks","bs","ZY","Fj","go","js","hl","Nc","D5","_b","MQ","u5","yo","q4","Rs","DS","FA","fS","yY","Vb","My","U2","$Q","U_","Qy","VQ","fi","Eb","U5","oy","bp","QX","YZ","s5","kf","l5","Ob","hX","TX","bI","iR","ez","y5","NQ","Jb","vX","FX","BK","Yb","X$","FK","TK","cause","ic","suppressed","RX","T5","c5","CE","g5","I2","vE","mc","NX","IN","ntt","I1t","wS","lS","yS","hS","TS","cS","d5","xz","aq","aJ","m8","tY","nj","XX","xn","OE","ZX","s0","execScript","L2","Es","E4","D_","s2","X2","Jo","zK","HY","Pj","rj","h8","ij","fj","pR","GI","mI","Dj","RS","H2","r6","S_","J_","bW","ZZ","uj","cf","AZ","Qj","gS","m5","fZ","j5","Uj","yq","sj","Uo","IR","wf","UR","_Q","U6","yj","lj","hj","cZ","p5","Is","IQ","M5","cj","Pz","BZ","C5","xQ","H5","tp","vZ","t1t","Q$","L$","vo","FZ","V5","l2","e$","q_","gj","Gj","pZ","nG","cx","Iq","zz","EZ","SZ","Gs","GQ","gX","NZ","Os","KZ","uR","qs","fc","rc","v4","uc","Co","Ho","$6","kC","_Z","OQ","wW","Ws","Ntt","aZ","tW","vj","Ptt","Ztt","AW","nW","kj","df","fW","jj","Rj","DW","F4","ME","hK","QW","Ey","MJ","HZ","hr","UW","ne","LW","yW","lW","Rc","C6","p4","nE","Sj","Ij","gW","nJ","iA","DX","zo","nq","x5","dW","vW","Bf","or","mW","Cp","PY","VJ","qj","MW","CW","HW","V1t","G5","Ks","Yj","xW","Xj","O5","GW","Zj","q5","kW","TZ","pW","ty","Da","Uz","z5","K5","tR","Hp","_y","eR","jS","mS","bS","J5","Ny","g4","L4","UC","Y5","AR","nR","_K","Z5","Xs","E_","Fp","l6","qG","bK","H$","e_","n_","Fa","g2","VZ","h$","A1t","va","r_","i_","u_","Q_","qQ","W5","C_","aQ","YG","o_","Dp","ci","fX","Jtt","v6","L_","rR","Ff","l_","Fi","DE","TR","n$","vp","_$","$_","QR","Fy","c_","$5","w_","m_","yR","lR","hR","b_","j_","Mq","_q","t6","wR","R_","m9","tD","xy","Kp","H_","$X","A6","V_","gK","Ux","Bx","Ys","Ttt","I_","rX","gR","dR","K_","BR","n6","sy","vR","Yy","MZ","atan2","jR","CS","LE","W_","__","EW","qq","K4","eW","Q1t","NW","t$","bJ","Zp","K$","m$","q$","a$","uz","wtt","pa","A$","P$","sM","LY","sr","UJ","H1t","mR","P6","bR","yN","D$","u$","o$","i6","s$","CR","HR","sZ","c$","NR","VR","BI","R6","f6","w$","rZ","jf","bf","v$","Z_","r4","i4","yM","f4","b$","j$","xR","p$","V$","GR","U$","yp","vG","b6","KR","dG","Ep","BG","Y$","p_","X_","E$","T8","x$","N$","uy","Zy","_R","Itt","Vtt","YR","Ay","zR","bE","tG","gx","qa","rp","PM","MS","ya","J$","RY","d1t","Py","qtt","iX","T$","Ga","kp","Aa","ytt","JR","qC","hM","CZ","JC","XC","$$","t0","KX","He","ktt","d6","qo","ra","Ea","ZJ","O_","Tp","ztt","gz","VY","ptt","ba","Ua","ta","as","ZR","WR","KW","Qp","WW","Wy","JX","ott","jtt","oe","cr","Yf","oa","eO","PN","Q6","sa","UY","oJ","ey","za","Qa","w1t","fp","M_","Vp","Ma","d_","i$","Rtt","itt","EJ","op","ho","vO","Np","zG","KG","Ui","S6","I6","Ap","KK","xZ","v_","ZQ","y1t","n1t","WQ","Xf","L6","s6","E1t","ka","wp","G4","kE","$N","YX","Lp","_W","XY","RC","pC","MC","CC","jY","HC","iq","VC","EC","lX","SC","FW","IC","aW","xC","HX","dl","$f","S1t","dr","J4","fy","Dy","ll","KY","gp","dtt","xa","kX","zZ","oO","UE","sG","Bp","rz","Xa","$W","EX","G_","oX","zp","sl","uE","Wa","E2","Fz","iW","Gp","$a","ltt","_z","ttt","Ly","Mp","VE","lM","mp","Dtt","pN","JJ","xo","tZ","aV","tE","OG","Ltt","Rp","c6","QS","oS","bc","pp","I0","ctt","Sy","bq","bC","Sp","XW","fz","pI","uW","J8t","l1t","cY","Y8t","x_","asin","ua","jW","Ett","D4","MM","FI","qp","Ro","z4","kZ","D1t","WG","UK","ix","Sa","uX","Gtt","_J","tM","Xp","Pa","ha","Mtt","gtt","gY","yZ","Y6","GX","u1t","CK","t4","oZ","px","O1t","AX","B6","NV","z2","X4","Z4","f1t","GZ","jM","o4","Oy","U4","GM","OM","qM","qy","s4","zM","y4","l4","KM","JM","YM","XM","ZM","WM","_M","h4","$M","aM","tC","eC","AC","PC","c4","rC","iC","fC","DC","w4","uC","QC","oC","zy","d4","LC","sC","yC","lC","hC","TC","Ky","cC","wC","B4","gC","dC","BC","vC","FC","M4","C4","il","fl","Tr","Kf","o1t","tO","Qtt","F1t","_tt","$tt","z$","WI","L1t","f_","h_","A_","O4","Cy","Hy","Vy","F1","T0","Y0","ZA","M0","B1","Ue","$e","kA","AG","AM","oN","$x","c1t","RW","Lo","Za","t_","Y4","y$","CM","HM","VM","u4","EM","SM","IM","xM","NM","wE","_4","kr","M8","sP","yP","rn","mr","Kn","m6","_Y","vM","FM","kM","mM","bM","TM","cM","a6","rW","Ba","zV","KV","aE","ZE","$E","WE","_E","XE","ZW","AK","Ez","LZ","b9","eD","lt","r1","C8","AD","nD","PD","M6","gl","ZC","WC","_C","$C","aC","tH","eH","AH","PH","rH","iH","fH","DH","uH","QH","oH","UH","LH","sH","yH","lH","hH","TH","cH","wH","gH","dH","BH","vH","FH","kH","mH","bH","jH","RH","pH","MH","CH","HH","VH","EH","SH","IH","xH","NH","GH","OH","qH","zH","KH","JH","YH","XH","ZH","WH","_H","aH","tV","eV","AV","nV","PV","rV","iV","fV","DV","uV","QV","oV","UV","LV","sV","yV","lV","hV","TV","cV","wV","gV","dV","BV","vV","FV","kV","mV","bV","jV","_f","CV","GV","OV","SV","qV","VV","Sc","xc","Il","Dn","_c","tw","ew","Aw","nw","Pw","rw","iw","fw","zP","Dw","H8","Z2","W2","ES","Nl","SS","IS","xS","NS","i1","uw","GS","OS","qS","j9","zS","KP","_2","Gl","Zo","KS","lP","Ol","JS","Wo","YS","_o","XS","$o","OO","V8","BW","RV","pV","Xy","MV","HV","Ht","Vt","__moduleStartupDone","Tn","Cf","my","Z6","by","A4","n4","Iy","dM","BM","RM","pM","Gf","Of","jC","Bo","OP","NC","GC","OC","zC","KC","YC","IV","xV","qf","Dl","ko","iE","fE","ul","x4","G2","Ql","QE","Ul","O2","goog","global","pO","mK","addAll","containsAll","removeAll","retainAll","addAtIndex","addAllAtIndex","cz","setAtIndex","subList","eY","mZ","JO","YO","compareTo","ordinal","x1t","Xz","jE","Nq","Kq","N1t","Zz","OZ","RZ","Xq","pK","VX","drawDottedLine","mO","getCanMolecule","wa","getEncodedCoordinates","getEncodedMapping","getFinalRank","getGraphAtoms","getGraphIndexes","hasCIPParityDistinctionProblem","invalidateCoordinates","normalizeEnantiomer","setParities","getConformerCount","getNextConformerAsMolecule","CG","getOneConformerAsMolecule","getPotentialConformerCount","cW","initializeConformers","strategy","maxTorsionSets","use60degreeSteps","O$","getDetail","MO","getDruglikenessString","uZ","_minimise","getTotalEnergy","t0t","e0t","A0t","getAllCommonSubstructures","pl","getMCS","Sz","getScore","addFragment","FO","addMissingChirality","addOrChangeAtom","addOrChangeBond","addRing","addRingToAtom","addRingToBond","addSubstituent","canonizeCharge","Yz","changeAtom","changeAtomCharge","changeBond","convertStereoBondsToSingleBonds","copyAtom","copyBond","copyMoleculeByBonds","copyMoleculeProperties","deleteAtom","deleteAtomOrBond","wK","deleteBond","fN","deleteBondAndSurrounding","deleteMolecule","deleteSelectedAtoms","findAlleneCenterAtom","findAlleneEndAtom","findAtom","findBINAPChiralityBond","findBond","findRingSystem","getAbsoluteAtomParity","getAbsoluteBondParity","Px","jx","getAllConnAtomsPlusMetalBonds","getAromaticRingCount","pq","getAtomESRGroup","getAtomESRType","getAtomList","getAtomListString","getAtomPi","getAtomQueryFeaturesObject","aromatic","notAromatic","notChain","not2RingBonds","not3RingBonds","not4RingBonds","noMoreNeighbours","moreNeighbours","matchStereo","not0PiElectrons","not1PiElectron","not2PiElectrons","not0Hydrogen","not1Hydrogen","not2Hydrogen","not3Hydrogen","not0Neighbours","not1Neighbour","not2Neighbours","not3Neighbours","not4Neighbours","notChargeNeg","notCharge0","noChargePos","ringSize0","ringSize3","ringSize4","ringSize5","ringSize6","ringSize7","ringSizeLarge","Ott","getAtomRingCount","getAverageBondLength","getAverageTopologicalAtomDistance","XZ","getBond","getBondAngle","getBondBridgeMaxSize","getBondBridgeMinSize","getBondCIPParity","getBondESRGroup","getBondESRType","getBondLength","getBondParity","getBondPreferredStereoBond","bY","getBondQueryFeatures","getBondQueryFeaturesObject","single","double","triple","delocalized","metalLigand","quadruple","quintuple","notRing","nonAromatic","brigdeMin","brigdeSpan","C$","getBondRingSize","getBondTypeSimple","getBonds","RG","getCenterOfGravity","jz","getChiralText","getChirality","getCoordinates","getDefaultMaxValenceUncharged","Eq","eX","getElectronValenceCorrection","getExcludedNeighbourCount","getFisherProjectionParity","getFragmentAtoms","Fq","getFreeValence","getHandleHydrogenMap","getHelperArrayStatus","getHoseCodes","vK","getIDCoordinates","getImplicitHigherValence","getLowestFreeValence","getMaxAtoms","getMaxBonds","getMaxValence","getMaxValenceUncharged","getMetalBondedConnAtoms","getMoleculeColor","getMolweight","mY","getName","getNonHydrogenNeighbourCount","getNumberOfHydrogens","$z","getOccupiedValence","getPathBonds","getPathLength","getRotatableBondCount","getStereoCenterCount","getStereoProblem","getSubstituent","getSubstituentSize","getZNeighbour","invalidateHelperArrays","CI","inventCoordinates","skipDefaultTemplates","keepHydrogens","keepMarkedAtomCoordinates","preferMarkedAtomCoordinates","is3D","isAlkaliMetal","eq","AN","isAmideTypeBond","OX","isAtomConfigurationUnknown","isAtomMarkedForDeletion","Hx","isAtomParityPseudo","isAutoMappedAtom","isBINAPChiralityBond","isBondBackgroundHilited","isBondBridge","isBondForegroundHilited","isBondMarkedForDeletion","Nx","isBondParityPseudo","isBondParityUnknownOrNone","isChalcogene","isDelocalizedBond","isEarthAlkaliMetal","Aq","isElectronegative","isElectropositive","zY","isFlatNitrogen","isFragment","isHalogene","IO","isMarkedAtom","isMetalAtom","isNaturalAbundance","isNitrogenFamily","isOrganicAtom","isPseudoRotatableBond","isPurelyOrganic","pX","isSelectedAtom","isSelectedBond","isSimpleHydrogen","Lz","isSmallRingBond","isStereoBond","markAtomForDeletion","KI","normalizeAmbiguousBonds","removeAtomColors","removeAtomMarkers","removeAtomSelection","LG","removeBondHiliting","removeQueryFeatures","renumberESRGroups","rotate","bG","scaleCoords","setAllAtoms","YI","setAllBonds","XI","setAssignParitiesToNitrogen","vx","setAtomAbnormalValence","setAtomCIPParity","setAtomCharge","setAtomColor","setAtomConfigurationUnknown","setAtomList","setAtomMarker","setAtomParity","setAtomRadical","setAtomSelection","setAtomX","setAtomY","setAtomZ","setBondBackgroundHiliting","oG","setBondCIPParity","setBondESR","setBondForegroundHiliting","UG","setBondOrder","setBondParity","setBondParityUnknownOrNone","setBondQueryFeature","setChirality","setCoordinates","setHelperValidity","wI","setHydrogenProtection","gI","setMaxAtoms","setMaxBonds","setMoleculeColor","dI","setName","setParitiesValid","setStereoBondFromAtomParity","setStereoBondFromBondParity","setStereoBondsFromParity","setToRacemate","setUnknownParitiesToExplicitlyUnknown","shareSameFragment","stripIsotopInfo","qK","stripSmallFragments","suggestBondType","KN","supportsImplicitHydrogen","swapAtoms","swapBonds","createSmarts","includeMapping","kekulizedOutput","maxAVBL","inflateToMaxAVBL","inflateToHighResAVBL","chiralTextBelowMolecule","chiralTextAboveMolecule","chiralTextOnFrameTop","chiralTextOnFrameBottom","d$","noTabus","showAtomNumber","showBondNumber","highlightQueryFeatures","showMapping","suppressChiralText","suppressCIPParity","suppressESR","noCarbonLabelWithCustomLabel","noAtomCustomLabels","showSymmetryAny","showSymmetrySimple","showSymmetryStereoHeterotopicity","noImplicitAtomLabelColors","noStereoProblem","noColorOnESRAndCIP","noImplicitHydrogen","drawBondsInGray","la","toSmarts","toSmiles","translate","AO","translateCoords","validate","zoomAndRotate","zoomAndRotateInit","U0t","s0t","l0t","T0t","c0t","w0t","g0t","N0t","z0t","W0t","_0t","$0t","a0t","tet","net","Pet","iet","Qet","oet","het","cet","wet","Bet","vet","Fet","met","bet","Ret","pet","Met","Het","Vet","Net","Get","Ket","Jet","Yet","Xet","Zet","Wet","_et","$et","nAt","PAt","rAt","iAt","DAt","uAt","UAt","jAt","RAt","CAt","SAt","qAt","ZAt","WAt","tnt","Dnt","Mnt","Cnt","Hnt","Vnt","Ent","Snt","Oq","Rz","logPString","utt","SX","logSString","na","wq","polarSurfaceAreaString","addCatalyst","addCatalystAt","Qx","addProduct","addProductAt","Zx","addReactant","addReactantAt","Wx","clone","getCatalyst","Rx","getCatalysts","getHighestMapNo","getMergedCopy","QZ","getMolecules","getProduct","getReactant","getReactants","getReactionCenterMapNos","Ctt","lZ","isPerfectlyMapped","aa","isReactionLayoutRequired","S$","removeCatalysts","dJ","kI","toRxn","toRxnV3","TW","validateMapping","Oa","g$","determineAromaticity","getAtomIndex","getBondIndex","Wq","getHeteroPosition","fx","getRingAtoms","getRingSize","getSharedRing","isAtomMember","isBondMember","isDelocalized","Dx","qualifiesAsAmideTypeBond","validateMemberIndex","getField","getFieldData","getFieldNames","qN","WY","getNextFieldData","getNextMolFile","_a","dZ","yK","setMol","createIndex","qX","fO","DO","getSmartsWarning","zN","noCoordinates","noStereo","parseReaction","gO","setRandomSeed","vI","IW","Va","applyTransformation","Gz","hZ","Tq","dK","cq","clearAll","getGenericEditorArea","getMode","getReaction","moleculeChanged","kK","toolChanged","kG","build16x16CursorImage","WX","createNativeDialog","createPopupMenu","openChemistryFile","Qq","SK","FG","iK","O8t","$G","getOrDefault","putIfAbsent","put","containsValue","keySet","putAll","_O","rO","Gq","Sx","_G","done","K8t","El","QN","IY","JG","zX","ftt","nY","BACKBONE","NORMAL","NOSTEREO_TAUTOMER","STRATEGY_ADAPTIVE_RANDOM","STRATEGY_LIKELY_RANDOM","STRATEGY_LIKELY_SYSTEMATIC","STRATEGY_PURE_RANDOM","qZ","DRUGLIKENESS_UNKNOWN","MMFF94","MMFF94S","MMFF94SPLUS","EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED","EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED","EDITOR_EVENT_MOLECULE_CHANGED","EDITOR_EVENT_SELECTION_CHANGED","HOTSPOT_16","IMAGE_DATA_16","KEY_BACK_SPACE","MODE_DRAWING_OBJECTS","MODE_MARKUSH_STRUCTURE","TableLayoutFill","TableLayoutPreferred","cChainCursor","cDeleteCursor","cFistCursor","cHandCursor","cHandPlusCursor","cInvisibleCursor","cLassoCursor","cLassoPlusCursor","cPointedHandCursor","cSelectRectCursor","cSelectRectPlusCursor","cZoomCursor","CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N","CANONIZER_CONSIDER_DIASTEREOTOPICITY","CANONIZER_CONSIDER_ENANTIOTOPICITY","CANONIZER_CONSIDER_STEREOHETEROTOPICITY","CANONIZER_COORDS_ARE_3D","CANONIZER_CREATE_PSEUDO_STEREO_GROUPS","CANONIZER_CREATE_SYMMETRY_RANK","CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING","CANONIZER_ENCODE_ATOM_SELECTION","CANONIZER_NEGLECT_ANY_STEREO_INFORMATION","CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS","FISCHER_PROJECTION_LIMIT","FISCHER_PROJECTION_RING_LIMIT","STEREO_ANGLE_LIMIT","VALIDATION_ERRORS_STEREO","VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION","VALIDATION_ERROR_ESR_CENTER_UNKNOWN","VALIDATION_ERROR_OVER_UNDER_SPECIFIED","cAtomCIPParityNone","cAtomCIPParityProblem","cAtomColorBlue","cAtomColorDarkGreen","cAtomColorDarkRed","cAtomColorGreen","cAtomColorMagenta","cAtomColorNone","cAtomColorOrange","cAtomColorRed","cAtomLabel","cAtomParity1","cAtomParity2","cAtomParityIsPseudo","cAtomParityUnknown","cAtomQFAny","cAtomQFAromState","cAtomQFAromStateBits","cAtomQFAromStateShift","cAtomQFCharge","cAtomQFChargeBits","cAtomQFChargeShift","cAtomQFDepictedFeatures","cAtomQFENeighbourBits","cAtomQFENeighbourShift","cAtomQFENeighbours","cAtomQFExcludeGroup","cAtomQFFlatNitrogen","cAtomQFHeteroAromatic","cAtomQFHydrogen","cAtomQFHydrogenBits","cAtomQFHydrogenShift","cAtomQFIsNotStereo","cAtomQFIsStereo","cAtomQFMatchStereo","cAtomQFMoreNeighbours","cAtomQFNarrowing","cAtomQFNeighbourBits","cAtomQFNeighbourShift","cAtomQFNeighbours","cAtomQFNewRingSize","cAtomQFNewRingSizeBits","cAtomQFNewRingSizeShift","cAtomQFNoMoreNeighbours","cAtomQFNoOfBits","cAtomQFNot0ENeighbours","cAtomQFNot0Neighbours","cAtomQFNot0PiElectrons","cAtomQFNot1ENeighbour","cAtomQFNot1Neighbour","cAtomQFNot1PiElectron","cAtomQFNot2ENeighbours","cAtomQFNot2Neighbours","cAtomQFNot2PiElectrons","cAtomQFNot2RingBonds","cAtomQFNot3ENeighbours","cAtomQFNot3Neighbours","cAtomQFNot3RingBonds","cAtomQFNot4ENeighbours","cAtomQFNot4Neighbours","cAtomQFNot4RingBonds","cAtomQFNotChain","cAtomQFNotCharge0","cAtomQFNotChargeNeg","cAtomQFNotChargePos","cAtomQFPiElectronBits","cAtomQFPiElectronShift","cAtomQFPiElectrons","cAtomQFRingSize0","cAtomQFRingState","cAtomQFRingStateBits","cAtomQFRingStateShift","cAtomQFRxnParityBits","cAtomQFRxnParityHint","cAtomQFRxnParityInvert","cAtomQFRxnParityRacemize","cAtomQFRxnParityRetain","cAtomQFRxnParityShift","cAtomQFSimpleFeatures","cAtomQFSmallRingSize","cAtomQFSmallRingSizeBits","cAtomQFSmallRingSizeShift","cAtomQFStereoState","cAtomQFStereoStateBits","cAtomQFStereoStateShift","cAtomRadicalState","cAtomRadicalStateD","cAtomRadicalStateNone","cAtomRadicalStateS","cAtomRadicalStateShift","cAtomRadicalStateT","cAtomValence","cBondCIPParityEorP","cBondCIPParityNone","cBondCIPParityProblem","cBondCIPParityZorM","cBondParityEor1","cBondParityNone","cBondParityUnknown","cBondParityZor2","cBondQFAllFeatures","cBondQFAromState","cBondQFAromStateBits","cBondQFAromStateShift","cBondQFAromatic","cBondQFBondTypes","cBondQFBondTypesBits","cBondQFBondTypesShift","cBondQFBridge","cBondQFBridgeBits","cBondQFBridgeMin","cBondQFBridgeMinBits","cBondQFBridgeMinShift","cBondQFBridgeShift","cBondQFBridgeSpan","cBondQFBridgeSpanBits","cBondQFBridgeSpanShift","cBondQFDelocalized","cBondQFDepictedFeatures","cBondQFDouble","cBondQFMatchFormalOrder","cBondQFMatchStereo","cBondQFMetalLigand","cBondQFNarrowing","cBondQFNoOfBits","cBondQFNotAromatic","cBondQFNotRing","cBondQFQuadruple","cBondQFQuintuple","cBondQFRareBondTypes","cBondQFRareBondTypesBits","cBondQFRareBondTypesShift","cBondQFRing","cBondQFRingSize","cBondQFRingSizeBits","cBondQFRingSizeShift","cBondQFRingState","cBondQFRingStateBits","cBondQFRingStateShift","cBondQFSimpleFeatures","cBondQFSingle","cBondQFTriple","cBondTypeCross","cBondTypeDeleted","cBondTypeDelocalized","cBondTypeDouble","cBondTypeDown","cBondTypeIncreaseOrder","cBondTypeMaskSimple","cBondTypeMaskStereo","cBondTypeMetalLigand","cBondTypeQuadruple","cBondTypeQuintuple","cBondTypeSingle","cBondTypeTriple","cChiralityDiastereomers","cChiralityEpimers","cChiralityIsomerCountMask","cChiralityKnownEnantiomer","cChiralityMeso","cChiralityNotChiral","cChiralityRacemic","cChiralityUnknown","cChiralityUnknownEnantiomer","cCommonOxidationState","cDefaultAVBL","cDefaultAllowedPseudoAtoms","cDefaultAtomValence","cESRGroupBits","cESRMaxGroups","cESRTypeAbs","cESRTypeOr","cHelperAll","cHelperBitCIP","cHelperBitIncludeNitrogenParities","cHelperBitParities","cHelperBitRings","cHelperBitRingsSimple","cHelperBitSymmetrySimple","cHelperBitSymmetryStereoHeterotopicity","cHelperBitsStereo","cHelperNone","cHelperParities","cHelperRingsSimple","cHelperSymmetrySimple","cMaxAtomicNo","cMaxConnAtoms","cMoleculeColorDefault","cMoleculeColorNeutral","cPseudoAtomA","cPseudoAtomAttachmentPoint","cPseudoAtomPolymer","cPseudoAtomsAGroups","cPseudoAtomsAll","cPseudoAtomsAminoAcids","cPseudoAtomsHydrogenIsotops","wz","dN","getAngle","getAngleDif","getDefaultAverageBondLength","isAtomicNoElectronegative","isAtomicNoElectropositive","setDefaultAverageBondLength","fromMolecules","fromRxn","Ya","stt","kY","CATALYST_DELIMITER","INCLUDE_ALL","INCLUDE_CATALYSTS","INCLUDE_COORDS","INCLUDE_DEFAULT","INCLUDE_DRAWING_OBJECTS","INCLUDE_MAPPING","INCLUDE_RXN_CODE_ONLY","MOLECULE_DELIMITER","OBJECT_DELIMITER","PRODUCT_IDENTIFIER","RETAIN_REACTANT_AND_PRODUCT_ORDER","ensureCoordinates","NO","trunc","encode","keepAbsoluteCoordinates","sortByIDCode","_x","_register","MAX_SMALL_RING_SIZE","MODE_SMALL_AND_LARGE_RINGS","MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_ONLY","bitCount","getHexStringFromIndex","MX","getIndexFromHexString","IX","getKeyIDCode","getSimilarityAngleCosine","cJ","PK","RISK_HIGH","RISK_LOW","RISK_NAMES","RISK_NO","RISK_UNKNOWN","getHoseCodesFromDiastereotopicID","_X","$isInstance","$implements__java_io_Serializable","$implements__java_lang_CharSequence","$implements__java_lang_Cloneable","$implements__java_lang_Comparable","java","lang","Number$impl","copyOf","uq","Bq","getIdentityHashCode","getNextHash","getObjectIdentityHashCode","toDoubleFromUnsignedInt","HS","X8t","Hq","$gwt","dz","__errFn","__moduleName","__moduleBase","__softPermutationId","__computePropValue","permProps","VS","trt","X0","GenericEditorArea","GenericEditorToolbar","GenericUIHelper","Reaction","setOnChangeListener","removeOnChangeListener","isDestroyed","nI","CanvasEditor","registerCustomElement","customElements","HTMLElement","static","freeze","MOLECULE","REACTION","idcode","MODE_MOLECULE","readonly","setAttribute","removeAttribute","requestIdleCallback","MODE","CustomEvent","bubbles","dispatchEvent","connectedCallback","getAttribute","hasAttribute","disconnectedCallback","adoptedCallback","attributeChangedCallback","define","head","prepend","hw","ConformerGenerator","ForceFieldMMFF94","maxIts","gradTol","funcTol","minimise","changeCustomLabelPosition","rI","getNextCustomAtomLabel","iI","customLabelPosition","fI","includeCustomAtomLabelsAsALines","includeCustomAtomLabelsAsVLines","removeCustomAtomLabels","DI","QI","factorTextSize","autoCrop","autoCropMargin","fontWeight","strokeWidth","oI","UI","Resources","TextEncoder","registerFromUrl","import","href","nrt","fetch","fromEntries","process","getBuiltinModule","registerFromNodejs","readFileSync","LI","eot","Aot","not","Pot","Canonizer","rot","iot","fot","Dot","uot","Qot","MCS","oot","Uot","Lot","sot","yot","lot","hot","RingCollection","Tot","SDFileParser","cot","wot","got","dot","Bot","Transformer","vot","Util","Fot","defaultDatabase","doi","section","description","web","isbn","software","modes","dwar","parseDwar","defaultDatabase_js_1","minDepth","oclMolecule","minIonizations","maxIonizations","minReactions","maxReactions","openchemlib_1","observedMonoisotopicMass","getDatabase_1","getDatabase","reactionDb","REACT_ELEMENT_TYPE","Symbol","for","REACT_FRAGMENT_TYPE","jsxProd","maybeKey","propName","ref","$$typeof","reactJsxRuntime_production","Fragment","jsx","jsxs","jsxRuntimeModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","isReactComponent","setState","partialState","forceUpdate","pureComponentPrototype","isPureReactComponent","isArrayImpl","noop","ReactSharedInternals","hasOwnProperty","ReactElement","refProp","isValidElement","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","_init","_payload","maybeIterable","nextNamePrefix","thenable","fulfilledValue","resolveThenable","mapChildren","lazyInitializer","payload","_status","ctor","_result","moduleObject","reportGlobalError","reportError","ErrorEvent","event","cancelable","emit","Children","forEachFunc","forEachContext","only","react_production","Activity","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","__COMPILER_RUNTIME","__proto__","useMemoCache","cacheSignal","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","forwardRef","render","lazy","memo","compare","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","types","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","useEffectEvent","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","url","encodeURIComponent","Internals","findDOMNode","getCrossOriginStringAs","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","container","nodeType","containerInfo","implementation","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","media","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","err","reactDomModule","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","sortIndex","unstable_now","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","channel","port","port2","port1","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","task","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_next","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","Scheduler","ReactDOM","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","alternate","return","flags","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_ELEMENT_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_CACHE_SENTINEL","getIteratorFn","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","ReactDOMSharedInternals","sharedNotPendingObject","pending","method","valueStack","createCursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$1","x$2","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","priority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","getToStringValue","isCheckable","elem","nodeName","track","_valueTracker","valueField","descriptor","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","defaultSelected","updateTextarea","initTextarea","setTextContent","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","setProperty","cssFloat","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","noop$1","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","view","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","getModifierState","getEventModifierState","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","location","locale","which","SyntheticPointerEvent","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","date","datetime","email","month","password","tel","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","listeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$286","isSupported$jscomp$inline_427","element$jscomp$inline_428","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","shallowEqual","objA","objB","keysA","keysB","getLeafNode","getNodeForCharacterOffset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","queue","update","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","hostContext","itemProp","rel","onLoad","onError","src","isHostHoistableType","createFiberFromFragment","createFiberFromText","content","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","pendingChildren","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","restoreSuspendedTreeContext","suspendedContext","overflow","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","createCache","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","globalMostRecentTransitionTime","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledThenable","rejectedThenable","suspendedThenable","resolveLazy","lazyType","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","returnFiber","newChild","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","createChild","updateSlot","oldFiber","updateFromMap","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","revealOrder","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$60","revertLane","gesture","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$66","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateEvent","componentUpdateQueue","useEffectEventImpl","nextImpl","impl","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$69","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","identifierPrefix","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","_pendingMarkers","_retryCache","_transitions","deferHiddenOffscreenComponent","cachePool","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","markRef","replayFunctionComponent","updateClassComponent","contextType","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","canHydrateHydrationBoundary","nextPrimaryChildren","fallback","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","suspenseContext","shouldForceFallback","beginWork","state$102","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","canHydrateInstance","canHydrateTextInstance","updateActivityComponent","pooledCacheLanes","markUpdate","preloadInstanceAndSuspendIfNeeded","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","resource","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$106","bubbleProperties","completedWork","didBailout","newChildLanes","child$107","completeWork","pendingContext","nextResource","createElementNS","removeChild","appendChild","autoFocus","createTextNode","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$140","commitHostMount","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$201","propKey$217","propKey$222","propKey$227","setPropOnCustomElement","propKey$232","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$139","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","querySelector","maybeNodes","getHydratableHoistableCache","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","hideOrUnhideDehydratedBoundary","hostParentFiber","parent$141","parent$143","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","suspendedState","accumulateSuspenseyCommitOnFiber","matchMedia","getStyleKey","getStylesheetSelectorFromKey","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","reject","stylesheets","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$167","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","imgCount","imgBytes","suspenseyImages","waitingForImages","waitingForViewTransition","unsuspend","timeoutOffset","insertSuspendedStylesheets","commit","stylesheetTimer","estimatedBytesWithinLimit","getEntriesByType","bits","resourceEntries","transferSize","initiatorType","duration","isLikelyStaticResource","responseEnd","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","connection","downlink","estimateBandwidth","imgTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$6","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$4","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$165","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$7","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$170","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","actionScopeLane","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","FormData","i$jscomp$inline_1577","eventName$jscomp$inline_1578","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","tempB","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","unshift","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","hasSrc","hasSrcSet","propValue$184","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","hydrationInstance","nextNode","node$jscomp$0","nextNode$jscomp$0","suspenseInstance","_stashedDisplay","_stashedText","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","globalDocument","preloadSelector","getScriptKey","getScriptSelectorFromKey","scripts","adoptPreloadPropsForScript","link","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$243","resource$244","hrefLang","rawProps","styleProps","instance$249","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","onDefaultTransitionIndicator","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","canIntercept","pendingResolve","focusReset","scroll","handleNavigateComplete","isCancelled","startFakeNavigation","navigation","currentEntry","navigate","getState","history","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1840","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2347","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","hook$jscomp$inline_2348","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","hydrateRoot","clientModule","calculatePosition","spacingVertical","spacingHorizontal","calculateInnerBoxSize","calculatePositionSS","childrenBoxSize","MultilineText","verticalPosition","firstDX","_jsx","_Fragment","Text","horizontalPosition","textAnchor","_jsxs","fontSize","Arrow","headInflectionPoint","refX","markerEnd","getArrows","arrows","getArrowsSS","getLabel","getID","getBoxes","boxes","appendBoxes","prepareTree","prepareTreeSS","nodeRenderer","nodeRendererOptions","shouldSkipBranch","elementAndSize","parents","MarkerDef","markerWidth","markerHeight","refY","orient","SVGBoxesTree","arrowRendererOptions","positionOptions","svgSize","xmlns","viewBox","Rectangle","SVG","getPlus","getSVGViewBox","maxWidth","maxHeight","getMoleculeStyle","svgs","svgTag","styleString","styleArray","hasOwn","kebabCaseProperty","styleObjectToString","styleRectange","addStyleToSVG","currentWidth","shiftX","shiftY","shiftedSVG","joinSVGs","topLabel","getTopLabel","getBoxStyle","minSize","taxonomy","tempElement","visibility","getStringSize","textWith","positionX","dominantBaseline","fontFamily","getTaxonomy","fontStyle","nbTaxonomies","getNbTaxonomies","accuracy","maxIntensity","react_tree_svg_1","moleculeRenderer","getPeakInRange","rendererOptions","massAccuracy","fragmentation","cyclic","groupResults","allFragments","mass_fragmentation_1","oneFragment","appendResults","groupFragmentationResults","sortedResults","currentResult","lastFragment","groupedResults","ocl","fivePrimeTerminal","threePrimeTerminal","circular","fivePrime","parenthesisCounter","nucleotideType","desoxyNucleotides","oxyNucleotides","complementary","alcohol","monophosphate","diphosphate","triphosphate","furanThreeTerm","nucleotide","addFiveTerm","fiveTerm","furanThreeTerm_js_1","baseLoss_1","baseLoss","mfLosses","addFiveTermBaseLoss","abcdBaseLoss","loss","baseLoss_js_1","addInternalTerm_1","addInternalTerm","ter3","ter5","abw","aby","threeTerm","addThreeTermBaseLoss","wxyzBaseLoss","generateFragments_1","generateFragments","dh2o","zch2","mfparts","addFiveTermBaseLoss_1","addThreeTerm","addThreeTermBaseLoss_1","addFiveTerm_1","addThreeTerm_1","sequencesString","mfsArray","sequences","nucleotide_1","fragmentsArray","combined","aminoAcids","aa1","pKaC","pKaN","pKa","aa3","isoElectricPoint","aas","calculateForPh","calculateIEP","combine","calculateChart","yAbs","iep","white","aminoAcids_1","aaObject","acid","basic","currentAA","allowOneNeutralLoss","allowNeutralLoss","getAA_1","getAA","chargePeptide_1","chargePeptide","chargeOnePeptide","firstAA","lastAA","sequenceToMF_1","sequenceToMF","newMF","tmpmf","isOneLetterCode","nTerminal","cTerminal","convertAA1To3","newmf","aa1To3","nTerm","isDefaultCall","maxInternal","minInternal","cTerm","addCTerm","iTerm","addITerm","enzyme","minMissed","maxMissed","minResidue","maxResidue","minDigestions","maxDigestions","regexp","getRegexp","numCleavages","effectiveMaxDigestions","effectiveMinDigestions","useCombinatorial","startDigestions","nbResidue","fragmentStart","allResults","numDigestions","combinations","getCombinationsIterator","cleavageSites","createFragmentsFromCleavages","cleavageSet","currentFragment","fragmentStartIndex","mod","__esModule","__createBinding","splitPeptide_js_1","splitPeptide","IEP","getColorForIEP","calculateCharge","__importStar","__exportStar","fragmentPeptide_1","digestion","protonation","protonationPH","digests","peptide_1","digestPeptide","originalMFsArray","hasLinked","unlinked","fragmentPeptide","mfsArrayLinked","mf_generator_1","generateMFs","mfsArrayUnlinked","rangesString","require","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","pipe","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","Uint16Array","_pako","_pakoAction","_pakoOptions","inherits","processChunk","_createPako","transformTo","flush","cleanUp","onData","pako","utf8encode","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","registerPrevious","generatedError","lock","generateWorker","_compressWorker","loadAsync","support","defaults","external","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","_read","Buffer","newBufferFrom","allocBuffer","alloc","isBuffer","folder","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","characterData","onreadystatechange","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","race","immediate","windowBits","memLevel","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","data_type","_tr_init","deflateInit","deflateReset","deflateResetKeep","hcrc","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","dmax","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","sane","havedict","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","getPrototypeOf","nextTick","importScripts","args","clearImmediate","loadCommercials_1","loadCommercials","loadingPromises","fetchArrayBuffer_1","fetchArrayBuffer","jsZip","jszip_1","zip","__importDefault","mfFromGoogleSheet","urlReferences","fetchText_js_1","fetchText","papaparse_1","tsv","tsvReferences","formulas","references","referencesArray","modif","infoField","infoFields","ESI","MALDI","loadGoogleSheet_1","loadGoogleSheet","refUUID","uuid","refURL","mf_from_google_sheet_1","loadKnapSack_1","loadKnapSack","fileData","emdb","databases","generalMatcher","flattenResults","searchMSEM","msem","BaseSpectrumGenerator","peakWidthFct","assertNumber","assertInteger","resolvePeak","peakFWHM","peakWidth","peakShapeOptions","shapeOptions","cloneShape","widthLeft","widthRight","shapeLeft","shapeRight","SpectrumGenerator","maxPeakHeight","generateSpectrum","peakOptions","addPeaks","addBaseline","addNoise","getSpectrum","addPeak","firstValue","firstPoint","lastPoint","baselineFct","minPeakHeight","axis2D","peakCoordinates","convertWidthToFWHM","widthData","Spectrum2DGenerator","calculeIntervals","shapeGenerator","xPosition","yPosition","xIndex","minMaxZ","minZ","maxZ","SparseSpectrumGenerator","generateSparseSpectrum","peakArray","resolvedPeaks","computeHalfWidth","mergedIntervals","lastWrittenIndex","firstIndex","guardBefore","guardAfter","rest","generatorOptions","addPeaksOptions","joinX_1","joinX","sortX","entryA","entryB","composition","multiply","maxLines","sortY","calculateComposition","topY","move","power_1","square","Distribution_1","Distribution","closestPointX_js_1","joinX_js_1","multiply_js_1","power_js_1","getEmptyCache","emptyCache","multiplyY","setArray","other","ySorted","xSorted","relativeValue","distCopy","maxToOne","closestPointX","getDerivedCompositionInfo","shortComposition","shortLabel","isotopeLabel","IsotopicDistribution_1","IsotopicDistribution","spectrum_generator_1","getDerivedCompositionInfo_1","MINIMAL_FWHM","calculateOverlapFromDiff","diffs","sumPos","checkPeaks","extract","getCommonArray","pos2","array1Length","array2Length","confidence","partOriginal","cachedDistribution","partNaturalDeltaNeutrons","newDistribution","totalDistribution","isotopicDistribution","finalDistribution","sumBefore","getCSV","xLabel","yLabel","numberXDecimals","numberYDecimals","getMaxY","getSumY","getXY","compareNumbers","arithmeticMean","geometricMean","logMean","lnsum","grandMean","means","samples","truncatedMean","alreadySorted","harmonicMean","contraHarmonicMean","theMean","theVariance","standardError","robustMeanAndStdev","stdev","quartiles","quart","pooledStandardDeviation","pooledVariance","vari","itemCount","itemArray","covariance","mean1","mean2","cov","skewness","dev","kurtosis","entropy","eps","weightedMean","weightedStandardDeviation","weightedVariance","standardize","standardDev","arrayStat","cols","theSum","product","theProduct","sum1","sum2","medians","skew","kurt","standardDeviations","standardErrors","sqrtN","scatter","divisor","scores","zScores","cor","resultRow","sourceRow","weightedCovariance","weightedScatter","StatArray","commonExtractAndNormalize","extract1","extract2","common1","common2","info1","info2","COMMON_SECOND","COMMON_FIRST","extractAndNormalize","getIntersection","segment1","segment2","p0X","p0Y","p1X","p1Y","p2X","p2Y","s1X","s1Y","s2X","s2Y","setOptions","trapezoid","commonFactor","widthBottom","widthTop","setTrapezoid","setFromTo","setPeaks1","extracts","array1Extract","array1ExtractInfo","array2Extract","array2ExtractInfo","setPeaks2","getExtract1","getExtract2","getExtractInfo1","getExtractInfo2","newWidthBottom","newWidthTop","widthSlope","newFrom","newTo","getOverlap","getOverlapTrapezoid","small","big","targets","segment","intersection","calculateDiff","newSecond","pos1","previous2","getSimilarity","newPeaks1","newPeaks2","extractInfo1","extractInfo2","fastSimilarity","minSimilarity","bottom","experimentalData","flatEntries","widthFunction","checkTopBottom","auto","similarityProcessor","peaks_similarity_1","Comparator","isotopic_distribution_1","experimental","theoretical","experimentalInfo","quantity","_ref","quickSelectMedian","TheilSenRegression","slopes","medianSlope","cuts","theilSen","massShifts","similarities","shifts","ml_regression_theil_sen_1","shiftsPPM","EMDB","ms_spectrum_1","fromArray_js_1","fromMolecules_js_1","fromNucleicSequence_js_1","search_js_1","searchMSEM_js_1","searchSimilarity_js_1","require$$14","normed","normedY","databaseName","forceReload","loadContaminants","loadGoogleSheet_js_1","loadTest","fromArray","loadNeutralTest","maxC","replaceOrAppend","fromRange_js_1","fromRange","fromPeptidicSequence","fromPeptidicSequence_js_1","appendFragmentsInfo_js_1","fromNucleicSequence","nbEntries","preprocessEARanges_1","preprocessEARanges","targetEA","minCount","mfFromEA","maxElementError","maxTotalError","mfWhile","totalError","sumComposition","relativeComposition","filteredMFs","mfFor","nbCompositionAtoms","atomicRatio","absError","mfAtomicComposition","getMFAtomicComposition","atomicRatios","acc","allDBRefs","appendAllDBRefs","$ref","$id","appendURLs_1","appendURLs","collections","force","appendAllDBRefs_js_1","dbRef","unknowns","searchParams","URLSearchParams","postFetchJSON","includeDBRefs","excludedCollections","baseURL","groupsByCollection","collection","allSettled","addDataForOneCollection","postFetchJSON_js_1","_id","activeOrNatural","activity","activities","activityEntry","targetTaxonomies","normalizedActivity","route","fetchActiveOrNatural","includeDBRefs_js_1","ensureArray","pubmeds","patents","taxonomies","appendURLs_js_1","normalizeActivities_js_1","normalizeActivities","getAllowedEMs_1","getAllowedEMs","allowedEMs","searchWithIonizations_1","searchWithIonizations","realURL","parseMasses_js_1","parseMasses","getAllowedEMs_js_1","realMass","fetchJSON_js_1","fetchJSON","activesOrNaturals","prepareSearchParams","noStereoTautomerID","kwTaxonomies","kwActiveAgainst","kwBioassays","kwMeshTerms","kwTitles","minNbMassSpectra","searchWithIonizations_js_1","nbMassSpectra","nbPubmeds","nbPatents","activesOrNaturalsByMF","activesOrNaturals_js_1","grouped","nbNaturals","nbBioactives","naturalProduct","bioactive","groupedArray","titles","getTitles","searchMasses","modifications","modification","massShift","massSpectra_1","massSpectra","uniqueMolecules","routes","defaultRoutes","searchMasses_js_1","appendAndFilterSimilarity","uniqueMol","comparator","MSComparator","scored","compoundsURL","realCompoundsURL","searchParamsCompounds","pubmedID","searchInSilicoSpectraByMF","msComparator","searchInSilicoSpectraByMasses","technique","activesOrNaturalsByMF_js_1","compoundsFromMF_js_1","massSpectra_js_1","mfsFromEMs_js_1","pubmedCompounds_js_1","searchInSilicoSpectraByMF_js_1","searchInSilicoSpectraByMasses_js_1","mfsFromEMs","compoundsFromMF","activeOrNaturalDetails_js_1","activeOrNaturalDetails","STEMMERS","arabic","armenian","bulgarian","czech","danish","dutch","english","finnish","french","german","greek","hungarian","indian","indonesian","irish","italian","lithuanian","nepali","norwegian","portuguese","romanian","russian","serbian","slovenian","spanish","swedish","tamil","turkish","ukrainian","sanskrit","SPLITTERS","SUPPORTED_LANGUAGES","baseId","lastId","nano","BigInt","milli","MAX_ARGUMENT_FOR_STACK","safeArrayPush","arr","newArr","newArrLength","getNanosecondTimeViaPerformance","formatNanoseconds","getNanosecondsTime","WorkerGlobalScope","release","hrtime","bigint","uniqueId","getOwnProperty","sortTokenScorePredicate","intersect","arrays","tmp","getDocumentProperties","pathsLength","pathTokens","pathTokensLength","lat","lon","getNested","obj","mapDistanceToMeters","convertDistanceToMeters","distance","createError","removeVectorsFromHits","vectorProperties","hits","lastKey","isAsyncFunction","withIntersection","setIntersection","sets","set1","set2","withUnion","setUnion","union","setDifference","sleep","SharedArrayBuffer","Atomics","nil","wait","NO_LANGUAGE_WITH_CUSTOM_TOKENIZER","LANGUAGE_NOT_SUPPORTED","INVALID_STEMMER_FUNCTION_TYPE","MISSING_STEMMER","CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY","UNSUPPORTED_COMPONENT","COMPONENT_MUST_BE_FUNCTION","COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS","INVALID_SCHEMA_TYPE","DOCUMENT_ID_MUST_BE_STRING","DOCUMENT_ALREADY_EXISTS","DOCUMENT_DOES_NOT_EXIST","MISSING_DOCUMENT_PROPERTY","INVALID_DOCUMENT_PROPERTY","UNKNOWN_INDEX","INVALID_BOOST_VALUE","INVALID_FILTER_OPERATION","SCHEMA_VALIDATION_FAILURE","INVALID_SORT_SCHEMA_TYPE","CANNOT_SORT_BY_ARRAY","UNABLE_TO_SORT_ON_UNKNOWN_FIELD","SORT_DISABLED","UNKNOWN_GROUP_BY_PROPERTY","INVALID_GROUP_BY_PROPERTY","UNKNOWN_FILTER_PROPERTY","UNKNOWN_VECTOR_PROPERTY","INVALID_VECTOR_SIZE","INVALID_VECTOR_VALUE","INVALID_INPUT_VECTOR","WRONG_SEARCH_PROPERTY_TYPE","FACET_NOT_SUPPORTED","INVALID_DISTANCE_SUFFIX","INVALID_SEARCH_MODE","MISSING_VECTOR_AND_SECURE_PROXY","MISSING_TERM","INVALID_VECTOR_INPUT","PLUGIN_CRASHED","PLUGIN_SECURE_PROXY_NOT_FOUND","PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL","ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT","PLUGIN_COMPONENT_CONFLICT","template","replaceArgs","rawWidth","replacement","padEnd","sprintf","captureStackTrace","formatElapsedTime","formatted","getDocumentIndexId","validateSchema","schema","valueLength","isVectorType","vectorSize","getVectorSize","isArrayType","expectedType","getInnerType","subProp","IS_ARRAY_TYPE","boolean","enum","geopoint","INNER_TYPE","isGeoPointType","createInternalDocumentIDStore","idToInternalId","internalIdToId","save","store","orama","internalDocumentIDStore","internalIdToIdLength","internalIdItem","getInternalDocumentId","internalId","currentId","getDocumentIdFromInternalId","sharedInternalDocumentStore","docs","getMultiple","idsLength","getAll","rawDocument","createDocumentsStore","AVAILABLE_PLUGIN_HOOKS","getAllPluginsByHook","pluginsToRun","pluginsLength","plugins","plugin","OBJECT_COMPONENTS","FUNCTION_COMPONENTS","runSingleHook","hooks","runMultipleHook","docsOrIds","runAfterSearch","language","runBeforeSearch","AVLNode","updateHeight","getBalanceFactor","rotateLeft","newRoot","rotateRight","fromJSON","AVLTree","insertCount","rebalanceThreshold","insertNode","insertMultiple","rebalance","rebalanceNode","needRebalance","rebalancedNode","balanceFactor","findNodeByKey","isBalanced","removeNode","removeDocument","successorParent","successor","rangeSearch","greaterThan","inclusive","lessThan","FlatTree","numberToDocumentId","idSet","operation","operationKeys","operationType","resultSet","excludeValues","filterArr","idSets","curr","_boundedLevenshtein","term","word","rowMin","syncBoundedLevenshtein","isBounded","RadixNode","subWord","updateParent","addDocument","docID","findAllWords","docIDs","docId","wordLength","currentCharacter","childNode","edgeLabel","edgeLabelLength","commonPrefix","newEdgeLabel","newWordLabel","inbetweenNode","newNode","_findLevenshtein","originalTolerance","character","termLength","removeWord","removeDocumentByWord","getCommonPrefix","nodeJson","RadixTree","BKDNode","BKDTree","nodeMap","getPointKey","pointKey","existingNode","getDocIDsByCoordinates","removeDocByID","deleteNode","searchByRadius","highPrecision","distanceFn","vincentyDistance","haversineDistance","distA","distB","searchByPolygon","polygon","isInsidePolygon","isPointInPolygon","centroid","calculatePolygonCentroid","buildNodeMap","totalArea","centroidX","centroidY","polygonLength","areaSegment","centroidCoordinate","isInside","coord1","coord2","lat1","lat2","deltaLat","deltaLon","sinU1","cosU1","sinU2","cosU2","prevLambda","sinSigma","cosSigma","sinAlpha","cos2Alpha","cos2SigmaM","iterationLimit","sinLambda","cosLambda","uSquared","BoolNode","true","false","bool","BM25","matchingCount","docsCount","fieldLength","averageFieldLength","VectorIndex","vectors","internalDocumentId","Float32Array","magnitude","getMagnitude","whereFiltersIDs","targetVector","targetMagnitude","similarVectors","vectorId","dotProduct","findSimilarVectors","vectorLength","insertDocumentScoreParameters","tokens","avgFieldLength","fieldLengths","frequencies","insertTokenScoreParameters","token","tokenFrequency","tokenOccurrences","removeDocumentScoreParameters","removeTokenScoreParameters","vectorIndexes","searchableProperties","searchablePropertiesWithTypes","schemaType","tokenizer","insertVector","insertScalar","avlRebalanceThreshold","tokenize","insertScalarBuilder","elementsLength","removeScalar","innerSchemaType","calculateResultScores","bm25Relevance","resultsMap","boostPerProperty","keywordMatchesMap","documentIDs","oramaOccurrences","oramaFrequencies","termOccurrences","documentIDsLength","propertyMatches","bm25","propertiesToSearch","boost","relevance","keywordsCount","tokenFoundMap","tokenLength","termsFound","termsFoundLength","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","and","andFilters","orFilters","notFilter","allDocs","docsStore","filterKeys","filtersMap","filteredIDs","reqOperation","inside","distanceInMeters","addGeoResult","filteredIDsResults","addFindResult","operationOpt","operationValue","getSearchableProperties","getSearchablePropertiesWithTypes","rawIndexes","rawVectorIndexes","dumpVectorIndexes","savedIndexes","createGeoTokenScores","centerPoint","distances","searchByGeoWhereClause","indexTyped","geoInfo","isGeoOnly","geoProperty","geoOperation","isGeosearchOnlyQuery","bkdNode","keysLength","innerCreate","sortableDeniedProperties","sorter","enabled","sortableProperties","sortablePropertiesWithTypes","sorts","orderedDocsToRemove","orderedDocs","unsortableProperties","ensureOrderedDocsAreDeletedByProperty","ensureIsSorted","ensurePropertyIsSorted","stringSort","localeCompare","getLocale","numberSort","booleanSort","predicate","orderedDocsLength","sortBy","docIds","isDesc","indexOfA","indexOfB","isAIndexed","isBIndexed","getSortableProperties","getSortablePropertiesWithTypes","ensureOrderedDocsAreDeleted","createSorter","CHARCODE_REPLACE_MAPPING","replaceChar","step2List","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","step3List","icate","ative","alize","iciti","ical","ful","ness","mgr0","meq1","mgr1","s_v","stemmer","stem","re2","re3","re4","firstch","normalizeToken","withCache","normalizationCache","stopWords","stemmerSkipProperties","stringCharCode","replaceDiacritics","tokenizeSkipProperties","splitRule","trimTokens","allowDuplicates","createTokenizer","stemming","rules","addRule","rule","updateRule","removeRule","ruleId","getRule","getAllRules","matchesRule","conditions","condition","normalizedTerm","normalizedPattern","anchoring","matchesCondition","getMatchingRules","matchingRules","rawStore","validateComponents","components","defaultComponents","rawKey","documentsStore","skipHooks","errorProperty","beforeInsert","afterInsert","indexableProperties","indexablePropertiesWithTypes","indexableValues","validateDocumentProperty","sorting","sortableValues","indexAndSortDocument","innerInsertAsync","indexAndSortDocumentSync","innerInsertSync","ENUM_TYPE","STRING_NUMBER_TYPE","actualType","innerInsertMultipleAsync","batchSize","processNextBatch","startIndex","batch","waitTime","processAllBatches","afterInsertMultiple","innerInsertMultipleSync","remainingTime","innerInsertMultiple","beforeRemove","afterRemove","removeAsync","removeSync","removeMultiple","beforeRemoveMultiple","afterRemoveMultiple","docIdsForHooks","_removeMultiple","removeMultipleAsync","_removeMultipleSync","removeMultipleSync","MODE_FULLTEXT_SEARCH","MODE_HYBRID_SEARCH","MODE_VECTOR_SEARCH","sortAsc","sortDesc","sortingPredicateBuilder","getFacets","facetsConfig","facets","allIDs","facetKeys","facet","rangesLength","allDocsLength","facetValue","propertyType","facetValues","calculateNumberFacetBuilder","alreadyInsertedValues","calculateNumberFacet","calculateBooleanStringOrEnumFacetBuilder","calculateBooleanStringOrEnumFacet","currentFacet","stringFacetDefinition","sortingPredicate","DEFAULT_REDUCE","getInitialValue","ALLOWED_TYPES","getGroups","groupBy","propertiesLength","schemaProperties","returnedCount","maxResult","listOfValues","groupByKey","perValue","keyValue","calculateCombination","combinationsLength","combination","combinationLength","groupsLength","aggregationValue","arrs","applyPinningRules","pinningStore","uniqueDocsArray","searchTerm","allPromotions","consequence","promote","pinnedInternalIds","promotionsMap","positionsTaken","promotion","doc_id","existingPosition","unpinnedResults","pinnedResults","finalResults","pinnedByPosition","pinnedResult","unpinnedIndex","innerFullTextSearch","propertiesToSearchWithTypes","hasFilters","where","uniqueDocsIDs","defaultBM25Params","applyDefault","searchTerms","getPropValue","geoResults","fullTextSearch","timeStart","performSearchLogic","shouldCalculateFacets","distinctOn","includeVectors","isPreflight","preflight","docsWithIdAndScore","pinning","resultIDs","uniqueDocsArrayLength","idAndScore","fetchDocumentsWithDistinct","fetchDocuments","elapsed","beforeSearch","afterSearch","executeSearchAsync","innerVectorSearch","vectorIndex","searchVector","facetsResults","vectorProperty","newDoc","innerHybridSearch","fullTextIDs","maxScore","extractScore","minMaxScoreNormalization","vectorIDs","hybridWeights","textResults","vectorResults","maxTextScore","maxVectorScore","hasHybridWeights","textWeight","vectorWeight","mergedResults","textResultsLength","hybridScore","textScore","vectorScore","hybridScoreBuilder","hybridScoreValue","normalizeScore","vectorResultsLength","resultId","normalizedScore","existingRes","mergeAndRankResults","uniqueTokenScores","timeEnd","returningResults","hybridSearch","fullDoc","beforeUpdate","afterUpdate","newId","updateAsync","updateSync","updateMultiple","beforeUpdateMultiple","afterUpdateMultiple","beforeInsertMultiple","docsLength","newIds","updateMultipleAsync","updateMultipleSync","kInsertions","kRemovals","bytes","decimals","proxy","abortController","lastInteractionParams","chatModel","conversationID","messages","initPromise","initialMessages","generateRandomID","ask","askStream","fetchAnswer","abortAnswer","triggerStateChange","getMessages","clearSession","regenerateLast","role","interactionId","sources","translatedQuery","errorMessage","stateIdx","addEmptyAssistantMessage","chatStream","model","findLast","onStateChange","getPlugin","pluginExtras","systemPrompt","pluginParams","chat","getComponents","pluginComponents","internalDocumentStore","beforeUpsert","afterUpsert","beforeUpsertMultiple","afterUpsertMultiple","afterCreate","runAfterCreate","existingDoc","upsertAsync","upsertSync","docsToInsert","docsToUpdate","idsToUpdate","updateResults","insertResults","upsertMultipleAsync","upsertMultipleSync","getActivitiesDB_1","getActivitiesDB","queryFields","activitiesDB","orama_1","assay","getPatentsDB_1","abstractsLimit","patentsDB","abstract","nbCompounds","patent","lastCallback","getPubmedsDB_1","pubmedsDB","meshHeadings","pubmed","meshHeading","descriptorName","article","compounds","getTaxonomiesDB_1","getTaxonomiesDB","superkingdom","kingdom","phylum","class","family","genus","species","searchActivitiesDB_1","searchActivitiesDB","terms","maxNbEntries","minScore","queryResult","activityDocument","searchPatentsDB_1","searchPatentsDB","boostFields","searchPubmedsDB_1","searchPubmedsDB","searchTaxonomiesDB_1","searchTaxonomiesDB","taxonomiesDB","currentTaxonomy","taxonomiesDocument","summarizeEmptyTerms_1","summarizeEmptyTerms","patentsMaxNbEntries","nbCompoundsEntryB","nbCompoundsEntryA","pubmedsMaxNbEntries","activitiesMaxNbEntries","taxonomiesMaxNbEntries","isInitialized","summarize","creatingDB","createDB","taxonomyRanks","field","taxonomyRanks_js_1","rankLimit","taxonomyRanks_1","reachedRankLimit","branch","cleanEmptyBranches","assignSlot","residues","residue","paper","usedSlots","appendInternals","maxNumberLines","internals","appendResidues_1","appendResidues","Peptide","Nucleotide","nextChar","nextNextChar","replacements","fromBegin","getModifiedReplacement","alternatives","getUnknownReplacement","removeStartEndParenthesis","nbOver","nbUnder","unknownResidue","SYMBOLS","replaced","modifiedResidue","residueCode","alternativeOneLetter","ALTERNATIVES","methods","names","registerMethods","_name","addMethodNames","getOwnPropertyNames","getMethodsFor","_names","getPaper_browser","getPaper","svg_js_1","appendResiduesPosition_1","appendResiduesPosition","leftRightBorders","spaceBetweenResidues","xPos","xOld","getPaper_1","textWidth","getTextWidth","setPaper","nbLines","topPosition","bottomPosition","labelFontFamily","labelSize","analysisResult","numberResidues","merge","textColor","similariy","minQuantity","showInternals","minRelativeQuantity","appendRows","allResidues","appendRowsInformation","filtered","firstResidue","lastResidue","fromResidue","toResidue","maxNbOver","maxNbUnder","script","plain","drawInternals_1","drawInternals","spaceBetweenInternalLines","onmouseover","onmouseout","drawLabel_1","drawReplacements","drawTerminals_1","drawTerminals","linecap","drawLabel","drawSequence_1","drawSequence","sequenceSVG","analysisResults","parsing","drawOptions","appendResults_1","appendRows_1","appendInternals_1","BUFFER","IDX","HEX","num","getPeakWidthFct","massOptions","groupColumnsBySign","mapped","positiveRows","columnIndexInK","addUniqueKeyToColumns","cssls","XtX","XtY","Pset","choXtX","isPositiveDefinite","luXtX","isSingular","sortedPset","sortedEset","sortCollectionSet","cols2Solve","vars","optimality","iter","Fset","gradientTolerance","subMatrixColumn","subtract","setColumn","Jset","fullSet","colIndex","notPset","maxColumnIndex","fcnnls","initialisation","checkMatrix","infeasIndex","Hset","ones","hRowColIdx","negRowColIdx","alphaMin","minIdx","minColumn","minColumnIndex","rowVector","setSubMatrix","idx2zero","newParam","columnVector","to1DArray","processFromACell","rowsMapping","columnsMapping","currentMappingID","nonZeroColumns","nonZeroRows","rowsTodo","nextRow","internalRow","createMatrixIndexes","matrices","submatrix","appendSubMatrix","blockFcnnls_1","blockFcnnls","fullMatrix","emptyRow","originalMatrix","splitMatrix_js_1","reconstructed","ml_matrix_1","ml_fcnnls_1","fcnnlsVector","partialReconstructed","mfsDeconvolution","customMFs","getPeakWidthFct_1","getCentroids","newMFs","uuid_1","addIsotopicDistributionAndCheckMF","buildCombined","blockFcnnls_js_1","relativeIntensity","absoluteQuantity","relativeQuantity","matchingScore","wClone","filteredReconstructed","getPeakWidthFct_js_1","EMDBPkg","SpectrumPkg","getBestPeaks"],"mappings":"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AAO,YAET,CACE3K,OACE,+MACF6K,YACE,oFACFlzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,eAET,CACE3K,OACE,4MACF6K,YACE,oFACFlzC,GAAI,SACJ6O,GAAI,QACJmkC,MAAO,UAET,CACE3K,OACE,wMACF6K,YACE,iFACFlzC,GAAI,SACJ6O,GAAI,mBACJmkC,MAAO,iBAET,CACE3K,OACE,wMACF6K,YACE,iFACFlzC,GAAI,SACJ6O,GAAI,mBACJmkC,MAAO,eAET,CACE3K,OACE,wLACF6K,YACE,gFACFlzC,GAAI,WACJ6O,GAAI,mBACJmkC,MAAO,cAET,CACE3K,OAAQ3rE,OAAOy2E,GAAG,sLAClBD,YACE,8EACFlzC,GAAI,SACJ6O,GAAI,QACJmkC,MAAO,cAET,CACE3K,OAAQ3rE,OAAOy2E,GAAG,sLAClBD,YACE,8EACFlzC,GAAI,SACJ6O,GAAI,QACJmkC,MAAO,aAET,CACE3K,OACE,mLACF6K,YACE,8EACFlzC,GAAI,UACJ6O,GAAI,UACJmkC,MAAO,aAET,CACE3K,OACE,kRACF6K,YACE,oFACFlzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,eAET,CACE3K,OACE,iIACF6K,YACE,4EACFlzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,eAET,CACE3K,OACE,+KACF6K,YACE,4EACFlzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,cAET,CACE3K,OACE,+JACF6K,YACE,oEACFlzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,WAET,CACE3K,OACE,2JACF6K,YAAa,4DACblzC,GAAI,WACJ6O,GAAI,mBACJmkC,MAAO,mBAET,CACE3K,OACE,8IACF6K,YAAa,4DACblzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,YAET,CACE3K,OACE,yJACF6K,YAAa,6DACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,mBAET,CACE3K,OACE,iJACF6K,YAAa,2DACblzC,GAAI,WACJ6O,GAAI,mBACJmkC,MAAO,YAET,CACE3K,OACE,qJACF6K,YAAa,wDACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,eAET,CACE3K,OACE,qJACF6K,YAAa,yDACblzC,GAAI,WACJ6O,GAAI,mBACJmkC,MAAO,aAET,CACE3K,OACE,iJACF6K,YAAa,wDACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,kBAET,CACE3K,OACE,+IACF6K,YAAa,yDACblzC,GAAI,WACJ6O,GAAI,SACJmkC,MAAO,WAET,CACE3K,OAAQ3rE,OAAOy2E,GAAG,mFAClBD,YAAa,qDACblzC,GAAI,aACJ6O,GAAI,UACJmkC,MAAO,kBAET,CACE3K,OACE,qJACF6K,YAAa,wDACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,iBAET,CACE3K,OACE,0JACF6K,YAAax2E,OAAOy2E,GAAG,wDACvBnzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,sBAET,CACE3K,OACE,sJACF6K,YAAa,wDACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,2BAET,CACE3K,OACE,gGACF6K,YAAa,qDACblzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,WAET,CACE3K,OACE,kIACF6K,YAAa,sDACblzC,GAAI,SACJ6O,GAAI,UACJmkC,MAAO,cAET,CACE3K,OACE,8HACF6K,YAAa,uDACblzC,GAAI,WACJ6O,GAAI,UACJmkC,MAAO,YAET,CACE3K,OACE,kJACF6K,YAAa,qDACblzC,GAAI,UACJ6O,GAAI,mBACJmkC,MAAO,6BAET,CACE3K,OACE,mJACF6K,YAAax2E,OAAOy2E,GAAG,qDACvBnzC,GAAI,UACJ6O,GAAI,mBACJmkC,MAAO,6BAET,CACE3K,OACE,mJACF6K,YAAa,qDACblzC,GAAI,UACJ6O,GAAI,mBACJmkC,MAAO,6BAET,CACE3K,OACE,kFACF6K,YAAa,mDACblzC,GAAI,aACJ6O,GAAI,mBACJmkC,MAAO,kBAET,CACE3K,OACE,iIACF6K,YAAa,mDACblzC,GAAI,SACJ6O,GAAI,mBACJmkC,MAAO,WAET,CACE3K,OACE,sEACF6K,YAAa,gDACblzC,GAAI,aACJ6O,GAAI,UACJmkC,MAAO,kBAET,CACE3K,O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