criterion 0.8.1.0 → 1.6.5.0
raw patch · 51 files changed
Files
- Criterion.hs +50/−10
- Criterion/Analysis.hs +156/−47
- Criterion/Analysis/Types.hs +0/−96
- Criterion/Config.hs +0/−146
- Criterion/EmbeddedData.hs +29/−0
- Criterion/Environment.hs +0/−63
- Criterion/IO.hs +76/−24
- Criterion/IO/Printf.hs +23/−20
- Criterion/Internal.hs +177/−198
- Criterion/Main.hs +108/−181
- Criterion/Main/Options.hs +249/−0
- Criterion/Measurement.hs +0/−74
- Criterion/Monad.hs +37/−17
- Criterion/Monad/Internal.hs +45/−0
- Criterion/Report.hs +221/−101
- Criterion/Types.hs +289/−124
- README.markdown +641/−20
- app/Options.hs +51/−0
- app/Report.hs +32/−0
- changelog.md +386/−0
- criterion.cabal +155/−39
- examples/BadReadFile.hs +17/−0
- examples/Comparison.hs +3/−5
- examples/ConduitVsPipes.hs +34/−0
- examples/ExtensibleCLI.hs +38/−0
- examples/Fibber.hs +13/−35
- examples/GoodReadFile.hs +12/−0
- examples/Judy.hs +1/−2
- examples/LICENSE +26/−0
- examples/Maps.hs +82/−0
- examples/Overhead.hs +35/−0
- examples/Quotes.hs +12/−0
- examples/Tiny.hs +0/−28
- examples/criterion-examples.cabal +135/−0
- examples/tiny.html +0/−668
- templates/criterion.css +113/−72
- templates/criterion.js +870/−0
- templates/default.tpl +139/−0
- templates/js/excanvas-r3.min.js +0/−1
- templates/js/jquery-1.6.4.min.js +0/−4
- templates/js/jquery.criterion.js +0/−103
- templates/js/jquery.flot-0.7.min.js +0/−6
- templates/json.tpl +1/−0
- templates/report.tpl +0/−229
- tests/Cleanup.hs +123/−0
- tests/Properties.hs +34/−0
- tests/Sanity.hs +55/−0
- tests/Tests.hs +45/−0
- www/fibber-screenshot.png binary
- www/fibber.html +1159/−0
- www/report.html +1145/−0
Criterion.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE RecordWildCards #-} -- | -- Module : Criterion--- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -12,20 +12,60 @@ module Criterion (- Benchmarkable(..)+ -- * Benchmarkable code+ Benchmarkable+ -- * Creating a benchmark suite , Benchmark- , Pure+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable+ , bench+ , bgroup+ -- ** Running a benchmark , nf , whnf , nfIO , whnfIO- , bench- , bcompare- , bgroup- , runBenchmark- , runAndAnalyse- , runNotAnalyse+ , nfAppIO+ , whnfAppIO+ -- * For interactive use+ , benchmark+ , benchmarkWith+ , benchmark'+ , benchmarkWith' ) where -import Criterion.Internal+import Control.Monad (void)+import Criterion.IO.Printf (note)+import Criterion.Internal (runAndAnalyseOne)+import Criterion.Main.Options (defaultConfig)+import Criterion.Measurement (initializeTime)+import Criterion.Monad (withConfig) import Criterion.Types++-- | Run a benchmark interactively, and analyse its performance.+benchmark :: Benchmarkable -> IO ()+benchmark bm = void $ benchmark' bm++-- | Run a benchmark interactively, analyse its performance, and+-- return the analysis.+benchmark' :: Benchmarkable -> IO Report+benchmark' = benchmarkWith' defaultConfig++-- | Run a benchmark interactively, and analyse its performance.+benchmarkWith :: Config -> Benchmarkable -> IO ()+benchmarkWith cfg bm = void $ benchmarkWith' cfg bm++-- | Run a benchmark interactively, analyse its performance, and+-- return the analysis.+benchmarkWith' :: Config -> Benchmarkable -> IO Report+benchmarkWith' cfg bm = do+ initializeTime+ withConfig cfg $ do+ _ <- note "benchmarking...\n"+ Analysed rpt <- runAndAnalyseOne 0 "function" bm+ return rpt
Criterion/Analysis.hs view
@@ -1,7 +1,9 @@-{-# LANGUAGE DeriveDataTypeable, RecordWildCards, UnboxedTuples #-}+{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE BangPatterns, DeriveDataTypeable, RecordWildCards #-}+ -- | -- Module : Criterion.Analysis--- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -12,7 +14,7 @@ module Criterion.Analysis (- Outliers (..)+ Outliers(..) , OutlierEffect(..) , OutlierVariance(..) , SampleAnalysis(..)@@ -23,57 +25,75 @@ , classifyOutliers , noteOutliers , outlierVariance+ , resolveAccessors+ , validateAccessors+ , regress ) where -import Control.Monad (when)-import Criterion.Analysis.Types-import Criterion.IO.Printf (note)-import Criterion.Measurement (secs)-import Criterion.Monad (Criterion)+import Control.Arrow (second)+import Control.Monad (unless, when)+import Control.Monad.Reader (ask)+import Control.Monad.Trans+import Control.Monad.Trans.Except+import Criterion.IO.Printf (note, prolix)+import Criterion.Measurement (secs, threshold)+import Criterion.Monad (Criterion, getGen)+import Criterion.Types import Data.Int (Int64)-import Data.Monoid (Monoid(..))+import Data.List.NonEmpty (NonEmpty(..))+import Data.Maybe (fromJust)+import Prelude ()+import Prelude.Compat import Statistics.Function (sort) import Statistics.Quantile (weightedAvg)-import Statistics.Resampling (Resample, resample)+import Statistics.Regression (bootstrapRegress, olsRegress)+import Statistics.Resampling (Estimator(..),resample) import Statistics.Sample (mean)-import Statistics.Types (Estimator(..), Sample)-import System.Random.MWC (withSystemRandom)+import Statistics.Sample.KernelDensity (kde)+import Statistics.Types (Sample)+import System.Random.MWC (GenIO)+import qualified Data.List as List+import qualified Data.List.NonEmpty as NE+import qualified Data.Map as Map+import qualified Data.Vector as V+import qualified Data.Vector.Generic as G import qualified Data.Vector.Unboxed as U import qualified Statistics.Resampling.Bootstrap as B+import qualified Statistics.Types as B -- | Classify outliers in a data set, using the boxplot technique. classifyOutliers :: Sample -> Outliers classifyOutliers sa = U.foldl' ((. outlier) . mappend) mempty ssa where outlier e = Outliers { samplesSeen = 1- , lowSevere = if e <= loS then 1 else 0+ , lowSevere = if e <= loS && e < hiM then 1 else 0 , lowMild = if e > loS && e <= loM then 1 else 0 , highMild = if e >= hiM && e < hiS then 1 else 0- , highSevere = if e >= hiS then 1 else 0+ , highSevere = if e >= hiS && e > loM then 1 else 0 }- loS = q1 - (iqr * 3)- loM = q1 - (iqr * 1.5)- hiM = q3 + (iqr * 1.5)- hiS = q3 + (iqr * 3)- q1 = weightedAvg 1 4 ssa- q3 = weightedAvg 3 4 ssa- ssa = sort sa- iqr = q3 - q1-{-# INLINE classifyOutliers #-}+ !loS = q1 - (iqr * 3)+ !loM = q1 - (iqr * 1.5)+ !hiM = q3 + (iqr * 1.5)+ !hiS = q3 + (iqr * 3)+ q1 = weightedAvg 1 4 ssa+ q3 = weightedAvg 3 4 ssa+ ssa = sort sa+ iqr = q3 - q1 -- | Compute the extent to which outliers in the sample data affect -- the sample mean and standard deviation.-outlierVariance :: B.Estimate -- ^ Bootstrap estimate of sample mean.- -> B.Estimate -- ^ Bootstrap estimate of sample- -- standard deviation.- -> Double -- ^ Number of original iterations.- -> OutlierVariance+outlierVariance+ :: B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample mean.+ -> B.Estimate B.ConfInt Double -- ^ Bootstrap estimate of sample+ -- standard deviation.+ -> Double -- ^ Number of original iterations.+ -> OutlierVariance outlierVariance µ σ a = OutlierVariance effect desc varOutMin where- (# effect, desc #) | varOutMin < 0.01 = (# Unaffected, "no" #)- | varOutMin < 0.1 = (# Slight, "slight" #)- | varOutMin < 0.5 = (# Moderate, "moderate" #)- | otherwise = (# Severe, "severe" #)+ ( effect, desc ) | varOutMin < 0.01 = (Unaffected, "no")+ | varOutMin < 0.1 = (Slight, "a slight")+ | varOutMin < 0.5 = (Moderate, "a moderate")+ | otherwise = (Severe, "a severe") varOutMin = (minBy varOut 1 (minBy cMax 0 µgMin)) / σb2 varOut c = (ac / a) * (σb2 - ac * σg2) where ac = a - c σb = B.estPoint σ@@ -117,23 +137,112 @@ , anStdDev = B.scale f anStdDev } --- | Perform a bootstrap analysis of a non-parametric sample.-analyseSample :: Double -- ^ Confidence interval (between 0 and 1).- -> Sample -- ^ Sample data.- -> Int -- ^ Number of resamples to perform- -- when bootstrapping.- -> IO SampleAnalysis-analyseSample ci samples numResamples = do- let ests = [Mean,StdDev]- resamples <- withSystemRandom $ \gen ->- resample gen ests numResamples samples :: IO [Resample]- let [estMean,estStdDev] = B.bootstrapBCA ci samples ests resamples- ov = outlierVariance estMean estStdDev (fromIntegral $ U.length samples)- return SampleAnalysis {- anMean = estMean- , anStdDev = estStdDev+-- | Perform an analysis of a measurement.+analyseSample :: Int -- ^ Experiment number.+ -> String -- ^ Experiment name.+ -> V.Vector Measured -- ^ Sample data.+ -> ExceptT String Criterion Report+analyseSample i name meas = do+ Config{..} <- ask+ let ests = [Mean,StdDev]+ -- The use of filter here throws away very-low-quality+ -- measurements when bootstrapping the mean and standard+ -- deviations. Without this, the numbers look nonsensical when+ -- very brief actions are measured.+ stime = measure (measTime . rescale) .+ G.filter ((>= threshold) . measTime) $ meas+ n = G.length meas+ s = G.length stime+ _ <- lift $ prolix "bootstrapping with %d of %d samples (%d%%)\n"+ s n ((s * 100) `quot` n)+ gen <- lift getGen+ rs <- mapM (\(ps,r) -> regress gen ps r meas) $+ ((["iters"],"time"):regressions)+ resamps <- liftIO $ resample gen ests resamples stime+ (estMean,estStdDev) <- case B.bootstrapBCA confInterval stime resamps of+ [estMean',estStdDev'] -> return (estMean',estStdDev')+ ests' -> throwE $ "analyseSample: Expected two estimation functions, received: " ++ show ests'+ let ov = outlierVariance estMean estStdDev (fromIntegral n)+ an = SampleAnalysis {+ anRegress = rs+ , anMean = estMean+ , anStdDev = estStdDev , anOutlierVar = ov }+ return Report {+ reportNumber = i+ , reportName = name+ , reportKeys = measureKeys+ , reportMeasured = meas+ , reportAnalysis = an+ , reportOutliers = classifyOutliers stime+ , reportKDEs = [uncurry (KDE "time") (kde 128 stime)]+ }++-- | Regress the given predictors against the responder.+--+-- Errors may be returned under various circumstances, such as invalid+-- names or lack of needed data.+--+-- See 'olsRegress' for details of the regression performed.+regress :: GenIO+ -> [String] -- ^ Predictor names.+ -> String -- ^ Responder name.+ -> V.Vector Measured+ -> ExceptT String Criterion Regression+regress gen predNames respName meas = do+ when (G.null meas) $+ throwE "no measurements"+ accs <- ExceptT . return $ validateAccessors predNames respName+ let unmeasured = [n | (n, Nothing) <- map (second ($ G.head meas)) accs]+ unless (null unmeasured) $+ throwE $ "no data available for " ++ renderNames unmeasured+ (r,ps) <- case map ((`measure` meas) . (fromJust .) . snd) accs of+ (r':ps') -> return (r',ps')+ [] -> throwE "regress: Expected at least one accessor"+ Config{..} <- ask+ (coeffs,r2) <- liftIO $+ bootstrapRegress gen resamples confInterval olsRegress ps r+ return Regression {+ regResponder = respName+ , regCoeffs = Map.fromList (zip (predNames ++ ["y"]) (G.toList coeffs))+ , regRSquare = r2+ }++singleton :: NonEmpty a -> Bool+singleton (_ :| []) = True+singleton _ = False++-- | Given a list of accessor names (see 'measureKeys'), return either+-- a mapping from accessor name to function or an error message if+-- any names are wrong.+resolveAccessors :: [String]+ -> Either String [(String, Measured -> Maybe Double)]+resolveAccessors names =+ case unresolved of+ [] -> Right [(n, a) | (n, Just (a,_)) <- accessors]+ _ -> Left $ "unknown metric " ++ renderNames unresolved+ where+ unresolved = [n | (n, Nothing) <- accessors]+ accessors = flip map names $ \n -> (n, Map.lookup n measureAccessors)++-- | Given predictor and responder names, do some basic validation,+-- then hand back the relevant accessors.+validateAccessors :: [String] -- ^ Predictor names.+ -> String -- ^ Responder name.+ -> Either String [(String, Measured -> Maybe Double)]+validateAccessors predNames respName = do+ when (null predNames) $+ Left "no predictors specified"+ let names = respName:predNames+ dups = map NE.head . List.filter (not . singleton) .+ NE.group . List.sort $ names+ unless (null dups) $+ Left $ "duplicated metric " ++ renderNames dups+ resolveAccessors names++renderNames :: [String] -> String+renderNames = List.intercalate ", " . map show -- | Display a report of the 'Outliers' present in a 'Sample'. noteOutliers :: Outliers -> Criterion ()
− Criterion/Analysis/Types.hs
@@ -1,96 +0,0 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, OverloadedStrings,- RecordWildCards #-}--- |--- Module : Criterion.Analysis.Types--- Copyright : (c) 2011 Bryan O'Sullivan------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Analysis types.--module Criterion.Analysis.Types- (- Outliers (..)- , OutlierEffect(..)- , OutlierVariance(..)- , SampleAnalysis(..)- ) where--import Control.DeepSeq (NFData(rnf))-import Data.Binary (Binary)-import Data.Data (Data, Typeable)-import Data.Int (Int64)-import Data.Monoid (Monoid(..))-import GHC.Generics (Generic)-import qualified Statistics.Resampling.Bootstrap as B---- | Outliers from sample data, calculated using the boxplot--- technique.-data Outliers = Outliers {- samplesSeen :: {-# UNPACK #-} !Int64- , lowSevere :: {-# UNPACK #-} !Int64- -- ^ More than 3 times the interquartile range (IQR) below the- -- first quartile.- , lowMild :: {-# UNPACK #-} !Int64- -- ^ Between 1.5 and 3 times the IQR below the first quartile.- , highMild :: {-# UNPACK #-} !Int64- -- ^ Between 1.5 and 3 times the IQR above the third quartile.- , highSevere :: {-# UNPACK #-} !Int64- -- ^ More than 3 times the IQR above the third quartile.- } deriving (Eq, Read, Show, Typeable, Data, Generic)--instance Binary Outliers-instance NFData Outliers---- | A description of the extent to which outliers in the sample data--- affect the sample mean and standard deviation.-data OutlierEffect = Unaffected -- ^ Less than 1% effect.- | Slight -- ^ Between 1% and 10%.- | Moderate -- ^ Between 10% and 50%.- | Severe -- ^ Above 50% (i.e. measurements- -- are useless).- deriving (Eq, Ord, Read, Show, Typeable, Data, Generic)--instance Binary OutlierEffect-instance NFData OutlierEffect--instance Monoid Outliers where- mempty = Outliers 0 0 0 0 0- mappend = addOutliers--addOutliers :: Outliers -> Outliers -> Outliers-addOutliers (Outliers s a b c d) (Outliers t w x y z) =- Outliers (s+t) (a+w) (b+x) (c+y) (d+z)-{-# INLINE addOutliers #-}---- | Analysis of the extent to which outliers in a sample affect its--- standard deviation (and to some extent, its mean).-data OutlierVariance = OutlierVariance {- ovEffect :: OutlierEffect- -- ^ Qualitative description of effect.- , ovDesc :: String- -- ^ Brief textual description of effect.- , ovFraction :: Double- -- ^ Quantitative description of effect (a fraction between 0 and 1).- } deriving (Eq, Read, Show, Typeable, Data, Generic)--instance Binary OutlierVariance--instance NFData OutlierVariance where- rnf OutlierVariance{..} = rnf ovEffect `seq` rnf ovDesc `seq` rnf ovFraction---- | Result of a bootstrap analysis of a non-parametric sample.-data SampleAnalysis = SampleAnalysis {- anMean :: B.Estimate- , anStdDev :: B.Estimate- , anOutlierVar :: OutlierVariance- } deriving (Eq, Read, Show, Typeable, Data, Generic)--instance Binary SampleAnalysis--instance NFData SampleAnalysis where- rnf SampleAnalysis{..} =- rnf anMean `seq` rnf anStdDev `seq` rnf anOutlierVar
− Criterion/Config.hs
@@ -1,146 +0,0 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-}---- |--- Module : Criterion.Config--- Copyright : (c) 2009, 2010 Bryan O'Sullivan------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Benchmarking configuration.--module Criterion.Config- (- Config(..)- , PrintExit(..)- , MatchType(..)- , Verbosity(..)- , defaultConfig- , fromLJ- , ljust- ) where--import Data.Data (Data, Typeable)-import Data.Function (on)-import Data.Monoid (Monoid(..), Last(..))-import GHC.Generics (Generic)--data MatchType = Prefix | Glob- deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data,- Generic)---- | Control the amount of information displayed.-data Verbosity = Quiet- | Normal- | Verbose- deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data,- Generic)---- | Print some information and exit, without running any benchmarks.-data PrintExit = Nada -- ^ Do not actually print-and-exit. (Default.)- | List -- ^ Print a list of known benchmarks.- | Version -- ^ Print version information (if known).- | Help -- ^ Print a help\/usaage message.- deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data,- Generic)--instance Monoid PrintExit where- mempty = Nada- mappend = max---- | Top-level program configuration.-data Config = Config {- cfgBanner :: Last String -- ^ The \"version\" banner to print.- , cfgConfInterval :: Last Double -- ^ Confidence interval to use.- , cfgMatchType :: Last MatchType -- ^ Kind of matching to use for benchmark names.- , cfgPerformGC :: Last Bool -- ^ Whether to run the GC between passes.- , cfgPrintExit :: PrintExit -- ^ Whether to print information and exit.- , cfgResamples :: Last Int -- ^ Number of resamples to perform.- , cfgResults :: Last FilePath -- ^ File to write raw results to.- , cfgReport :: Last FilePath -- ^ Filename of report.- , cfgSamples :: Last Int -- ^ Number of samples to collect.- , cfgSummaryFile :: Last FilePath -- ^ Filename of summary CSV.- , cfgCompareFile :: Last FilePath -- ^ Filename of the comparison CSV.- , cfgTemplate :: Last FilePath -- ^ Filename of report template.- , cfgVerbosity :: Last Verbosity -- ^ Whether to run verbosely.- , cfgJUnitFile :: Last FilePath -- ^ Filename of JUnit report.- , cfgMeasure :: Last Bool -- ^ Whether to do any measurement.- } deriving (Eq, Read, Show, Typeable, Generic)--instance Monoid Config where- mempty = emptyConfig- mappend = appendConfig---- | A configuration with sensible defaults.-defaultConfig :: Config-defaultConfig = Config {- cfgBanner = ljust "I don't know what version I am."- , cfgConfInterval = ljust 0.95- , cfgMatchType = ljust Prefix- , cfgPerformGC = ljust True- , cfgPrintExit = Nada- , cfgResamples = ljust (100 * 1000)- , cfgResults = mempty- , cfgReport = mempty- , cfgSamples = ljust 100- , cfgSummaryFile = mempty- , cfgCompareFile = mempty- , cfgTemplate = ljust "report.tpl"- , cfgVerbosity = ljust Normal- , cfgJUnitFile = mempty- , cfgMeasure = ljust True- }---- | Constructor for 'Last' values.-ljust :: a -> Last a-ljust = Last . Just---- | Deconstructor for 'Last' values.-fromLJ :: (Config -> Last a) -- ^ Field to access.- -> Config -- ^ Default to use.- -> a-fromLJ f cfg = case f cfg of- Last Nothing -> fromLJ f defaultConfig- Last (Just a) -> a--emptyConfig :: Config-emptyConfig = Config {- cfgBanner = mempty- , cfgConfInterval = mempty- , cfgMatchType = mempty- , cfgPerformGC = mempty- , cfgPrintExit = mempty- , cfgReport = mempty- , cfgResamples = mempty- , cfgResults = mempty- , cfgSamples = mempty- , cfgSummaryFile = mempty- , cfgCompareFile = mempty- , cfgTemplate = mempty- , cfgVerbosity = mempty- , cfgJUnitFile = mempty- , cfgMeasure = mempty- }--appendConfig :: Config -> Config -> Config-appendConfig a b =- Config {- cfgBanner = app cfgBanner a b- , cfgConfInterval = app cfgConfInterval a b- , cfgMatchType = app cfgMatchType a b- , cfgPerformGC = app cfgPerformGC a b- , cfgPrintExit = app cfgPrintExit a b- , cfgReport = app cfgReport a b- , cfgResamples = app cfgResamples a b- , cfgResults = app cfgResults a b- , cfgSamples = app cfgSamples a b- , cfgSummaryFile = app cfgSummaryFile a b- , cfgCompareFile = app cfgCompareFile a b- , cfgTemplate = app cfgTemplate a b- , cfgVerbosity = app cfgVerbosity a b- , cfgJUnitFile = app cfgJUnitFile a b- , cfgMeasure = app cfgMeasure a b- }- where app f = mappend `on` f
+ Criterion/EmbeddedData.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE TemplateHaskell #-}++-- |+-- Module : Criterion.EmbeddedData+-- Copyright : (c) 2017 Ryan Scott+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- When the @embed-data-files@ @Cabal@ flag is enabled, this module exports+-- the contents of various files (the @data-files@ from @criterion.cabal@, as+-- well as a minimized version of Chart.js) embedded as a 'ByteString'.+module Criterion.EmbeddedData+ ( dataFiles+ , chartContents+ ) where++import Data.ByteString (ByteString)+import Data.FileEmbed (embedDir, embedFile)+import Language.Haskell.TH.Syntax (runIO)+import qualified Language.Javascript.Chart as Chart++dataFiles :: [(FilePath, ByteString)]+dataFiles = $(embedDir "templates")++chartContents :: ByteString+chartContents = $(embedFile =<< runIO (Chart.file Chart.Chart))
− Criterion/Environment.hs
@@ -1,63 +0,0 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, TypeOperators #-}---- |--- Module : Criterion.Environment--- Copyright : (c) 2009, 2010 Bryan O'Sullivan------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Code for measuring and characterising the execution environment.--module Criterion.Environment- (- Environment(..)- , measureEnvironment- ) where--import Control.Monad (replicateM_)-import Control.Monad.Trans (liftIO)-import Criterion.Analysis (analyseMean)-import Criterion.IO.Printf (note)-import Criterion.Measurement (getTime, runForAtLeast, time_)-import Criterion.Monad (Criterion)-import qualified Data.Vector.Unboxed as U-import Data.Data (Data, Typeable)-import GHC.Generics (Generic)---- | Measured aspects of the execution environment.-data Environment = Environment {- envClockResolution :: {-# UNPACK #-} !Double- -- ^ Clock resolution (in seconds).- , envClockCost :: {-# UNPACK #-} !Double- -- ^ The cost of a single clock call (in seconds).- } deriving (Eq, Read, Show, Typeable, Data, Generic)---- | Measure the execution environment.-measureEnvironment :: Criterion Environment-measureEnvironment = do- _ <- note "warming up\n"- (_, seed, _) <- liftIO $ runForAtLeast 0.1 10000 resolution- _ <- note "estimating clock resolution...\n"- clockRes <- thd3 `fmap` liftIO (runForAtLeast 0.5 seed resolution) >>=- uncurry analyseMean- _ <- note "estimating cost of a clock call...\n"- clockCost <- cost (min (100000 * clockRes) 1) >>= uncurry analyseMean- return $ Environment {- envClockResolution = clockRes- , envClockCost = clockCost- }- where- resolution k = do- times <- U.replicateM (k+1) getTime- return (U.tail . U.filter (>=0) . U.zipWith (-) (U.tail times) $ times,- U.length times)- cost timeLimit = liftIO $ do- let timeClock k = time_ (replicateM_ k getTime)- _ <- timeClock 1- (_, iters, elapsed) <- runForAtLeast 0.01 10000 timeClock- times <- U.replicateM (ceiling (timeLimit / elapsed)) $ timeClock iters- return (U.map (/ fromIntegral iters) times, U.length times)- thd3 (_, _, c) = c
Criterion/IO.hs view
@@ -1,7 +1,9 @@+{-# LANGUAGE Trustworthy #-} {-# LANGUAGE OverloadedStrings #-}+ -- | -- Module : Criterion.IO--- Copyright : (c) 2009, 2010 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -13,49 +15,67 @@ module Criterion.IO ( header- , hGetResults- , hPutResults- , readResults- , writeResults+ , headerRoot+ , critVersion+ , hGetRecords+ , hPutRecords+ , readRecords+ , writeRecords+ , ReportFileContents+ , readJSONReports+ , writeJSONReports ) where -import Criterion.Types (ResultForest, ResultTree(..))+import qualified Data.Aeson as Aeson import Data.Binary (Binary(..), encode) import Data.Binary.Get (runGetOrFail) import Data.Binary.Put (putByteString, putWord16be, runPut)-import Data.ByteString.Char8 ()+import qualified Data.ByteString.Char8 as B+import Criterion.Types (Report(..))+import Data.List (intercalate) import Data.Version (Version(..)) import Paths_criterion (version)-import System.IO (Handle, IOMode(..), withFile)+import System.IO (Handle, IOMode(..), withFile, hPutStrLn, stderr) import qualified Data.ByteString.Lazy as L +-- | The header identifies a criterion data file. This contains+-- version information; there is no expectation of cross-version+-- compatibility. header :: L.ByteString header = runPut $ do- putByteString "criterio"+ putByteString (B.pack headerRoot) mapM_ (putWord16be . fromIntegral) (versionBranch version) -hGetResults :: Handle -> IO (Either String ResultForest)-hGetResults handle = do- let fixup = reverse . nukem . reverse- nukem (Compare k _ : rs) = let (cs, rs') = splitAt k rs- in Compare k (fixup (reverse cs)) : nukem rs'- nukem (r : rs) = r : nukem rs- nukem _ = []+-- | The magic string we expect to start off the header.+headerRoot :: String+headerRoot = "criterion"++-- | The current version of criterion, encoded into a string that is+-- used in files.+critVersion :: String+critVersion = intercalate "." $ map show $ versionBranch version++-- | Read all records from the given 'Handle'.+hGetRecords :: Binary a => Handle -> IO (Either String [a])+hGetRecords handle = do bs <- L.hGet handle (fromIntegral (L.length header)) if bs == header- then (Right . fixup) `fmap` readAll handle- else return $ Left "unexpected header"+ then Right `fmap` readAll handle+ else return $ Left $ "unexpected header, expected criterion version: "++show (versionBranch version) -hPutResults :: Handle -> ResultForest -> IO ()-hPutResults handle rs = do+-- | Write records to the given 'Handle'.+hPutRecords :: Binary a => Handle -> [a] -> IO ()+hPutRecords handle rs = do L.hPut handle header mapM_ (L.hPut handle . encode) rs -readResults :: FilePath -> IO (Either String ResultForest)-readResults path = withFile path ReadMode hGetResults+-- | Read all records from the given file.+readRecords :: Binary a => FilePath -> IO (Either String [a])+readRecords path = withFile path ReadMode hGetRecords -writeResults :: FilePath -> ResultForest -> IO ()-writeResults path rs = withFile path WriteMode (flip hPutResults rs)+-- | Write records to the given file.+writeRecords :: Binary a => FilePath -> [a] -> IO ()+writeRecords path rs = withFile path WriteMode (flip hPutRecords rs) readAll :: Binary a => Handle -> IO [a] readAll handle = do@@ -65,3 +85,35 @@ Left (_, _, err) -> fail err Right (bs', _, a) -> (a:) `fmap` go bs' go =<< L.hGetContents handle++-- | On disk we store (name,version,reports), where+-- 'version' is the version of Criterion used to generate the file.+type ReportFileContents = (String,String,[Report])++-- | Alternative file IO with JSON instances. Read a list of reports+-- from a .json file produced by criterion.+--+-- If the version does not match exactly, this issues a warning.+readJSONReports :: FilePath -> IO (Either String ReportFileContents)+readJSONReports path =+ do bstr <- L.readFile path+ let res = Aeson.eitherDecode bstr+ case res of+ Left _ -> return res+ Right (tg,vers,_)+ | tg == headerRoot && vers == critVersion -> return res+ | otherwise ->+ do hPutStrLn stderr $ "Warning, readJSONReports: mismatched header, expected "+ ++ show (headerRoot,critVersion) ++ " received " ++ show (tg,vers)+ return res++-- | Write a list of reports to a JSON file. Includes a header, which+-- includes the current Criterion version number. This should be+-- the inverse of `readJSONReports`.+writeJSONReports :: FilePath -> [Report] -> IO ()+writeJSONReports fn rs =+ let payload :: ReportFileContents+ payload = (headerRoot, critVersion, rs)+ in L.writeFile fn $ Aeson.encode payload++
Criterion/IO/Printf.hs view
@@ -1,6 +1,7 @@+{-# LANGUAGE Trustworthy #-} -- | -- Module : Criterion.IO.Printf--- Copyright : (c) 2009, 2010 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -16,22 +17,25 @@ , note , printError , prolix- , summary+ , writeCsv ) where import Control.Monad (when)+import Control.Monad.Reader (ask, asks) import Control.Monad.Trans (liftIO)-import Criterion.Config (Config, Verbosity(..), cfgSummaryFile, cfgVerbosity, fromLJ)-import Criterion.Monad (Criterion, getConfig, getConfigItem)-import Data.Monoid (getLast)-import System.IO (Handle, stderr, stdout)-import qualified Text.Printf (HPrintfType, hPrintf)+import Criterion.Monad (Criterion)+import Criterion.Types (Config(csvFile, verbosity), Verbosity(..))+import Data.Foldable (forM_)+import System.IO (Handle, hFlush, stderr, stdout) import Text.Printf (PrintfArg)+import qualified Data.ByteString.Lazy as B+import qualified Data.Csv as Csv+import qualified Text.Printf (HPrintfType, hPrintf) -- First item is the action to print now, given all the arguments -- gathered together so far. The second item is the function that -- will take a further argument and give back a new PrintfCont.-data PrintfCont = PrintfCont (IO ()) (PrintfArg a => a -> PrintfCont)+data PrintfCont = PrintfCont (IO ()) (forall a . PrintfArg a => a -> PrintfCont) -- | An internal class that acts like Printf/HPrintf. --@@ -43,13 +47,13 @@ instance CritHPrintfType (Criterion a) where chPrintfImpl check (PrintfCont final _)- = do x <- getConfig- when (check x) (liftIO final)+ = do x <- ask+ when (check x) (liftIO (final >> hFlush stderr >> hFlush stdout)) return undefined instance CritHPrintfType (IO a) where chPrintfImpl _ (PrintfCont final _)- = final >> return undefined+ = final >> hFlush stderr >> hFlush stdout >> return undefined instance (CritHPrintfType r, PrintfArg a) => CritHPrintfType (a -> r) where chPrintfImpl check (PrintfCont _ anotherArg) x@@ -80,20 +84,19 @@ -- | Print a \"normal\" note. note :: (CritHPrintfType r) => String -> r-note = chPrintf ((> Quiet) . fromLJ cfgVerbosity) stdout+note = chPrintf ((> Quiet) . verbosity) stdout -- | Print verbose output. prolix :: (CritHPrintfType r) => String -> r-prolix = chPrintf ((== Verbose) . fromLJ cfgVerbosity) stdout+prolix = chPrintf ((== Verbose) . verbosity) stdout -- | Print an error message. printError :: (CritHPrintfType r) => String -> r printError = chPrintf (const True) stderr --- | Add to summary CSV (if applicable)-summary :: String -> Criterion ()-summary msg- = do sumOpt <- getConfigItem (getLast . cfgSummaryFile)- case sumOpt of- Just fn -> liftIO $ appendFile fn msg- Nothing -> return ()+-- | Write a record to a CSV file.+writeCsv :: Csv.ToRecord a => a -> Criterion ()+writeCsv val = do+ csv <- asks csvFile+ forM_ csv $ \fn ->+ liftIO . B.appendFile fn . Csv.encode $ [val]
Criterion/Internal.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE BangPatterns, RecordWildCards #-} -- | -- Module : Criterion--- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -12,235 +12,213 @@ module Criterion.Internal (- runBenchmark- , runAndAnalyse- , runNotAnalyse- , prefix+ runAndAnalyse+ , runAndAnalyseOne+ , runOne+ , runFixedIters ) where -import Control.Monad (foldM, replicateM_, when, mplus)-import Control.Monad.Trans (liftIO)-import Data.Binary (encode)-import qualified Data.ByteString.Lazy as L-import Criterion.Analysis (Outliers(..), OutlierEffect(..), OutlierVariance(..),- SampleAnalysis(..), analyseSample,- classifyOutliers, noteOutliers)-import Criterion.Config (Config(..), Verbosity(..), fromLJ)-import Criterion.Environment (Environment(..))-import Criterion.IO (header, hGetResults)-import Criterion.IO.Printf (note, prolix, summary)-import Criterion.Measurement (getTime, runForAtLeast, secs, time_)-import Criterion.Monad (Criterion, getConfig, getConfigItem)-import Criterion.Report (Report(..), report)-import Criterion.Types (Benchmark(..), Benchmarkable(..),- Result(..), ResultForest, ResultTree(..))-import qualified Data.Vector.Unboxed as U-import Data.Monoid (getLast)-import Statistics.Resampling.Bootstrap (Estimate(..))-import Statistics.Types (Sample)+import qualified Data.Aeson as Aeson+import Control.DeepSeq (rnf)+import Control.Exception (evaluate)+import Control.Monad (foldM, forM_, void, when, unless)+import Control.Monad.Catch (MonadMask, finally)+import Control.Monad.Reader (ask, asks)+import Control.Monad.Trans (MonadIO, liftIO)+import Control.Monad.Trans.Except+import qualified Data.Binary as Binary+import Data.Int (Int64)+import qualified Data.ByteString.Lazy.Char8 as L+import Criterion.Analysis (analyseSample, noteOutliers)+import Criterion.IO (header, headerRoot, critVersion, readJSONReports, writeJSONReports)+import Criterion.IO.Printf (note, printError, prolix, writeCsv)+import Criterion.Measurement (runBenchmark, runBenchmarkable_, secs)+import Criterion.Monad (Criterion)+import Criterion.Report (report)+import Criterion.Types hiding (measure)+import Criterion.Measurement.Types.Internal (fakeEnvironment)+import qualified Data.Map as Map+import qualified Data.Vector as V+import Statistics.Types (Estimate(..),ConfInt(..),confidenceInterval,cl95,confidenceLevel) import System.Directory (getTemporaryDirectory, removeFile)-import System.IO (IOMode(..), SeekMode(..), hClose, hSeek, openBinaryFile,- openBinaryTempFile)-import System.Mem (performGC)+import System.IO (IOMode(..), hClose, openTempFile, openFile, hPutStr, openBinaryFile) import Text.Printf (printf) --- | Run a single benchmark, and return timings measured when--- executing it.-runBenchmark :: Benchmarkable b => Environment -> b -> Criterion Sample-runBenchmark env b = do- _ <- liftIO $ runForAtLeast 0.1 10000 (`replicateM_` getTime)- let minTime = envClockResolution env * 1000- (testTime, testIters, _) <- liftIO $ runForAtLeast (min minTime 0.1) 1 (run b)- _ <- prolix "ran %d iterations in %s\n" testIters (secs testTime)- cfg <- getConfig- let newIters = ceiling $ minTime * testItersD / testTime- sampleCount = fromLJ cfgSamples cfg- newItersD = fromIntegral newIters- testItersD = fromIntegral testIters- estTime = (fromIntegral sampleCount * newItersD *- testTime / testItersD)- when (fromLJ cfgVerbosity cfg > Normal || estTime > 5) $- note "collecting %d samples, %d iterations each, in estimated %s\n"- sampleCount newIters (secs estTime)- -- Run the GC to make sure garabage created by previous benchmarks- -- don't affect this benchmark.- liftIO performGC- times <- liftIO . fmap (U.map ((/ newItersD) . subtract (envClockCost env))) .- U.replicateM sampleCount $ do- when (fromLJ cfgPerformGC cfg) $ performGC- time_ (run b newIters)- return times+-- | Run a single benchmark.+runOne :: Int -> String -> Benchmarkable -> Criterion DataRecord+runOne i desc bm = do+ Config{..} <- ask+ (meas,timeTaken) <- liftIO $ runBenchmark bm timeLimit+ when (timeTaken > timeLimit * 1.25) .+ void $ prolix "measurement took %s\n" (secs timeTaken)+ return (Measurement i desc meas) --- | Run a single benchmark and analyse its performance.-runAndAnalyseOne :: Benchmarkable b => Environment -> String -> b- -> Criterion (Sample,SampleAnalysis,Outliers)-runAndAnalyseOne env _desc b = do- times <- runBenchmark env b- ci <- getConfigItem $ fromLJ cfgConfInterval- numResamples <- getConfigItem $ fromLJ cfgResamples- _ <- prolix "analysing with %d resamples\n" numResamples- an@SampleAnalysis{..} <- liftIO $ analyseSample ci times numResamples- let OutlierVariance{..} = anOutlierVar- let wibble = case ovEffect of- Unaffected -> "unaffected" :: String- Slight -> "slightly inflated"- Moderate -> "moderately inflated"- Severe -> "severely inflated"- bs "mean" anMean- summary ","- bs "std dev" anStdDev- summary "\n"- vrb <- getConfigItem $ fromLJ cfgVerbosity- let out = classifyOutliers times- when (vrb == Verbose || (ovEffect > Unaffected && vrb > Quiet)) $ do- noteOutliers out- _ <- note "variance introduced by outliers: %.3f%%\n" (ovFraction * 100)- _ <- note "variance is %s by outliers\n" wibble- return ()- return (times,an,out)- where bs :: String -> Estimate -> Criterion ()- bs d e = do _ <- note "%s: %s, lb %s, ub %s, ci %.3f\n" d- (secs $ estPoint e)- (secs $ estLowerBound e) (secs $ estUpperBound e)- (estConfidenceLevel e)- summary $ printf "%g,%g,%g"- (estPoint e)- (estLowerBound e) (estUpperBound e)+-- | Analyse a single benchmark.+analyseOne :: Int -> String -> V.Vector Measured -> Criterion DataRecord+analyseOne i desc meas = do+ Config{..} <- ask+ _ <- prolix "analysing with %d resamples\n" resamples+ erp <- runExceptT $ analyseSample i desc meas+ case erp of+ Left err -> printError "*** Error: %s\n" err+ Right rpt@Report{..} -> do+ let SampleAnalysis{..} = reportAnalysis+ OutlierVariance{..} = anOutlierVar+ wibble = case ovEffect of+ Unaffected -> "unaffected" :: String+ Slight -> "slightly inflated"+ Moderate -> "moderately inflated"+ Severe -> "severely inflated"+ (builtin, others) = splitAt 1 anRegress+ let r2 n = printf "%.3f R\178" n+ forM_ builtin $ \Regression{..} ->+ case Map.lookup "iters" regCoeffs of+ Nothing -> return ()+ Just t -> bs secs "time" t >> bs r2 "" regRSquare+ bs secs "mean" anMean+ bs secs "std dev" anStdDev+ forM_ others $ \Regression{..} -> do+ _ <- bs r2 (regResponder ++ ":") regRSquare+ forM_ (Map.toList regCoeffs) $ \(prd,val) ->+ bs (printf "%.3g") (" " ++ prd) val+ writeCsv+ (desc,+ estPoint anMean, fst $ confidenceInterval anMean, snd $ confidenceInterval anMean,+ estPoint anStdDev, fst $ confidenceInterval anStdDev, snd $ confidenceInterval anStdDev+ )+ when (verbosity == Verbose || (ovEffect > Slight && verbosity > Quiet)) $ do+ when (verbosity == Verbose) $ noteOutliers reportOutliers+ _ <- note "variance introduced by outliers: %d%% (%s)\n"+ (round (ovFraction * 100) :: Int) wibble+ return ()+ _ <- note "\n"+ return (Analysed rpt)+ where bs :: (Double -> String) -> String -> Estimate ConfInt Double -> Criterion ()+ bs f metric e@Estimate{..} =+ note "%-20s %-10s (%s .. %s%s)\n" metric+ (f estPoint) (f $ fst $ confidenceInterval e) (f $ snd $ confidenceInterval e)+ (let cl = confIntCL estError+ str | cl == cl95 = ""+ | otherwise = printf ", ci %.3f" (confidenceLevel cl)+ in str+ ) -plotAll :: [Result] -> Criterion ()-plotAll descTimes = do- report (zipWith (\n (Result d t a o) -> Report n d t a o) [0..] descTimes)+-- | Run a single benchmark and analyse its performance.+runAndAnalyseOne :: Int -> String -> Benchmarkable -> Criterion DataRecord+runAndAnalyseOne i desc bm = do+ Measurement _ _ meas <- runOne i desc bm+ analyseOne i desc meas -- | Run, and analyse, one or more benchmarks. runAndAnalyse :: (String -> Bool) -- ^ A predicate that chooses -- whether to run a benchmark by its -- name.- -> Environment -> Benchmark -> Criterion ()-runAndAnalyse p env bs' = do- mbResultFile <- getConfigItem $ getLast . cfgResults- (resultFile, handle) <- liftIO $- case mbResultFile of+runAndAnalyse select bs = do+ mbJsonFile <- asks jsonFile+ (jsonFile, handle) <- liftIO $+ case mbJsonFile of Nothing -> do tmpDir <- getTemporaryDirectory- openBinaryTempFile tmpDir "criterion.dat"+ openTempFile tmpDir "criterion.json" Just file -> do- handle <- openBinaryFile file ReadWriteMode+ handle <- openFile file WriteMode return (file, handle)- liftIO $ L.hPut handle header+ -- The type we write to the file is ReportFileContents, a triple.+ -- But here we ASSUME that the tuple will become a JSON array.+ -- This assumption lets us stream the reports to the file incrementally:+ liftIO $ hPutStr handle $ "[ \"" ++ headerRoot ++ "\", " +++ "\"" ++ critVersion ++ "\", [ " - let go !k (pfx, Benchmark desc b)- | p desc' = do _ <- note "\nbenchmarking %s\n" desc'- summary (show desc' ++ ",") -- String will be quoted- (x,an,out) <- runAndAnalyseOne env desc' b- let result = Single $ Result desc' x an out- liftIO $ L.hPut handle (encode result)- return $! k + 1- | otherwise = return (k :: Int)- where desc' = prefix pfx desc- go !k (pfx, BenchGroup desc bs) =- foldM go k [(prefix pfx desc, b) | b <- bs]- go !k (pfx, BenchCompare bs) = do- l <- foldM go 0 [(pfx, b) | b <- bs]- let result = Compare l []- liftIO $ L.hPut handle (encode result)- return $! l + k- _ <- go 0 ("", bs')+ for select bs $ \idx desc bm -> do+ _ <- note "benchmarking %s\n" desc+ Analysed rpt <- runAndAnalyseOne idx desc bm+ unless (idx == 0) $+ liftIO $ hPutStr handle ", "+ liftIO $ L.hPut handle (Aeson.encode (rpt::Report)) - rts <- (either fail return =<<) . liftIO $ do- hSeek handle AbsoluteSeek 0- rs <- hGetResults handle- hClose handle- case mbResultFile of- Just _ -> return rs- _ -> removeFile resultFile >> return rs+ liftIO $ hPutStr handle " ] ]\n"+ liftIO $ hClose handle - mbCompareFile <- getConfigItem $ getLast . cfgCompareFile- case mbCompareFile of- Nothing -> return ()- Just compareFile -> do- liftIO $ writeFile compareFile $ resultForestToCSV rts+ rpts <- liftIO $ do+ res <- readJSONReports jsonFile+ case res of+ Left err -> error $ "error reading file "++jsonFile++":\n "++show err+ Right (_,_,rs) ->+ case mbJsonFile of+ Just _ -> return rs+ _ -> removeFile jsonFile >> return rs - let rs = flatten rts- plotAll rs- junit rs+ rawReport rpts+ report rpts+ json rpts+ junit rpts -runNotAnalyse :: (String -> Bool) -- ^ A predicate that chooses++-- | Write out raw binary report files. This has some bugs, including and not+-- limited to #68, and may be slated for deprecation.+rawReport :: [Report] -> Criterion ()+rawReport reports = do+ mbRawFile <- asks rawDataFile+ case mbRawFile of+ Nothing -> return ()+ Just file -> liftIO $ do+ handle <- openBinaryFile file ReadWriteMode+ L.hPut handle header+ forM_ reports $ \rpt ->+ L.hPut handle (Binary.encode rpt)+ hClose handle+++-- | Run a benchmark without analysing its performance.+runFixedIters :: Int64 -- ^ Number of loop iterations to run.+ -> (String -> Bool) -- ^ A predicate that chooses -- whether to run a benchmark by its -- name. -> Benchmark -> Criterion ()-runNotAnalyse p bs' = goQuickly "" bs'- where goQuickly :: String -> Benchmark -> Criterion ()- goQuickly pfx (Benchmark desc b)- | p desc' = do _ <- note "benchmarking %s\n" desc'- runOne b- | otherwise = return ()- where desc' = prefix pfx desc- goQuickly pfx (BenchGroup desc bs) =- mapM_ (goQuickly (prefix pfx desc)) bs- goQuickly pfx (BenchCompare bs) = mapM_ (goQuickly pfx) bs-- runOne b = do- samples <- getConfigItem $ fromLJ cfgSamples- liftIO $ run b samples--prefix :: String -> String -> String-prefix "" desc = desc-prefix pfx desc = pfx ++ '/' : desc--flatten :: ResultForest -> [Result]-flatten [] = []-flatten (Single r : rs) = r : flatten rs-flatten (Compare _ crs : rs) = flatten crs ++ flatten rs--resultForestToCSV :: ResultForest -> String-resultForestToCSV = unlines- . ("Reference,Name,% faster than reference" :)- . map (\(ref, n, p) -> printf "%s,%s,%.0f" ref n p)- . top- where- top :: ResultForest -> [(String, String, Double)]- top [] = []- top (Single _ : rts) = top rts- top (Compare _ rts' : rts) = cmpRT rts' ++ top rts-- cmpRT :: ResultForest -> [(String, String, Double)]- cmpRT [] = []- cmpRT (Single r : rts) = cmpWith r rts- cmpRT (Compare _ rts' : rts) = case getReference rts' of- Nothing -> cmpRT rts- Just r -> cmpRT rts' ++ cmpWith r rts-- cmpWith :: Result -> ResultForest -> [(String, String, Double)]- cmpWith _ [] = []- cmpWith ref (Single r : rts) = cmp ref r : cmpWith ref rts- cmpWith ref (Compare _ rts' : rts) = cmpRT rts' ++- cmpWith ref rts' ++- cmpWith ref rts-- getReference :: ResultForest -> Maybe Result- getReference [] = Nothing- getReference (Single r : _) = Just r- getReference (Compare _ rts' : rts) = getReference rts' `mplus`- getReference rts+runFixedIters iters select bs =+ for select bs $ \_idx desc bm -> do+ _ <- note "benchmarking %s\n" desc+ liftIO $ runBenchmarkable_ bm iters -cmp :: Result -> Result -> (String, String, Double)-cmp ref r = (description ref, description r, percentFaster)- where- percentFaster = (meanRef - meanR) / meanRef * 100+-- | Iterate over benchmarks.+for :: (MonadMask m, MonadIO m) => (String -> Bool) -> Benchmark+ -> (Int -> String -> Benchmarkable -> m ()) -> m ()+for select bs0 handle = go (0::Int) ("", bs0) >> return ()+ where+ go !idx (pfx, Environment mkenv cleanenv mkbench)+ | shouldRun pfx mkbench = do+ e <- liftIO $ do+ ee <- mkenv+ evaluate (rnf ee)+ return ee+ go idx (pfx, mkbench e) `finally` liftIO (cleanenv e)+ | otherwise = return idx+ go idx (pfx, Benchmark desc b)+ | select desc' = do handle idx desc' b; return $! idx + 1+ | otherwise = return idx+ where desc' = addPrefix pfx desc+ go idx (pfx, BenchGroup desc bs) =+ foldM go idx [(addPrefix pfx desc, b) | b <- bs] - meanRef = mean ref- meanR = mean r+ shouldRun pfx mkbench =+ any (select . addPrefix pfx) . benchNames . mkbench $ fakeEnvironment - mean = estPoint . anMean . sampleAnalysis+-- | Write summary JSON file (if applicable)+json :: [Report] -> Criterion ()+json rs+ = do jsonOpt <- asks jsonFile+ case jsonOpt of+ Just fn -> liftIO $ writeJSONReports fn rs+ Nothing -> return () -- | Write summary JUnit file (if applicable)-junit :: [Result] -> Criterion ()+junit :: [Report] -> Criterion () junit rs- = do junitOpt <- getConfigItem (getLast . cfgJUnitFile)+ = do junitOpt <- asks junitFile case junitOpt of Just fn -> liftIO $ writeFile fn msg Nothing -> return ()@@ -250,8 +228,8 @@ (length rs) ++ concatMap single rs ++ "</testsuite>\n"- single r = printf " <testcase name=\"%s\" time=\"%f\" />\n"- (attrEsc $ description r) (estPoint $ anMean $ sampleAnalysis r)+ single Report{..} = printf " <testcase name=\"%s\" time=\"%f\" />\n"+ (attrEsc reportName) (estPoint $ anMean $ reportAnalysis) attrEsc = concatMap esc where esc '\'' = "'"@@ -260,3 +238,4 @@ esc '>' = ">" esc '&' = "&" esc c = [c]+
Criterion/Main.hs view
@@ -1,6 +1,8 @@+{-# LANGUAGE Trustworthy #-}+ -- | -- Module : Criterion.Main--- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -9,6 +11,10 @@ -- -- Wrappers for compiling and running benchmarks quickly and easily. -- See 'defaultMain' below for an example.+--+-- All of the 'IO'-returning functions in this module initialize the timer+-- before measuring time (refer to the documentation for 'initializeTime'+-- for more details). module Criterion.Main (@@ -25,151 +31,51 @@ -- $rnf -- * Types- Benchmarkable(..)+ Benchmarkable , Benchmark- , Pure- -- * Constructing benchmarks+ -- * Creating a benchmark suite+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable , bench , bgroup- , bcompare+ -- ** Running a benchmark , nf , whnf , nfIO , whnfIO- -- * Running benchmarks+ , nfAppIO+ , whnfAppIO+ -- * Turning a suite of benchmarks into a program , defaultMain , defaultMainWith+ , defaultConfig -- * Other useful code , makeMatcher- , defaultOptions- , parseArgs+ , runMode ) where import Control.Monad (unless) import Control.Monad.Trans (liftIO)-import Criterion.Internal (runAndAnalyse, runNotAnalyse, prefix)-import Criterion.Config-import Criterion.Environment (measureEnvironment)-import Criterion.IO.Printf (note, printError)-import Criterion.Monad (Criterion, withConfig)-import Criterion.Types (Benchmarkable(..), Benchmark(..), Pure, bench,- benchNames, bgroup, bcompare, nf, nfIO, whnf, whnfIO)+import Criterion.IO.Printf (printError, writeCsv)+import Criterion.Internal (runAndAnalyse, runFixedIters)+import Criterion.Main.Options (MatchType(..), Mode(..), defaultConfig, describe,+ versionInfo)+import Criterion.Measurement (initializeTime)+import Criterion.Monad (withConfig)+import Criterion.Types import Data.Char (toLower)-import Data.List (isPrefixOf, sort, stripPrefix)+import Data.List (isInfixOf, isPrefixOf, sort, stripPrefix) import Data.Maybe (fromMaybe)-import Data.Monoid (Monoid(..), Last(..))-import System.Console.GetOpt-import System.Environment (getArgs, getProgName)+import Options.Applicative (execParser)+import System.Environment (getProgName) import System.Exit (ExitCode(..), exitWith) import System.FilePath.Glob --- | Parse a confidence interval.-ci :: String -> IO Config-ci s = case reads s' of- [(d,"%")] -> check (d/100)- [(d,"")] -> check d- _ -> parseError "invalid confidence interval provided"- where s' = case s of- ('.':_) -> '0':s- _ -> s- check d | d <= 0 = parseError "confidence interval is negative"- | d >= 1 = parseError "confidence interval is greater than 1"- | otherwise = return mempty { cfgConfInterval = ljust d }--matchType :: String -> IO Config-matchType s = case map toLower s of- "prefix" -> return mempty { cfgMatchType = ljust Prefix }- "glob" -> return mempty { cfgMatchType = ljust Glob }- _ -> parseError "match type is not 'glob' or 'prefix'"---- | Parse a positive number.-pos :: (Num a, Ord a, Read a) =>- String -> (Last a -> Config) -> String -> IO Config-pos q f s =- case reads s of- [(n,"")] | n > 0 -> return . f $ ljust n- | otherwise -> parseError $ q ++ " must be positive"- _ -> parseError $ "invalid " ++ q ++ " provided"--noArg :: Config -> ArgDescr (IO Config)-noArg = NoArg . return---- | The standard options accepted on the command line.-defaultOptions :: [OptDescr (IO Config)]-defaultOptions = [- Option ['h','?'] ["help"] (noArg mempty { cfgPrintExit = Help })- "print help, then exit"- , Option ['G'] ["no-gc"] (noArg mempty { cfgPerformGC = ljust False })- "do not collect garbage between iterations"- , Option ['g'] ["gc"] (noArg mempty { cfgPerformGC = ljust True })- "collect garbage between iterations (default)"- , Option ['I'] ["ci"] (ReqArg ci "CI")- "bootstrap confidence interval"- , Option ['l'] ["list"] (noArg mempty { cfgPrintExit = List })- "print only a list of benchmark names"- , Option ['m'] ["match"] (ReqArg matchType "MATCH")- "how to match benchmark names (prefix|glob)"- , Option ['o'] ["output"]- (ReqArg (\t -> return $ mempty { cfgReport = ljust t }) "FILENAME")- "report file to write to"- , Option ['q'] ["quiet"] (noArg mempty { cfgVerbosity = ljust Quiet })- "print less output"- , Option [] ["resamples"]- (ReqArg (pos "resample count"$ \n -> mempty { cfgResamples = n }) "N")- "number of bootstrap resamples to perform"- , Option [] ["results"]- (ReqArg (\n -> return $ mempty { cfgResults = ljust n }) "FILENAME")- "file to write raw results to"- , Option ['s'] ["samples"]- (ReqArg (pos "sample count" $ \n -> mempty { cfgSamples = n }) "N")- "number of samples to collect"- , Option ['t'] ["template"]- (ReqArg (\t -> return $ mempty { cfgTemplate = ljust t }) "FILENAME")- "template file to use"- , Option ['u'] ["summary"] (ReqArg (\s -> return $ mempty { cfgSummaryFile = ljust s }) "FILENAME")- "produce a summary CSV file of all results"- , Option ['r'] ["compare"] (ReqArg (\s -> return $ mempty { cfgCompareFile = ljust s }) "FILENAME")- "produce a CSV file of comparisons\nagainst reference benchmarks\n\- \(see the bcompare combinator)"- , Option ['n'] ["no-measurements"] (noArg mempty { cfgMeasure = ljust False })- "don't do any measurements"- , Option ['V'] ["version"] (noArg mempty { cfgPrintExit = Version })- "display version, then exit"- , Option ['v'] ["verbose"] (noArg mempty { cfgVerbosity = ljust Verbose })- "print more output"- , Option [] ["junit"] (ReqArg (\s -> return $ mempty { cfgJUnitFile = ljust s }) "FILENAME")- "produce a JUnit report file of all results"- ]--printBanner :: Config -> IO ()-printBanner cfg = withConfig cfg $- case cfgBanner cfg of- Last (Just b) -> note "%s\n" b- _ -> note "Hey, nobody told me what version I am!\n"--printUsage :: [OptDescr (IO Config)] -> ExitCode -> IO a-printUsage options exitCode = do- p <- getProgName- putStr (usageInfo ("Usage: " ++ p ++ " [OPTIONS] [BENCHMARKS]") options)- putStrLn "If no benchmark names are given, all are run\n\- \Otherwise, benchmarks are chosen by prefix or zsh-style pattern \- \match\n\- \(use --match to specify how to match the benchmarks to run)"- exitWith exitCode---- | Parse command line options.-parseArgs :: Config -> [OptDescr (IO Config)] -> [String]- -> IO (Config, [String])-parseArgs defCfg options args =- case getOpt Permute options args of- (_, _, (err:_)) -> parseError err- (opts, rest, _) -> do- cfg <- (mappend defCfg . mconcat) `fmap` sequence opts- case cfgPrintExit cfg of- Help -> printBanner cfg >> printUsage options ExitSuccess- Version -> printBanner cfg >> exitWith ExitSuccess- _ -> return (cfg, rest)- -- | An entry point that can be used as a @main@ function. -- -- > import Criterion.Main@@ -186,9 +92,14 @@ -- > ] -- > ] defaultMain :: [Benchmark] -> IO ()-defaultMain = defaultMainWith defaultConfig (return ())+defaultMain = defaultMainWith defaultConfig -makeMatcher :: MatchType -> [String] -> Either String (String -> Bool)+-- | Create a function that can tell if a name given on the command+-- line matches a benchmark.+makeMatcher :: MatchType+ -> [String]+ -- ^ Command line arguments.+ -> Either String (String -> Bool) makeMatcher matchKind args = case matchKind of Prefix -> Right $ \b -> null args || any (`isPrefixOf` b) args@@ -198,21 +109,30 @@ Left errMsg -> Left . fromMaybe errMsg . stripPrefix "compile :: " $ errMsg Right ps -> Right $ \b -> null ps || any (`match` b) ps+ Pattern -> Right $ \b -> null args || any (`isInfixOf` b) args+ IPattern -> Right $ \b -> null args || any (`isInfixOf` map toLower b) (map (map toLower) args) +selectBenches :: MatchType -> [String] -> Benchmark -> IO (String -> Bool)+selectBenches matchType benches bsgroup = do+ toRun <- either parseError return . makeMatcher matchType $ benches+ unless (null benches || any toRun (benchNames bsgroup)) $+ parseError "none of the specified names matches a benchmark"+ return toRun+ -- | An entry point that can be used as a @main@ function, with -- configurable defaults. -- -- Example: ----- > import Criterion.Config+-- > import Criterion.Main.Options -- > import Criterion.Main -- > -- > myConfig = defaultConfig {--- > -- Always GC between runs.--- > cfgPerformGC = ljust True+-- > -- Resample 10 times for bootstrapping+-- > resamples = 10 -- > } -- >--- > main = defaultMainWith myConfig (return ()) [+-- > main = defaultMainWith myConfig [ -- > bench "fib 30" $ whnf fib 30 -- > ] --@@ -224,38 +144,34 @@ -- Run @\"Fib --help\"@ on the command line to get a list of command -- line options. defaultMainWith :: Config- -> Criterion () -- ^ Prepare data prior to executing the first benchmark. -> [Benchmark] -> IO ()-defaultMainWith defCfg prep bs = do- (cfg, args) <- parseArgs defCfg defaultOptions =<< getArgs- shouldRun <- either parseError return .- makeMatcher (fromMaybe Prefix . getLast . cfgMatchType $ cfg) $- args- unless (null args || any shouldRun (names bsgroup)) $- parseError "none of the specified names matches a benchmark"- withConfig cfg $- if not $ fromLJ cfgMeasure cfg- then runNotAnalyse shouldRun bsgroup- else do- if cfgPrintExit cfg == List- then do- _ <- note "Benchmarks:\n"- mapM_ (note " %s\n") (sort $ concatMap benchNames bs)- else do- case getLast $ cfgSummaryFile cfg of- Just fn -> liftIO $ writeFile fn "Name,Mean,MeanLB,MeanUB,Stddev,StddevLB,StddevUB\n"- Nothing -> return ()- env <- measureEnvironment- prep- runAndAnalyse shouldRun env bsgroup- where- bsgroup = BenchGroup "" bs- names = go ""- where go pfx (BenchGroup pfx' bms) = concatMap (go (prefix pfx pfx')) bms- go pfx (Benchmark desc _) = [prefix pfx desc]- go _ (BenchCompare _) = []+defaultMainWith defCfg bs = do+ wat <- execParser (describe defCfg)+ runMode wat bs +-- | Run a set of 'Benchmark's with the given 'Mode'.+--+-- This can be useful if you have a 'Mode' from some other source (e.g. from a+-- one in your benchmark driver's command-line parser).+runMode :: Mode -> [Benchmark] -> IO ()+runMode wat bs =+ case wat of+ List -> mapM_ putStrLn . sort . concatMap benchNames $ bs+ Version -> putStrLn versionInfo+ RunIters cfg iters matchType benches -> do+ shouldRun <- selectBenches matchType benches bsgroup+ withConfig cfg $+ runFixedIters iters shouldRun bsgroup+ Run cfg matchType benches -> do+ shouldRun <- selectBenches matchType benches bsgroup+ withConfig cfg $ do+ writeCsv ("Name","Mean","MeanLB","MeanUB","Stddev","StddevLB",+ "StddevUB")+ liftIO initializeTime+ runAndAnalyse shouldRun bsgroup+ where bsgroup = BenchGroup "" bs+ -- | Display an error message from a command line parsing failure, and -- exit. parseError :: String -> IO a@@ -266,11 +182,12 @@ -- $bench ----- The 'Benchmarkable' typeclass represents the class of all code that--- can be benchmarked. Every instance must run a benchmark a given--- number of times. We are most interested in benchmarking two things:+-- The 'Benchmarkable' type is a container for code that can be+-- benchmarked. The value inside must run a benchmark the given+-- number of times. We are most interested in benchmarking two+-- things: ----- * 'IO' actions. Any 'IO' action can be benchmarked directly.+-- * 'IO' actions. Most 'IO' actions can be benchmarked directly. -- -- * Pure functions. GHC optimises aggressively when compiling with -- @-O@, so it is easy to write innocent-looking benchmark code that@@ -280,12 +197,25 @@ -- $io ----- Any 'IO' action can be benchmarked easily if its type resembles--- this:+-- Most 'IO' actions can be benchmarked easily using one of the following+-- two functions: -- -- @--- 'IO' a+-- 'nfIO' :: 'NFData' a => 'IO' a -> 'Benchmarkable'+-- 'whnfIO' :: 'IO' a -> 'Benchmarkable' -- @+--+-- In certain corner cases, you may find it useful to use the following+-- variants, which take the input as a separate argument:+--+-- @+-- 'nfAppIO' :: 'NFData' b => (a -> 'IO' b) -> a -> 'Benchmarkable'+-- 'whnfAppIO' :: (a -> 'IO' b) -> a -> 'Benchmarkable'+-- @+--+-- This is useful when the bulk of the work performed by the function is+-- not bound by IO, but rather by pure computations that may optimize away if+-- the argument is known statically, as in 'nfIO'/'whnfIO'. -- $pure --@@ -294,22 +224,21 @@ -- only be evaluated once, for which all but the first iteration of -- the timing loop will be timing the cost of doing nothing. ----- To work around this, we provide a special type, 'Pure', for--- benchmarking pure code. Values of this type are constructed using--- one of two functions.+-- To work around this, we provide two functions for benchmarking pure+-- code. ----- The first is a function which will cause results to be evaluated to--- head normal form (NF):+-- The first will cause results to be fully evaluated to normal form+-- (NF): -- -- @--- 'nf' :: 'NFData' b => (a -> b) -> a -> 'Pure'+-- 'nf' :: 'NFData' b => (a -> b) -> a -> 'Benchmarkable' -- @ -- -- The second will cause results to be evaluated to weak head normal -- form (the Haskell default): -- -- @--- 'whnf' :: (a -> b) -> a -> 'Pure'+-- 'whnf' :: (a -> b) -> a -> 'Benchmarkable' -- @ -- -- As both of these types suggest, when you want to benchmark a@@ -333,9 +262,6 @@ -- @ -- 'nf' firstN 1000 -- @------ The compiler will correctly infer that the number 1000 must have--- the type 'Int', and the type of the expression is 'Pure'. -- $rnf --@@ -352,6 +278,7 @@ -- 'whnf' firstN 1000 -- @ ----- Because in this case the result will only be forced until it--- reaches WHNF, what this would /actually/ benchmark is merely the--- production of the first list element!+-- Since we are using 'whnf', in this case the result will only be+-- forced until it reaches WHNF, so what this would /actually/+-- benchmark is merely how long it takes to produce the first list+-- element!
+ Criterion/Main/Options.hs view
@@ -0,0 +1,249 @@+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}++-- |+-- Module : Criterion.Main.Options+-- Copyright : (c) 2014 Bryan O'Sullivan+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- Benchmarking command-line configuration.++module Criterion.Main.Options+ (+ Mode(..)+ , MatchType(..)+ , defaultConfig+ , parseWith+ , config+ , describe+ , describeWith+ , versionInfo+ ) where++import Control.Monad (when)+import Criterion.Analysis (validateAccessors)+import Criterion.Types (Config(..), Verbosity(..), measureAccessors,+ measureKeys)+import Data.Char (isSpace, toLower)+import Data.Data (Data)+import Data.Int (Int64)+import Data.List (isPrefixOf)+import Data.Version (showVersion)+import GHC.Generics (Generic)+import Options.Applicative+import Options.Applicative.Help (Chunk(..), tabulate)+import Options.Applicative.Help.Pretty ((.$.))+import Options.Applicative.Types+import Paths_criterion (version)+import Prelude ()+import Prelude.Compat+import Prettyprinter (Doc, pretty)+import Prettyprinter.Render.Terminal (AnsiStyle)+import Statistics.Types (mkCL,cl95)+import qualified Data.Map as M++-- | How to match a benchmark name.+data MatchType = Prefix+ -- ^ Match by prefix. For example, a prefix of+ -- @\"foo\"@ will match @\"foobar\"@.+ | Glob+ -- ^ Match by Unix-style glob pattern. When using this match+ -- type, benchmark names are treated as if they were+ -- file-paths. For example, the glob patterns @\"*/ba*\"@ and+ -- @\"*/*\"@ will match @\"foo/bar\"@, but @\"*\"@ or @\"*bar\"@+ -- __will not__.+ | Pattern+ -- ^ Match by searching given substring in benchmark+ -- paths.+ | IPattern+ -- ^ Same as 'Pattern', but case insensitive.+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data,+ Generic)++-- | Execution mode for a benchmark program.+data Mode = List+ -- ^ List all benchmarks.+ | Version+ -- ^ Print the version.+ | RunIters Config Int64 MatchType [String]+ -- ^ Run the given benchmarks, without collecting or+ -- analysing performance numbers.+ | Run Config MatchType [String]+ -- ^ Run and analyse the given benchmarks.+ deriving (Eq, Read, Show, Data, Generic)++-- | Default benchmarking configuration.+defaultConfig :: Config+defaultConfig = Config {+ confInterval = cl95+ , timeLimit = 5+ , resamples = 1000+ , regressions = []+ , rawDataFile = Nothing+ , reportFile = Nothing+ , csvFile = Nothing+ , jsonFile = Nothing+ , junitFile = Nothing+ , verbosity = Normal+ , template = "default"+ }++-- | Parse a command line.+parseWith :: Config+ -- ^ Default configuration to use if options are not+ -- explicitly specified.+ -> Parser Mode+parseWith cfg =+ runOrRunIters <|>+ (List <$ switch (long "list" <> short 'l' <> help "List benchmarks")) <|>+ (Version <$ switch (long "version" <> help "Show version info"))+ where+ runOrRunIters :: Parser Mode+ runOrRunIters =+ -- Because Run and RunIters are separate Modes, it's tempting to+ -- split them out into their own Parsers and choose between them+ -- using (<|>), i.e.,+ --+ -- (Run <$> config cfg <*> ...)+ -- <|> (RunIters <$> config cfg <*> (... "iters") <*> ...)+ --+ -- This is possible, but it has the unfortunate consequence of+ -- invoking the same Parsers (e.g., @config@) multiple times. As a+ -- result, the help text for each Parser would be duplicated when the+ -- user runs --help. See #168.+ --+ -- To avoid this problem, we combine Run and RunIters into a single+ -- Parser that only runs each of its sub-Parsers once. The trick is+ -- to make the Parser for "iters" (the key difference between Run and+ -- RunIters) an optional Parser. If the Parser yields Nothing, select+ -- Run, and if the Parser yields Just, select RunIters.+ --+ -- This is admittedly a bit of a design smell, as the idiomatic way+ -- to handle this would be to turn Run and RunIters into subcommands+ -- rather than options. That way, each subcommand would have its own+ -- --help prompt, thereby avoiding the need to deduplicate the help+ -- text. Unfortunately, this would require breaking the CLI interface+ -- of every criterion-based program, which seems like a leap too far.+ -- The solution used here, while a bit grimy, gets the job done while+ -- keeping Run and RunIters as options.+ (\cfg' mbIters ->+ case mbIters of+ Just iters -> RunIters cfg' iters+ Nothing -> Run cfg')+ <$> config cfg+ <*> optional (option auto+ (long "iters" <> short 'n' <> metavar "ITERS" <>+ help "Run benchmarks, don't analyse"))+ <*> option match+ (long "match" <> short 'm' <> metavar "MATCH" <> value Prefix <>+ help "How to match benchmark names (\"prefix\", \"glob\", \"pattern\", or \"ipattern\")")+ <*> many (argument str (metavar "NAME..."))++-- | Parse a configuration.+config :: Config -> Parser Config+config Config{..} = Config+ <$> option (mkCL <$> range 0.001 0.999)+ (long "ci" <> short 'I' <> metavar "CI" <> value confInterval <>+ help "Confidence interval")+ <*> option (range 0.1 86400)+ (long "time-limit" <> short 'L' <> metavar "SECS" <> value timeLimit <>+ help "Time limit to run a benchmark")+ <*> option (range 1 1000000)+ (long "resamples" <> metavar "COUNT" <> value resamples <>+ help "Number of bootstrap resamples to perform")+ <*> manyDefault regressions+ (option regressParams+ (long "regress" <> metavar "RESP:PRED.." <>+ help "Regressions to perform"))+ <*> outputOption rawDataFile (long "raw" <>+ help "File to write raw data to")+ <*> outputOption reportFile (long "output" <> short 'o' <>+ help "File to write report to")+ <*> outputOption csvFile (long "csv" <>+ help "File to write CSV summary to")+ <*> outputOption jsonFile (long "json" <>+ help "File to write JSON summary to")+ <*> outputOption junitFile (long "junit" <>+ help "File to write JUnit summary to")+ <*> (toEnum <$> option (range 0 2)+ (long "verbosity" <> short 'v' <> metavar "LEVEL" <>+ value (fromEnum verbosity) <>+ help "Verbosity level"))+ <*> strOption (long "template" <> short 't' <> metavar "FILE" <>+ value template <>+ help "Template to use for report")++manyDefault :: [a] -> Parser a -> Parser [a]+manyDefault def m = set_default <$> many m+ where+ set_default [] = def+ set_default xs = xs++outputOption :: Maybe String -> Mod OptionFields String -> Parser (Maybe String)+outputOption file m =+ optional (strOption (m <> metavar "FILE" <> maybe mempty value file))++range :: (Show a, Read a, Ord a) => a -> a -> ReadM a+range lo hi = do+ s <- readerAsk+ case reads s of+ [(i, "")]+ | i >= lo && i <= hi -> return i+ | otherwise -> readerError $ show i ++ " is outside range " +++ show (lo,hi)+ _ -> readerError $ show s ++ " is not a number"++match :: ReadM MatchType+match = do+ m <- readerAsk+ case map toLower m of+ mm | mm `isPrefixOf` "pfx" -> return Prefix+ | mm `isPrefixOf` "prefix" -> return Prefix+ | mm `isPrefixOf` "glob" -> return Glob+ | mm `isPrefixOf` "pattern" -> return Pattern+ | mm `isPrefixOf` "ipattern" -> return IPattern+ | otherwise -> readerError $+ show m ++ " is not a known match type"+ ++ "Try \"prefix\", \"pattern\", \"ipattern\" or \"glob\"."++regressParams :: ReadM ([String], String)+regressParams = do+ m <- readerAsk+ let repl ',' = ' '+ repl c = c+ tidy = reverse . dropWhile isSpace . reverse . dropWhile isSpace+ (r,ps) = break (==':') m+ when (null r) $+ readerError "no responder specified"+ when (null ps) $+ readerError "no predictors specified"+ let ret = (words . map repl . drop 1 $ ps, tidy r)+ either readerError (const (return ret)) $ uncurry validateAccessors ret++-- | Flesh out a command-line parser.+describe :: Config -> ParserInfo Mode+describe cfg = describeWith $ parseWith cfg++-- | Flesh out command-line information using a custom 'Parser'.+describeWith :: Parser a -> ParserInfo a+describeWith parser = info (helper <*> parser) $+ header ("Microbenchmark suite - " <> versionInfo) <>+ fullDesc <>+ footerDoc (unChunk regressionHelp)++-- | A string describing the version of this benchmark (really, the+-- version of criterion that was used to build it).+versionInfo :: String+versionInfo = "built with criterion " <> showVersion version++-- We sort not by name, but by likely frequency of use.+regressionHelp :: Chunk (Doc AnsiStyle)+regressionHelp =+ fmap (pretty "Regression metrics (for use with --regress):" .$.) $+ tabulate+ (prefTabulateFill defaultPrefs)+ [(pretty n, pretty d) | (n,(_,d)) <- map f measureKeys]+ where f k = (k, measureAccessors M.! k)
− Criterion/Measurement.hs
@@ -1,74 +0,0 @@-{-# LANGUAGE BangPatterns, ScopedTypeVariables, TypeOperators #-}---- |--- Module : Criterion.Measurement--- Copyright : (c) 2009, 2010 Bryan O'Sullivan------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Benchmark measurement code.--module Criterion.Measurement- (- getTime- , runForAtLeast- , secs- , time- , time_- ) where--import Control.Monad (when)-import Data.Time.Clock.POSIX (getPOSIXTime)-import Text.Printf (printf)--time :: IO a -> IO (Double, a)-time act = do- start <- getTime- result <- act- end <- getTime- let !delta = end - start- return (delta, result)--time_ :: IO a -> IO Double-time_ act = do- start <- getTime- _ <- act- end <- getTime- return $! end - start--getTime :: IO Double-getTime = realToFrac `fmap` getPOSIXTime--runForAtLeast :: Double -> Int -> (Int -> IO a) -> IO (Double, Int, a)-runForAtLeast howLong initSeed act = loop initSeed (0::Int) =<< getTime- where- loop !seed !iters initTime = do- now <- getTime- when (now - initTime > howLong * 10) $- fail (printf "took too long to run: seed %d, iters %d" seed iters)- (elapsed,result) <- time (act seed)- if elapsed < howLong- then loop (seed * 2) (iters+1) initTime- else return (elapsed, seed, result)--secs :: Double -> String-secs k- | k < 0 = '-' : secs (-k)- | k >= 1 = k `with` "s"- | k >= 1e-3 = (k*1e3) `with` "ms"- | k >= 1e-6 = (k*1e6) `with` "us"- | k >= 1e-9 = (k*1e9) `with` "ns"- | k >= 1e-12 = (k*1e12) `with` "ps"- | otherwise = printf "%g s" k- where with (t :: Double) (u :: String)- | t >= 1e9 = printf "%.4g %s" t u- | t >= 1e6 = printf "%.0f %s" t u- | t >= 1e5 = printf "%.1f %s" t u- | t >= 1e4 = printf "%.2f %s" t u- | t >= 1e3 = printf "%.3f %s" t u- | t >= 1e2 = printf "%.4f %s" t u- | t >= 1e1 = printf "%.5f %s" t u- | otherwise = printf "%.6f %s" t u
Criterion/Monad.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE Trustworthy #-} -- | -- Module : Criterion.Monad -- Copyright : (c) 2009 Neil Brown@@ -12,25 +12,45 @@ module Criterion.Monad ( Criterion- , getConfig- , getConfigItem , withConfig+ , getGen ) where -import Control.Monad.Reader (MonadReader, ReaderT, ask, runReaderT)-import Control.Monad.Trans (MonadIO)-import Criterion.Config (Config)---- | The monad in which most criterion code executes.-newtype Criterion a = Criterion {- runCriterion :: ReaderT Config IO a- } deriving (Functor, Monad, MonadReader Config, MonadIO)+import Control.Monad.Reader (asks, runReaderT)+import Control.Monad.Trans (liftIO)+import Criterion.Monad.Internal (Criterion(..), Crit(..))+import Criterion.Types hiding (measure)+import Data.IORef (IORef, newIORef, readIORef, writeIORef)+import System.IO.CodePage (withCP65001)+import System.Random.MWC (GenIO, createSystemRandom) -getConfig :: Criterion Config-getConfig = ask+-- | Run a 'Criterion' action with the given 'Config'.+withConfig :: Config -> Criterion a -> IO a+withConfig cfg (Criterion act) = withCP65001 $ do+ g <- newIORef Nothing+ runReaderT act (Crit cfg g) -getConfigItem :: (Config -> a) -> Criterion a-getConfigItem f = f `fmap` getConfig+-- | Return a random number generator, creating one if necessary.+--+-- This is not currently thread-safe, but in a harmless way (we might+-- call 'createSystemRandom' more than once if multiple threads race).+getGen :: Criterion GenIO+getGen = memoise gen createSystemRandom -withConfig :: Config -> Criterion a -> IO a-withConfig = flip (runReaderT . runCriterion)+-- | Memoise the result of an 'IO' action.+--+-- This is not currently thread-safe, but hopefully in a harmless way.+-- We might call the given action more than once if multiple threads+-- race, so our caller's job is to write actions that can be run+-- multiple times safely.+memoise :: (Crit -> IORef (Maybe a)) -> IO a -> Criterion a+memoise ref generate = do+ r <- Criterion $ asks ref+ liftIO $ do+ mv <- readIORef r+ case mv of+ Just rv -> return rv+ Nothing -> do+ rv <- generate+ writeIORef r (Just rv)+ return rv
+ Criterion/Monad/Internal.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-}+{-# OPTIONS_GHC -funbox-strict-fields #-}++-- |+-- Module : Criterion.Monad.Internal+-- Copyright : (c) 2009 Neil Brown+--+-- License : BSD-style+-- Maintainer : bos@serpentine.com+-- Stability : experimental+-- Portability : GHC+--+-- The environment in which most criterion code executes.+module Criterion.Monad.Internal+ (+ Criterion(..)+ , Crit(..)+ ) where++import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask)+import qualified Control.Monad.Fail as Fail (MonadFail(..))+import Control.Monad.Reader (MonadReader(..), ReaderT)+import Control.Monad.Trans (MonadIO)+import Control.Monad.Trans.Instances ()+import Criterion.Types (Config)+import Data.IORef (IORef)+import Prelude ()+import Prelude.Compat+import System.Random.MWC (GenIO)++data Crit = Crit {+ config :: !Config+ , gen :: !(IORef (Maybe GenIO))+ }++-- | The monad in which most criterion code executes.+newtype Criterion a = Criterion {+ runCriterion :: ReaderT Crit IO a+ } deriving ( Functor, Applicative, Monad, Fail.MonadFail, MonadIO+ , MonadThrow, MonadCatch, MonadMask )++instance MonadReader Config Criterion where+ ask = config `fmap` Criterion ask+ local f = Criterion . local fconfig . runCriterion+ where fconfig c = c { config = f (config c) }
Criterion/Report.hs view
@@ -1,9 +1,14 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, OverloadedStrings,- RecordWildCards, ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE Trustworthy #-} -- | -- Module : Criterion.Report--- Copyright : (c) 2011 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -14,14 +19,14 @@ module Criterion.Report (- Report(..)- , formatReport+ formatReport , report+ , tidyTails -- * Rendering helper functions , TemplateException(..) , loadTemplate , includeFile- , templateDir+ , getTemplateDir , vector , vector2 ) where@@ -29,165 +34,280 @@ import Control.Exception (Exception, IOException, throwIO) import Control.Monad (mplus) import Control.Monad.IO.Class (MonadIO(liftIO))-import Criterion.Analysis (Outliers(..), SampleAnalysis(..))-import Criterion.Config (cfgReport, cfgTemplate, fromLJ)-import Criterion.Monad (Criterion, getConfig)-import Data.Data (Data, Typeable)-import Data.Monoid (Last(..))+import Control.Monad.Reader (ask)+import Criterion.Monad (Criterion)+import Criterion.Types+import Data.Aeson (ToJSON (..), Value(..), object, (.=), Value)+import qualified Data.Aeson.Key as Key+import Data.Aeson.Text (encodeToLazyText)+import Data.Data (Data)+import Data.Foldable (forM_) import GHC.Generics (Generic) import Paths_criterion (getDataFileName)-import Statistics.Sample.KernelDensity (kde)-import Statistics.Types (Sample)+import Statistics.Function (minMax) import System.Directory (doesFileExist)-import System.FilePath ((</>), isPathSeparator)-import System.IO.Unsafe (unsafePerformIO)-import Text.Hastache (MuType(..))-import Text.Hastache.Context (mkGenericContext, mkStrContext, mkStrContextM)+import System.FilePath ((</>), (<.>), isPathSeparator)+import System.IO (hPutStrLn, stderr)+import Text.Microstache (Key (..), Node (..), Template (..),+ compileMustacheText, displayMustacheWarning, renderMustacheW)+import Prelude ()+import Prelude.Compat import qualified Control.Exception as E import qualified Data.Text as T+#if defined(EMBED)+import qualified Data.Text.Lazy.Encoding as TLE+#endif import qualified Data.Text.IO as T import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.IO as TL import qualified Data.Vector.Generic as G import qualified Data.Vector.Unboxed as U-import qualified Text.Hastache as H -data Report = Report {- reportNumber :: Int- , reportName :: String- , reportTimes :: Sample- , reportAnalysis :: SampleAnalysis- , reportOutliers :: Outliers- } deriving (Eq, Read, Show, Typeable, Data, Generic)+#if defined(EMBED)+import Criterion.EmbeddedData (dataFiles, chartContents)+import qualified Data.ByteString.Lazy as BL+import qualified Data.Text.Encoding as TE+#else+import qualified Language.Javascript.Chart as Chart+#endif --- | The path to the template and other files used for generating--- reports.-templateDir :: FilePath-templateDir = unsafePerformIO $ getDataFileName "templates"-{-# NOINLINE templateDir #-}+-- | Trim long flat tails from a KDE plot.+tidyTails :: KDE -> KDE+tidyTails KDE{..} = KDE { kdeType = kdeType+ , kdeValues = G.slice front winSize kdeValues+ , kdePDF = G.slice front winSize kdePDF+ }+ where tiny = uncurry subtract (minMax kdePDF) * 0.005+ omitTiny = G.length . G.takeWhile ((<= tiny) . abs)+ front = omitTiny kdePDF+ back = omitTiny . G.reverse $ kdePDF+ winSize = G.length kdePDF - front - back +-- | Return the path to the template and other files used for+-- generating reports.+--+-- When the @-fembed-data-files@ @Cabal@ flag is enabled, this simply+-- returns the empty path.+getTemplateDir :: IO FilePath+#if defined(EMBED)+getTemplateDir = pure ""+#else+getTemplateDir = getDataFileName "templates"+#endif+ -- | Write out a series of 'Report' values to a single file, if -- configured to do so. report :: [Report] -> Criterion () report reports = do- cfg <- getConfig- case cfgReport cfg of- Last Nothing -> return ()- Last (Just name) -> liftIO $ do- tpl <- loadTemplate [".",templateDir] (fromLJ cfgTemplate cfg)- TL.writeFile name =<< formatReport reports tpl+ Config{..} <- ask+ forM_ reportFile $ \name -> liftIO $ do+ td <- getTemplateDir+ tpl <- loadTemplate [td,"."] template+ TL.writeFile name =<< formatReport reports tpl --- | Format a series of 'Report' values using the given Hastache--- template.+-- | Escape JSON string aimed to be embedded in an HTML <script> tag. Notably+-- < and > are replaced with their unicode escape sequences such that closing+-- the <script> tag from within the JSON data is disallowed, i.e, the character+-- sequence "</" is made impossible.+--+-- Moreover, & is escaped to avoid HTML character references (&<code>;), + is+-- escaped to avoid UTF-7 attacks (should only affect old versions of IE), and+-- \0 is escaped to allow it to be represented in JSON, as the NUL character is+-- disallowed in JSON but valid in Haskell characters.+--+-- The following characters are replaced with their unicode escape sequences+-- (\uXXXX):+-- <, >, &, +, \x2028 (line separator), \x2029 (paragraph separator), and \0+-- (null terminator)+--+-- Other characters are such as \\ (backslash) and \n (newline) are not escaped+-- as the JSON serializer @encodeToLazyText@ already escapes them when they+-- occur inside JSON strings and they cause no issues with respect to HTML+-- safety when used outside of strings in the JSON-encoded payload.+--+-- If the resulting JSON-encoded Text is embedded in an HTML attribute, extra+-- care is required to also escape quotes with character references in the+-- final JSON payload.+-- See <https://html.spec.whatwg.org/multipage/syntax.html#syntax-attributes>+-- for details on how to escape attribute values.+escapeJSON :: Char -> TL.Text+escapeJSON '<' = "\\u003c" -- ban closing of the script tag by making </ impossible+escapeJSON '>' = "\\u003e" -- encode tags with unicode escape sequences+escapeJSON '\x2028' = "\\u2028" -- line separator+escapeJSON '\x2029' = "\\u2029" -- paragraph separator+escapeJSON '&' = "\\u0026" -- avoid HTML entities+escapeJSON '+' = "\\u002b" -- + can be used in UTF-7 escape sequences+escapeJSON '\0' = "\\u0000" -- make null characters explicit+escapeJSON c = TL.singleton c++-- | Format a series of 'Report' values using the given Mustache template. formatReport :: [Report]- -> T.Text -- ^ Hastache template.+ -> TL.Text -- ^ Mustache template. -> IO TL.Text-formatReport reports template = do- let context "report" = return $ MuList $ map inner reports- context "include" = return $ MuLambdaM $ includeFile [templateDir]- context _ = return $ MuNothing- inner Report{..} = mkStrContextM $ \nym ->- case nym of- "name" -> return $ MuVariable reportName- "number" -> return $ MuVariable reportNumber- "times" -> return $ vector "x" reportTimes- "kdetimes" -> return $ vector "x" kdeTimes- "kdepdf" -> return $ vector "x" kdePDF- "kde" -> return $ vector2 "time" "pdf" kdeTimes kdePDF- ('a':'n':_)-> mkGenericContext reportAnalysis $- H.encodeStr nym- _ -> mkGenericContext reportOutliers $- H.encodeStr nym- where (kdeTimes,kdePDF) = kde 128 reportTimes- H.hastacheStr H.defaultConfig template context+formatReport reports templateName = do+ template0 <- case compileMustacheText "tpl" templateName of+ Left err -> fail (show err) -- TODO: throw a template exception?+ Right x -> return x + criterionJS <- readDataFile "criterion.js"+ criterionCSS <- readDataFile "criterion.css"+ chartJS <- chartFileContents++ -- includes, only top level+ templates <- getTemplateDir+ template <- includeTemplate (includeFile [templates]) template0++ let context = object+ [ "json" .= reportsJSON reports+ , "js-criterion" .= criterionJS+ , "js-chart" .= chartJS+ , "criterion-css" .= criterionCSS+ ]++ let (warnings, formatted) = renderMustacheW template context+ -- If there were any issues during mustache template rendering, make sure+ -- to inform the user. See #127.+ forM_ warnings $ \warning -> do+ criterionWarning $ displayMustacheWarning warning+ return formatted+ where+ reportsJSON :: [Report] -> T.Text+ reportsJSON = TL.toStrict . TL.concatMap escapeJSON . encodeToLazyText++ chartFileContents :: IO T.Text+#if defined(EMBED)+ chartFileContents = pure $ TE.decodeUtf8 chartContents+#else+ chartFileContents = T.readFile =<< Chart.file Chart.Chart+#endif++ readDataFile :: FilePath -> IO T.Text+ readDataFile fp =+ (T.readFile =<< getDataFileName ("templates" </> fp))+#if defined(EMBED)+ `E.catch` \(e :: IOException) ->+ maybe (throwIO e)+ (pure . TE.decodeUtf8)+ (lookup fp dataFiles)+#endif++ includeTemplate :: (FilePath -> IO T.Text) -> Template -> IO Template+ includeTemplate f Template {..} = fmap+ (Template templateActual)+ (traverse (traverse (includeNode f)) templateCache)++ includeNode :: (FilePath -> IO T.Text) -> Node -> IO Node+ includeNode f (Section (Key ["include"]) [TextBlock fp]) =+ fmap TextBlock (f (T.unpack fp))+ includeNode _ n = return n++criterionWarning :: String -> IO ()+criterionWarning msg =+ hPutStrLn stderr $ unlines+ [ "criterion: warning:"+ , " " ++ msg+ ]+ -- | Render the elements of a vector. ----- For example, given this piece of Haskell:------ @'mkStrContext' $ \\name ->--- case name of--- \"foo\" -> 'vector' \"x\" foo@--- -- It will substitute each value in the vector for @x@ in the--- following Hastache template:+-- following Mustache template: -- -- > {{#foo}} -- > {{x}} -- > {{/foo}}-vector :: (Monad m, G.Vector v a, H.MuVar a) =>- String -- ^ Name to use when substituting.+vector :: (G.Vector v a, ToJSON a) =>+ T.Text -- ^ Name to use when substituting. -> v a- -> MuType m-{-# SPECIALIZE vector :: String -> U.Vector Double -> MuType IO #-}-vector name v = MuList . map val . G.toList $ v- where val i = mkStrContext $ \nym ->- if nym == name- then MuVariable i- else MuNothing+ -> Value+{-# SPECIALIZE vector :: T.Text -> U.Vector Double -> Value #-}+vector name v = toJSON . map val . G.toList $ v where+ val i = object [ Key.fromText name .= i ] + -- | Render the elements of two vectors.-vector2 :: (Monad m, G.Vector v a, G.Vector v b, H.MuVar a, H.MuVar b) =>- String -- ^ Name for elements from the first vector.- -> String -- ^ Name for elements from the second vector.+vector2 :: (G.Vector v a, G.Vector v b, ToJSON a, ToJSON b) =>+ T.Text -- ^ Name for elements from the first vector.+ -> T.Text -- ^ Name for elements from the second vector. -> v a -- ^ First vector. -> v b -- ^ Second vector.- -> MuType m-{-# SPECIALIZE vector2 :: String -> String -> U.Vector Double -> U.Vector Double- -> MuType IO #-}-vector2 name1 name2 v1 v2 = MuList $ zipWith val (G.toList v1) (G.toList v2)- where val i j = mkStrContext $ \nym ->- case undefined of- _| nym == name1 -> MuVariable i- | nym == name2 -> MuVariable j- | otherwise -> MuNothing+ -> Value+{-# SPECIALIZE vector2 :: T.Text -> T.Text -> U.Vector Double -> U.Vector Double+ -> Value #-}+vector2 name1 name2 v1 v2 = toJSON $ zipWith val (G.toList v1) (G.toList v2) where+ val i j = object+ [ Key.fromText name1 .= i+ , Key.fromText name2 .= j+ ] -- | Attempt to include the contents of a file based on a search path. -- Returns 'B.empty' if the search fails or the file could not be read. ----- Intended for use with Hastache's 'MuLambdaM', for example:+-- Intended for preprocessing Mustache files, e.g. replacing sections ----- @context \"include\" = 'MuLambdaM' $ 'includeFile' ['templateDir']@+-- @+-- {{#include}}file.txt{{/include}+-- @ ----- Hastache template expansion is /not/ performed within the included--- file. No attempt is made to ensure that the included file path is--- safe, i.e. that it does not refer to an unexpected file such as--- \"@/etc/passwd@\".+-- with file contents. includeFile :: (MonadIO m) => [FilePath] -- ^ Directories to search.- -> T.Text -- ^ Name of the file to search for.+ -> FilePath -- ^ Name of the file to search for. -> m T.Text-{-# SPECIALIZE includeFile :: [FilePath] -> T.Text -> IO T.Text #-}+{-# SPECIALIZE includeFile :: [FilePath] -> FilePath -> IO T.Text #-} includeFile searchPath name = liftIO $ foldr go (return T.empty) searchPath where go dir next = do- let path = dir </> H.decodeStr name+ let path = dir </> name T.readFile path `E.catch` \(_::IOException) -> next -- | A problem arose with a template. data TemplateException = TemplateNotFound FilePath -- ^ The template could not be found.- deriving (Eq, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Read, Show, Data, Generic) instance Exception TemplateException --- | Load a Hastache template file.+-- | Load a Mustache template file. -- -- If the name is an absolute or relative path, the search path is -- /not/ used, and the name is treated as a literal path. --+-- If the @-fembed-data-files@ @Cabal@ flag is enabled, this also checks+-- the embedded @data-files@ from @criterion.cabal@.+-- -- This function throws a 'TemplateException' if the template could -- not be found, or an 'IOException' if no template could be loaded. loadTemplate :: [FilePath] -- ^ Search path. -> FilePath -- ^ Name of template file.- -> IO T.Text+ -> IO TL.Text loadTemplate paths name- | any isPathSeparator name = T.readFile name+ | any isPathSeparator name = readFileCheckEmbedded name | otherwise = go Nothing paths where go me (p:ps) = do- let cur = p </> name- x <- doesFileExist cur+ let cur = p </> name <.> "tpl"+ x <- doesFileExist' cur if x- then T.readFile cur `E.catch` \e -> go (me `mplus` Just e) ps+ then readFileCheckEmbedded cur `E.catch` \e -> go (me `mplus` Just e) ps else go me ps go (Just e) _ = throwIO (e::IOException) go _ _ = throwIO . TemplateNotFound $ name++ doesFileExist' :: FilePath -> IO Bool+ doesFileExist' fp = do+ e <- doesFileExist fp+ pure $ e+#if defined(EMBED)+ || (fp `elem` map fst dataFiles)+#endif++-- A version of 'readFile' that falls back on the embedded 'dataFiles'+-- from @criterion.cabal@.+readFileCheckEmbedded :: FilePath -> IO TL.Text+readFileCheckEmbedded fp =+ TL.readFile fp+#if defined(EMBED)+ `E.catch` \(e :: IOException) ->+ maybe (throwIO e)+ (pure . TLE.decodeUtf8 . BL.fromStrict)+ (lookup fp dataFiles)+#endif
Criterion/Types.hs view
@@ -1,10 +1,12 @@-{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, ExistentialQuantification,- FlexibleInstances, GADTs #-}-{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, GADTs, RecordWildCards #-}+{-# OPTIONS_GHC -funbox-strict-fields #-} -- | -- Module : Criterion.Types--- Copyright : (c) 2009, 2010 Bryan O'Sullivan+-- Copyright : (c) 2009-2014 Bryan O'Sullivan -- -- License : BSD-style -- Maintainer : bos@serpentine.com@@ -13,159 +15,322 @@ -- -- Types for benchmarking. ----- The core class is 'Benchmarkable', which admits both pure functions+-- The core type is 'Benchmarkable', which admits both pure functions -- and 'IO' actions. -- -- For a pure function of type @a -> b@, the benchmarking harness--- calls this function repeatedly, each time with a different 'Int'--- argument, and reduces the result the function returns to weak head--- normal form. If you need the result reduced to normal form, that--- is your responsibility.+-- calls this function repeatedly, each time with a different 'Int64'+-- argument (the number of times to run the function in a loop), and+-- reduces the result the function returns to weak head normal form. -- -- For an action of type @IO a@, the benchmarking harness calls the -- action repeatedly, but does not reduce the result. module Criterion.Types (+ -- * Configuration+ Config(..)+ , Verbosity(..) -- * Benchmark descriptions- Benchmarkable(..)+ , Benchmarkable(..) , Benchmark(..)- , Pure- , whnf- , nf- , nfIO- , whnfIO+ -- * Measurements+ , Measured(..)+ , fromInt+ , toInt+ , fromDouble+ , toDouble+ , measureAccessors+ , measureKeys+ , measure+ , rescale+ -- * Benchmark construction+ , env+ , envWithCleanup+ , perBatchEnv+ , perBatchEnvWithCleanup+ , perRunEnv+ , perRunEnvWithCleanup+ , toBenchmarkable , bench , bgroup- , bcompare+ , addPrefix , benchNames+ -- ** Evaluation control+ , nf+ , whnf+ , nfIO+ , whnfIO+ , nfAppIO+ , whnfAppIO -- * Result types- , Result(..)- , ResultForest- , ResultTree(..)+ , Outliers(..)+ , OutlierEffect(..)+ , OutlierVariance(..)+ , Regression(..)+ , KDE(..)+ , Report(..)+ , SampleAnalysis(..)+ , DataRecord(..) ) where -import Control.DeepSeq (NFData, rnf)-import Control.Exception (evaluate)-import Criterion.Analysis.Types (Outliers(..), SampleAnalysis(..))-import Data.Binary (Binary)-import Data.Data (Data, Typeable)+import Control.DeepSeq (NFData(rnf))+import Criterion.Measurement.Types+import Data.Aeson (FromJSON(..), ToJSON(..))+import Data.Binary (Binary(..), putWord8, getWord8)+import Data.Binary.Orphans ()+import Data.Data (Data)+import Data.Int (Int64)+import Data.Map (Map) import GHC.Generics (Generic)-import Statistics.Types (Sample)+import Prelude ()+import Prelude.Compat+import qualified Data.Vector as V+import qualified Data.Vector.Unboxed as U+import qualified Statistics.Types as St+import Statistics.Resampling.Bootstrap () --- | A benchmarkable function or action.-class Benchmarkable a where- -- | Run a function or action the specified number of times.- run :: a -- ^ The function or action to benchmark.- -> Int -- ^ The number of times to run or evaluate it.- -> IO ()+-- | Control the amount of information displayed.+data Verbosity = Quiet+ | Normal+ | Verbose+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data,+ Generic) --- | A container for a pure function to benchmark, and an argument to--- supply to it each time it is evaluated.-data Pure where- WHNF :: (a -> b) -> a -> Pure- NF :: NFData b => (a -> b) -> a -> Pure+-- | Top-level benchmarking configuration.+data Config = Config {+ confInterval :: St.CL Double+ -- ^ Confidence interval for bootstrap estimation (greater than+ -- 0, less than 1).+ , timeLimit :: Double+ -- ^ Number of seconds to run a single benchmark. (In practice,+ -- execution time will very slightly exceed this limit.)+ , resamples :: Int+ -- ^ Number of resamples to perform when bootstrapping.+ , regressions :: [([String], String)]+ -- ^ Regressions to perform.+ , rawDataFile :: Maybe FilePath+ -- ^ File to write binary measurement and analysis data to. If+ -- not specified, this will be a temporary file.+ , reportFile :: Maybe FilePath+ -- ^ File to write report output to, with template expanded.+ , csvFile :: Maybe FilePath+ -- ^ File to write CSV summary to.+ , jsonFile :: Maybe FilePath+ -- ^ File to write JSON-formatted results to.+ , junitFile :: Maybe FilePath+ -- ^ File to write JUnit-compatible XML results to.+ , verbosity :: Verbosity+ -- ^ Verbosity level to use when running and analysing+ -- benchmarks.+ , template :: FilePath+ -- ^ Template file to use if writing a report.+ } deriving (Eq, Read, Show, Data, Generic) --- | Apply an argument to a function, and evaluate the result to weak--- head normal form (WHNF).-whnf :: (a -> b) -> a -> Pure-whnf = WHNF-{-# INLINE whnf #-} --- | Apply an argument to a function, and evaluate the result to head--- normal form (NF).-nf :: NFData b => (a -> b) -> a -> Pure-nf = NF-{-# INLINE nf #-}+-- | Outliers from sample data, calculated using the boxplot+-- technique.+data Outliers = Outliers {+ samplesSeen :: !Int64+ , lowSevere :: !Int64+ -- ^ More than 3 times the interquartile range (IQR) below the+ -- first quartile.+ , lowMild :: !Int64+ -- ^ Between 1.5 and 3 times the IQR below the first quartile.+ , highMild :: !Int64+ -- ^ Between 1.5 and 3 times the IQR above the third quartile.+ , highSevere :: !Int64+ -- ^ More than 3 times the IQR above the third quartile.+ } deriving (Eq, Read, Show, Data, Generic) --- | Perform an action, then evaluate its result to head normal form.--- This is particularly useful for forcing a lazy IO action to be--- completely performed.-nfIO :: NFData a => IO a -> IO ()-nfIO a = evaluate . rnf =<< a-{-# INLINE nfIO #-}+instance FromJSON Outliers+instance ToJSON Outliers --- | Perform an action, then evaluate its result to weak head normal--- form (WHNF). This is useful for forcing an IO action whose result--- is an expression to be evaluated down to a more useful value.-whnfIO :: IO a -> IO ()-whnfIO a = a >>= evaluate >> return ()-{-# INLINE whnfIO #-}+instance Binary Outliers where+ put (Outliers v w x y z) = put v >> put w >> put x >> put y >> put z+ get = Outliers <$> get <*> get <*> get <*> get <*> get+instance NFData Outliers -instance Benchmarkable Pure where- run p@(WHNF _ _) = go p- where- go fx@(WHNF f x) n- | n <= 0 = return ()- | otherwise = evaluate (f x) >> go fx (n-1)- run p@(NF _ _) = go p- where- go fx@(NF f x) n- | n <= 0 = return ()- | otherwise = evaluate (rnf (f x)) >> go fx (n-1)- {-# INLINE run #-}+-- | A description of the extent to which outliers in the sample data+-- affect the sample mean and standard deviation.+data OutlierEffect = Unaffected -- ^ Less than 1% effect.+ | Slight -- ^ Between 1% and 10%.+ | Moderate -- ^ Between 10% and 50%.+ | Severe -- ^ Above 50% (i.e. measurements+ -- are useless).+ deriving (Eq, Ord, Read, Show, Data, Generic) -instance Benchmarkable (IO a) where- run a n- | n <= 0 = return ()- | otherwise = a >> run a (n-1)- {-# INLINE run #-}+instance FromJSON OutlierEffect+instance ToJSON OutlierEffect --- | A benchmark may consist of either a single 'Benchmarkable' item--- with a name, created with 'bench', or a (possibly nested) group of--- 'Benchmark's, created with 'bgroup'.-data Benchmark where- Benchmark :: Benchmarkable b => String -> b -> Benchmark- BenchGroup :: String -> [Benchmark] -> Benchmark- BenchCompare :: [Benchmark] -> Benchmark+instance Binary OutlierEffect where+ put Unaffected = putWord8 0+ put Slight = putWord8 1+ put Moderate = putWord8 2+ put Severe = putWord8 3+ get = do+ i <- getWord8+ case i of+ 0 -> return Unaffected+ 1 -> return Slight+ 2 -> return Moderate+ 3 -> return Severe+ _ -> fail $ "get for OutlierEffect: unexpected " ++ show i+instance NFData OutlierEffect --- | Create a single benchmark.-bench :: Benchmarkable b =>- String -- ^ A name to identify the benchmark.- -> b- -> Benchmark-bench = Benchmark+instance Semigroup Outliers where+ (<>) = addOutliers --- | Group several benchmarks together under a common name.-bgroup :: String -- ^ A name to identify the group of benchmarks.- -> [Benchmark] -- ^ Benchmarks to group under this name.- -> Benchmark-bgroup = BenchGroup+instance Monoid Outliers where+ mempty = Outliers 0 0 0 0 0+#if !(MIN_VERSION_base(4,11,0))+ mappend = addOutliers+#endif --- | Compare benchmarks against a reference benchmark--- (The first 'bench' in the given list).------ The results of the comparisons are written to a CSV file specified using the--- @-r@ command line flag. The CSV file uses the following format:------ @Reference,Name,% faster than the reference@-bcompare :: [Benchmark] -> Benchmark-bcompare = BenchCompare+addOutliers :: Outliers -> Outliers -> Outliers+addOutliers (Outliers s a b c d) (Outliers t w x y z) =+ Outliers (s+t) (a+w) (b+x) (c+y) (d+z)+{-# INLINE addOutliers #-} --- | Retrieve the names of all benchmarks. Grouped benchmarks are--- prefixed with the name of the group they're in.-benchNames :: Benchmark -> [String]-benchNames (Benchmark d _) = [d]-benchNames (BenchGroup d bs) = map ((d ++ "/") ++) . concatMap benchNames $ bs-benchNames (BenchCompare bs) = concatMap benchNames $ bs+-- | Analysis of the extent to which outliers in a sample affect its+-- standard deviation (and to some extent, its mean).+data OutlierVariance = OutlierVariance {+ ovEffect :: OutlierEffect+ -- ^ Qualitative description of effect.+ , ovDesc :: String+ -- ^ Brief textual description of effect.+ , ovFraction :: Double+ -- ^ Quantitative description of effect (a fraction between 0 and 1).+ } deriving (Eq, Read, Show, Data, Generic) -instance Show Benchmark where- show (Benchmark d _) = ("Benchmark " ++ show d)- show (BenchGroup d _) = ("BenchGroup " ++ show d)- show (BenchCompare _) = ("BenchCompare")+instance FromJSON OutlierVariance+instance ToJSON OutlierVariance -data Result = Result {- description :: String- , sample :: Sample- , sampleAnalysis :: SampleAnalysis- , outliers :: Outliers- } deriving (Eq, Read, Show, Typeable, Data, Generic)+instance Binary OutlierVariance where+ put (OutlierVariance x y z) = put x >> put y >> put z+ get = OutlierVariance <$> get <*> get <*> get -instance Binary Result+instance NFData OutlierVariance where+ rnf OutlierVariance{..} = rnf ovEffect `seq` rnf ovDesc `seq` rnf ovFraction -type ResultForest = [ResultTree]-data ResultTree = Single Result- | Compare !Int ResultForest- deriving (Eq, Read, Show, Typeable, Data, Generic)+-- | Results of a linear regression.+data Regression = Regression {+ regResponder :: String+ -- ^ Name of the responding variable.+ , regCoeffs :: Map String (St.Estimate St.ConfInt Double)+ -- ^ Map from name to value of predictor coefficients.+ , regRSquare :: St.Estimate St.ConfInt Double+ -- ^ R² goodness-of-fit estimate.+ } deriving (Eq, Read, Show, Generic) -instance Binary ResultTree+instance FromJSON Regression+instance ToJSON Regression++instance Binary Regression where+ put Regression{..} =+ put regResponder >> put regCoeffs >> put regRSquare+ get = Regression <$> get <*> get <*> get++instance NFData Regression where+ rnf Regression{..} =+ rnf regResponder `seq` rnf regCoeffs `seq` rnf regRSquare++-- | Result of a bootstrap analysis of a non-parametric sample.+data SampleAnalysis = SampleAnalysis {+ anRegress :: [Regression]+ -- ^ Estimates calculated via linear regression.+ , anMean :: St.Estimate St.ConfInt Double+ -- ^ Estimated mean.+ , anStdDev :: St.Estimate St.ConfInt Double+ -- ^ Estimated standard deviation.+ , anOutlierVar :: OutlierVariance+ -- ^ Description of the effects of outliers on the estimated+ -- variance.+ } deriving (Eq, Read, Show, Generic)++instance FromJSON SampleAnalysis+instance ToJSON SampleAnalysis++instance Binary SampleAnalysis where+ put SampleAnalysis{..} = do+ put anRegress; put anMean; put anStdDev; put anOutlierVar+ get = SampleAnalysis <$> get <*> get <*> get <*> get++instance NFData SampleAnalysis where+ rnf SampleAnalysis{..} =+ rnf anRegress `seq` rnf anMean `seq`+ rnf anStdDev `seq` rnf anOutlierVar++-- | Data for a KDE chart of performance.+data KDE = KDE {+ kdeType :: String+ , kdeValues :: U.Vector Double+ , kdePDF :: U.Vector Double+ } deriving (Eq, Read, Show, Data, Generic)++instance FromJSON KDE+instance ToJSON KDE++instance Binary KDE where+ put KDE{..} = put kdeType >> put kdeValues >> put kdePDF+ get = KDE <$> get <*> get <*> get++instance NFData KDE where+ rnf KDE{..} = rnf kdeType `seq` rnf kdeValues `seq` rnf kdePDF++-- | Report of a sample analysis.+data Report = Report {+ reportNumber :: Int+ -- ^ A simple index indicating that this is the /n/th report.+ , reportName :: String+ -- ^ The name of this report.+ , reportKeys :: [String]+ -- ^ See 'measureKeys'.+ , reportMeasured :: V.Vector Measured+ -- ^ Raw measurements.+ , reportAnalysis :: SampleAnalysis+ -- ^ Report analysis.+ , reportOutliers :: Outliers+ -- ^ Analysis of outliers.+ , reportKDEs :: [KDE]+ -- ^ Data for a KDE of times.+ } deriving (Eq, Read, Show, Generic)++instance FromJSON Report+instance ToJSON Report++instance Binary Report where+ put Report{..} =+ put reportNumber >> put reportName >> put reportKeys >>+ put reportMeasured >> put reportAnalysis >> put reportOutliers >>+ put reportKDEs++ get = Report <$> get <*> get <*> get <*> get <*> get <*> get <*> get++instance NFData Report where+ rnf Report{..} =+ rnf reportNumber `seq` rnf reportName `seq` rnf reportKeys `seq`+ rnf reportMeasured `seq` rnf reportAnalysis `seq` rnf reportOutliers `seq`+ rnf reportKDEs++data DataRecord = Measurement Int String (V.Vector Measured)+ | Analysed Report+ deriving (Eq, Read, Show, Generic)++instance Binary DataRecord where+ put (Measurement i n v) = putWord8 0 >> put i >> put n >> put v+ put (Analysed r) = putWord8 1 >> put r++ get = do+ w <- getWord8+ case w of+ 0 -> Measurement <$> get <*> get <*> get+ 1 -> Analysed <$> get+ _ -> error ("bad tag " ++ show w)++instance NFData DataRecord where+ rnf (Measurement i n v) = rnf i `seq` rnf n `seq` rnf v+ rnf (Analysed r) = rnf r++instance FromJSON DataRecord+instance ToJSON DataRecord
README.markdown view
@@ -1,39 +1,660 @@ # Criterion: robust, reliable performance measurement -This package provides the Criterion module, a Haskell library for-measuring and analysing software performance.+[](https://hackage.haskell.org/package/criterion) [](https://github.com/haskell/criterion/actions?query=workflow%3AHaskell-CI) -To get started, read the documentation for the-[Criterion.Main](http://hackage.haskell.org/packages/archive/criterion/latest/doc/html/Criterion-Main.html)-module, and take a look at the programs in the-[examples](https://github.com/bos/criterion/tree/master/examples)-directory.+`criterion` is a library that makes accurate microbenchmarking in+Haskell easy. +<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a> -# Building and installing -To build and install criterion, just run+## Features - cabal install criterion+* The simple API hides a lot of automation and details that you+ shouldn't need to worry about. +* Sophisticated, high-resolution analysis which can accurately measure+ operations that run in as little as a few hundred picoseconds. -# Get involved!+* [Output to active HTML](https://hackage.haskell.org/package/criterion/src/www/report.html) (with JavaScript charts), CSV,+ and JSON. Write your own report templates to customize exactly how+ your results are presented. +* Linear regression model that allows measuring the effects of garbage+ collection and other factors.++* Measurements are cross-validated to ensure that sources of+ significant noise (usually other activity on the system) can be+ identified.+++To get started, read the [tutorial below](#tutorial), and take a look+at the programs in the [examples+directory](https://github.com/haskell/criterion/tree/master/examples).+++## Credits and contacts++This library is written by Bryan O'Sullivan+(<bos@serpentine.com>) and maintained by Ryan Scott (<ryan.gl.scott@gmail.com>). Please report bugs via the-[github issue tracker](https://github.com/bos/criterion).+[GitHub issue tracker](https://github.com/haskell/criterion/issues). -Master [github repository](https://github.com/bos/criterion): -* `git clone git://github.com/bos/criterion.git`+# Tutorial -There's also a [Mercurial mirror](http://bitbucket.org/bos/criterion): -* `hg clone https://bitbucket.org/bos/criterion`+## Getting started -(You can create and contribute changes using either Mercurial or git.)+Here's `Fibber.hs`: a simple and complete benchmark, measuring the performance of+the ever-ridiculous `fib` function. +```haskell+{- cabal:+build-depends: base, criterion+-} -# Authors+import Criterion.Main -This library is written and maintained by Bryan O'Sullivan,-<bos@serpentine.com>.+-- The function we're benchmarking.+fib :: Int -> Int+fib m | m < 0 = error "negative!"+ | otherwise = go m+ where+ go 0 = 0+ go 1 = 1+ go n = go (n - 1) + go (n - 2)++-- Our benchmark harness.+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++The+[`defaultMain`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:defaultMain)+function takes a list of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values, each of which describes a function to benchmark. (We'll come+back to `bench` and `whnf` shortly, don't worry.)++To maximise our convenience, `defaultMain` will parse command line+arguments and then run any benchmarks we ask. Let's run our benchmark+program (it might take some time if you never used Criterion before, since+the library has to be downloaded and compiled).++```+$ cabal run Fibber.hs+benchmarking fib/1+time 13.77 ns (13.49 ns .. 14.07 ns)+ 0.998 R² (0.997 R² .. 1.000 R²)+mean 13.56 ns (13.49 ns .. 13.70 ns)+std dev 305.1 ps (64.14 ps .. 532.5 ps)+variance introduced by outliers: 36% (moderately inflated)++benchmarking fib/5+time 173.9 ns (172.8 ns .. 175.6 ns)+ 1.000 R² (0.999 R² .. 1.000 R²)+mean 173.8 ns (173.1 ns .. 175.4 ns)+std dev 3.149 ns (1.842 ns .. 5.954 ns)+variance introduced by outliers: 23% (moderately inflated)++benchmarking fib/9+time 1.219 μs (1.214 μs .. 1.228 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 1.219 μs (1.216 μs .. 1.223 μs)+std dev 12.43 ns (9.907 ns .. 17.29 ns)++benchmarking fib/11+time 3.253 μs (3.246 μs .. 3.260 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 3.248 μs (3.243 μs .. 3.254 μs)+std dev 18.94 ns (16.57 ns .. 21.95 ns)++```++Even better, the `--output` option directs our program to write a+report to the file [`fibber.html`](fibber.html).++```shellsession+$ cabal run Fibber.hs -- --output fibber.html+...similar output as before...+```++Click on the image to see a complete report. If you mouse over the data+points in the charts, you'll see that they are *live*, giving additional+information about what's being displayed.++<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a>+++### Understanding charts++A report begins with a summary of all the numbers measured.+Underneath is a breakdown of every benchmark, each with two charts and+some explanation.++The chart on the left is a+[kernel density estimate](https://en.wikipedia.org/wiki/Kernel_density_estimation)+(also known as a KDE) of time measurements. This graphs the+*probability* of any given time measurement occurring. A spike+indicates that a measurement of a particular time occurred; its height+indicates how often that measurement was repeated.++> [!NOTE]+> **Why not use a histogram?**+> +> A more popular alternative to the KDE for this kind of display is the+> [histogram](https://en.wikipedia.org/wiki/Histogram). Why do we use a+> KDE instead? In order to get good information out of a histogram, you+> have to+> [choose a suitable bin size](https://en.wikipedia.org/wiki/Histogram#Number_of_bins_and_width).+> This is a fiddly manual task. In contrast, a KDE is likely to be+> informative immediately, with no configuration required.++The chart on the right contains the raw measurements from which the+kernel density estimate was built. The $x$ axis indicates the number+of loop iterations, while the $y$ axis shows measured execution time+for the given number of iterations. The line “behind” the values is a+linear regression generated from this data. Ideally, all measurements+will be on (or very near) this line.+++### Understanding the data under a chart++Underneath the chart for each benchmark is a small table of+information that looks like this.++| | lower bound | estimate | upper bound |+|----------------------|-------------|------------|-------------|+| OLS regression | 31.0 ms | 37.4 ms | 42.9 ms |+| R² goodness-of-fit | 0.887 | 0.942 | 0.994 |+| Mean execution time | 34.8 ms | 37.0 ms | 43.1 ms |+| Standard deviation | 2.11 ms | 6.49 ms | 11.0 ms |++The second row is the result of a linear regression run on the measurements displayed in the right-hand chart.++* “**OLS regression**” estimates the time needed for a single+ execution of the activity being benchmarked, using an+ [ordinary least-squares regression model](https://en.wikipedia.org/wiki/Ordinary_least_squares).+ This number should be similar to the “mean execution time” row a+ couple of rows beneath. The OLS estimate is usually more accurate+ than the mean, as it more effectively eliminates measurement+ overhead and other constant factors.++* “**R² goodness-of-fit**” is a measure of how accurately the linear+ regression model fits the observed measurements. If the measurements+ are not too noisy, R² should lie between 0.99 and 1, indicating an+ excellent fit. If the number is below 0.99, something is confounding+ the accuracy of the linear model. A value below 0.9 is outright+ worrisome.++* “**Mean execution time**” and “**Standard deviation**” are+ statistics calculated (more or less) from execution time divided by+ number of iterations.++On either side of the main column of values are greyed-out lower and+upper bounds. These measure the *accuracy* of the main estimate using+a statistical technique called+[*bootstrapping*](https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). This+tells us that when randomly resampling the data, 95% of estimates fell+within between the lower and upper bounds. When the main estimate is+of good quality, the lower and upper bounds will be close to its+value.+++## Reading command line output++Before you look at HTML reports, you'll probably start by inspecting+the report that criterion prints in your terminal window.++```+benchmarking ByteString/HashMap/random+time 4.046 ms (4.020 ms .. 4.072 ms)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 4.017 ms (4.010 ms .. 4.027 ms)+std dev 27.12 μs (20.45 μs .. 38.17 μs)+```++The first column is a name; the second is an estimate. The third and+fourth, in parentheses, are the 95% lower and upper bounds on the+estimate.++* `time` corresponds to the “OLS regression” field in the HTML table+ above.++* `R²` is the goodness-of-fit metric for `time`.++* `mean` and `std dev` have the same meanings as “Mean execution time”+ and “Standard deviation” in the HTML table.+++## How to write a benchmark suite++A criterion benchmark suite consists of a series of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+++We group related benchmarks together using the+[`bgroup`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bgroup)+function. Its first argument is a name for the group of benchmarks.++```haskell+bgroup :: String -> [Benchmark] -> Benchmark+```++All the magic happens with the+[`bench`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bench)+function. The first argument to `bench` is a name that describes the+activity we're benchmarking.++```haskell+bench :: String -> Benchmarkable -> Benchmark+bench = Benchmark+```++The+[`Benchmarkable`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmarkable)+type is a container for code that can be benchmarked.++By default, criterion allows two kinds of code to be benchmarked.++* Any `IO` action can be benchmarked directly.++* With a little trickery, we can benchmark pure functions.+++### Benchmarking an `IO` action++This function shows how we can benchmark an `IO` action.++```haskell+import Criterion.Main++main = defaultMain [+ bench "readFile" $ nfIO (readFile "GoodReadFile.hs")+ ]+```+([examples/GoodReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/GoodReadFile.hs))++We use+[`nfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nfIO)+to specify that after we run the `IO` action, its result must be+evaluated to <span id="normal-form">normal form</span>, i.e. so that+all of its internal constructors are fully evaluated, and it contains+no thunks.++```haskell+nfIO :: NFData a => IO a -> Benchmarkable+```++Rules of thumb for when to use `nfIO`:++* Any time that lazy I/O is involved, use `nfIO` to avoid resource+ leaks.++* If you're not sure how much evaluation will have been performed on+ the result of an action, use `nfIO` to be certain that it's fully+ evaluated.+++### `IO` and `seq`++In addition to `nfIO`, criterion provides a+[`whnfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnfIO)+function that evaluates the result of an action only deep enough for+the outermost constructor to be known (using `seq`). This is known as+<span id="weak-head-normal-form">**weak head normal form** (WHNF)</span>.++```haskell+whnfIO :: IO a -> Benchmarkable+```++This function is useful if your `IO` action returns a simple value+like an `Int`, or something more complex like a+[`Map`](http://hackage.haskell.org/package/containers/docs/Data-Map-Lazy.html#t:Map)+where evaluating the outermost constructor will do “enough work”.+++## Be careful with lazy I/O!++Experienced Haskell programmers don't use lazy I/O very often, and+here's an example of why: if you try to run the benchmark below, it+will probably *crash*.++```haskell+import Criterion.Main++main = defaultMain [+ bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs")+ ]+```+([examples/BadReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/BadReadFile.hs))++The reason for the crash is that `readFile` reads the contents of a+file lazily: it can't close the file handle until whoever opened the+file reads the whole thing. Since `whnfIO` only evaluates the very+first constructor after the file is opened, the benchmarking loop+causes a large number of open files to accumulate, until the+inevitable occurs:++```shellsession+$ ./BadReadFile+benchmarking whnfIO readFile+openFile: resource exhausted (Too many open files)+```+++## Beware “pretend” I/O!++GHC is an aggressive compiler. If you have an `IO` action that+doesn't really interact with the outside world, *and* it has just the+right structure, GHC may notice that a substantial amount of its+computation can be memoised via “let-floating”.++There exists a+[somewhat contrived example](https://github.com/haskell/criterion/blob/master/examples/ConduitVsPipes.hs)+of this problem, where the first two benchmarks run between 40 and+40,000 times faster than they “should”.++As always, if you see numbers that look wildly out of whack, you+shouldn't rejoice that you have magically achieved fast+performance—be skeptical and investigate!+++> [!TIP]+> **Defeating let-floating**+> +> Fortunately for this particular misbehaving benchmark suite, GHC has+> an option named+> [`-fno-full-laziness`](https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html#ghc-flag-ffull-laziness)+> that will turn off let-floating and restore the first two benchmarks+> to performing in line with the second two.+>+> You should not react by simply throwing `-fno-full-laziness` into+> every GHC-and-criterion command line, as let-floating helps with+> performance more often than it hurts with benchmarking.+++## Benchmarking pure functions++Lazy evaluation makes it tricky to benchmark pure code. If we tried to+saturate a function with all of its arguments and evaluate it+repeatedly, laziness would ensure that we'd only do “real work” the+first time through our benchmarking loop. The expression would be+overwritten with that result, and no further work would happen on+subsequent loops through our benchmarking harness.++We can defeat laziness by benchmarking an *unsaturated* function—one+that has been given *all but one* of its arguments.++This is why the+[`nf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nf)+function accepts two arguments: the first is the almost-saturated+function we want to benchmark, and the second is the final argument to+give it.++```haskell+nf :: NFData b => (a -> b) -> a -> Benchmarkable+```++As the+[`NFData`](http://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData)+constraint suggests, `nf` applies the argument to the function, then+evaluates the result to <a href="#normal-form">normal form</a>.++The+[`whnf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnf)+function evaluates the result of a function only to <a+href="#weak-head-normal-form">weak head normal form</a> (WHNF).++```haskell+whnf :: (a -> b) -> a -> Benchmarkable+```++If we go back to our first example, we can now fully understand what's+going on.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++We can get away with using `whnf` here because we know that an+`Int` has only one constructor, so there's no deeper buried+structure that we'd have to reach using `nf`.++As with benchmarking `IO` actions, there's no clear-cut case for when+to use `whfn` versus `nf`, especially when a result may be lazily+generated.++Guidelines for thinking about when to use `nf` or `whnf`:++* If a result is a lazy structure (or a mix of strict and lazy, such+ as a balanced tree with lazy leaves), how much of it would a+ real-world caller use? You should be trying to evaluate as much of+ the result as a realistic consumer would. Blindly using `nf` could+ cause way too much unnecessary computation.++* If a result is something simple like an `Int`, you're probably safe+ using `whnf`—but then again, there should be no additional cost to+ using `nf` in these cases.+++## Using the criterion command line++By default, a criterion benchmark suite simply runs all of its+benchmarks. However, criterion accepts a number of arguments to+control its behaviour. Run your program with `--help` for a complete+list.+++### Specifying benchmarks to run++The most common thing you'll want to do is specify which benchmarks+you want to run. You can do this by simply enumerating each+benchmark.++```shellsession+$ ./Fibber 'fib/fib 1'+```++By default, any names you specify are treated as prefixes to match, so+you can specify an entire group of benchmarks via a name like+`"fib/"`. Use the `--match` option to control this behaviour. There are+currently four ways to configure `--match`:++* `--match prefix`: Check if the given string is a prefix of a benchmark+ path. For instance, `"foo"` will match `"foobar"`.++* `--match glob`: Use the given string as a Unix-style glob pattern. Bear in+ mind that performing a glob match on benchmarks names is done as if they were+ file paths, so for instance both `"*/ba*"` and `"*/*"` will match `"foo/bar"`,+ but neither `"*"` nor `"*bar"` will match `"foo/bar"`.++* `--match pattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path. For instance `"ooba"` will match+ `"foobar"`.++* `--match ipattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path, but in a case-insensitive fashion. For+ instance, `"oObA"` will match `"foobar"`.++### Listing benchmarks++If you've forgotten the names of your benchmarks, run your program+with `--list` and it will print them all.+++### How long to spend measuring data++By default, each benchmark runs for 5 seconds.++You can control this using the `--time-limit` option, which specifies+the minimum number of seconds (decimal fractions are acceptable) that+a benchmark will spend gathering data. The actual amount of time+spent may be longer, if more data is needed.+++### Writing out data++Criterion provides several ways to save data.++The friendliest is as HTML, using `--output`. Files written using+`--output` are actually generated from Mustache-style templates. The+only other template provided by default is `json`, so if you run with+`--template json --output mydata.json`, you'll get a big JSON dump of+your data.++You can also write out a basic CSV file using `--csv`, a JSON file using+`--json`, and a JUnit-compatible XML file using `--junit`. (The contents+of these files are likely to change in the not-too-distant future.)+++## Linear regression++If you want to perform linear regressions on metrics other than+elapsed time, use the `--regress` option. This can be tricky to use+if you are not familiar with linear regression, but here's a thumbnail+sketch.++The purpose of linear regression is to predict how much one variable+(the *responder*) will change in response to a change in one or more+others (the *predictors*).++On each step through a benchmark loop, criterion changes the number of+iterations. This is the most obvious choice for a predictor+variable. This variable is named `iters`.++If we want to regress CPU time (`cpuTime`) against iterations, we can+use `cpuTime:iters` as the argument to `--regress`. This generates+some additional output on the command line:++```+time 31.31 ms (30.44 ms .. 32.22 ms)+ 0.997 R² (0.994 R² .. 0.999 R²)+mean 30.56 ms (30.01 ms .. 30.99 ms)+std dev 1.029 ms (754.3 μs .. 1.503 ms)++cpuTime: 0.997 R² (0.994 R² .. 0.999 R²)+ iters 3.129e-2 (3.039e-2 .. 3.221e-2)+ y -4.698e-3 (-1.194e-2 .. 1.329e-3)+```++After the block of normal data, we see a series of new rows.++On the first line of the new block is an R² goodness-of-fit measure,+so we can see how well our choice of regression fits the data.++On the second line, we get the slope of the `cpuTime`/`iters` curve,+or (stated another way) how much `cpuTime` each iteration costs.++The last entry is the $y$-axis intercept.+++### Measuring garbage collector statistics++By default, GHC does not collect statistics about the operation of its+garbage collector. If you want to measure and regress against GC+statistics, you must explicitly enable statistics collection at+runtime using `+RTS -T`.+++### Useful regressions++| regression | `--regress` | notes+| -------------------------------|------------------- |-----------+| CPU cycles | `cycles:iters` |+| Bytes allocated | `allocated:iters` | `+RTS -T`+| Number of garbage collections | `numGcs:iters` | `+RTS -T`+| CPU frequency | `cycles:time` |+++## Tips, tricks, and pitfalls++While criterion tries hard to automate as much of the benchmarking+process as possible, there are some things you will want to pay+attention to.++* Measurements are only as good as the environment in which they're+ gathered. Try to make sure your computer is quiet when measuring+ data.++* Be judicious in when you choose `nf` and `whnf`. Always think about+ what the result of a function is, and how much of it you want to+ evaluate.++* Simply rerunning a benchmark can lead to variations of a few percent+ in numbers. This variation can have many causes, including address+ space layout randomization, recompilation between runs, cache+ effects, CPU thermal throttling, and the phase of the moon. Don't+ treat your first measurement as golden!++* Keep an eye out for completely bogus numbers, as in the case of+ `-fno-full-laziness` above.++* When you need trustworthy results from a benchmark suite, run each+ measurement as a separate invocation of your program. When you run+ a number of benchmarks during a single program invocation, you will+ sometimes see them interfere with each other.+++### How to sniff out bogus results++If some external factors are making your measurements noisy, criterion+tries to make it easy to tell. At the level of raw data, noisy+measurements will show up as “outliers”, but you shouldn't need to+inspect the raw data directly.++The easiest yellow flag to spot is the R² goodness-of-fit measure+dropping below 0.9. If this happens, scrutinise your data carefully.++Another easy pattern to look for is severe outliers in the raw+measurement chart when you're using `--output`. These should be easy+to spot: they'll be points sitting far from the linear regression line+(usually above it).++If the lower and upper bounds on an estimate aren't “tight” (close to+the estimate), this suggests that noise might be having some kind of+negative effect.++A warning about “variance introduced by outliers” may be printed.+This indicates the degree to which the standard deviation is inflated+by outlying measurements, as in the following snippet (notice that the+lower and upper bounds aren't all that tight, too).++```+std dev 652.0 ps (507.7 ps .. 942.1 ps)+variance introduced by outliers: 91% (severely inflated)+```++## Generating (HTML) reports from previous benchmarks with criterion-report++If you want to post-process benchmark data before generating a HTML report you+can use the `criterion-report` executable to generate HTML reports from+criterion generated JSON. To store the benchmark results run criterion with the+`--json` flag to specify where to store the results. You can then use:+`criterion-report data.json report.html` to generate a HTML report of the data.+`criterion-report` also accepts the `--template` flag accepted by criterion.
+ app/Options.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-}+module Options+ (+ CommandLine(..)+ , commandLine+ , parseCommandLine+ , versionInfo+ ) where++import Data.Data (Data)+import Data.Version (showVersion)+import GHC.Generics (Generic)+import Paths_criterion (version)+import Prelude ()+import Prelude.Compat+import Options.Applicative++data CommandLine+ = Report { jsonFile :: FilePath, outputFile :: FilePath, templateFile :: FilePath }+ | Version+ deriving (Eq, Read, Show, Data, Generic)++reportOptions :: Parser CommandLine+reportOptions = Report <$> measurements <*> outputFile <*> templateFile+ where+ measurements = strArgument $ mconcat+ [metavar "INPUT-JSON", help "Json file to read Criterion output from."]++ outputFile = strArgument $ mconcat+ [metavar "OUTPUT-FILE", help "File to output formatted report too."]++ templateFile = strOption $ mconcat+ [ long "template", short 't', metavar "FILE", value "default",+ help "Template to use for report." ]++parseCommand :: Parser CommandLine+parseCommand =+ (Version <$ switch (long "version" <> help "Show version info")) <|>+ (subparser $+ command "report" (info reportOptions (progDesc "Generate report.")))++commandLine :: ParserInfo CommandLine+commandLine = info (helper <*> parseCommand) $+ header versionInfo <>+ fullDesc++parseCommandLine :: IO CommandLine+parseCommandLine = execParser commandLine++versionInfo :: String+versionInfo = "criterion " ++ showVersion version
+ app/Report.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE RecordWildCards #-}+module Main (main) where++import System.Exit (exitSuccess, exitFailure)+import System.IO (hPutStrLn, stderr)++import Criterion.IO (readJSONReports)+import Criterion.Main (defaultConfig)+import Criterion.Monad (withConfig)+import Criterion.Report (report)+import Criterion.Types (Config(reportFile, template))++import Options++main :: IO ()+main = do+ cmd <- parseCommandLine+ case cmd of+ Version -> putStrLn versionInfo >> exitSuccess+ Report{..} -> do+ let config = defaultConfig+ { reportFile = Just outputFile+ , template = templateFile+ }++ res <- readJSONReports jsonFile+ case res of+ Left err -> do+ hPutStrLn stderr $ "Error reading file: " ++ jsonFile+ hPutStrLn stderr $ " " ++ show err+ exitFailure+ Right (_,_,rpts) -> withConfig config $ report rpts
+ changelog.md view
@@ -0,0 +1,386 @@+1.6.5.0++* Make the test suite work with `tasty-1.5.4` or later.+* Remove unused `parsec`, `time`, and `vector-algorithms` dependencies.++1.6.4.1++* Merge tutorial into README.++1.6.4.0++* Drop support for pre-8.0 versions of GHC.++1.6.3.0++* Remove a use of the partial `head` function within `criterion`.++1.6.2.0++* Require `optparse-applicative-0.18.*` as the minimum and add an explicit+ dependency on `prettyprinter` and `prettyprinter-ansi-terminal`.++1.6.1.0++* Support building with `optparse-applicative-0.18.*`.++1.6.0.0++* `criterion-measurement-0.2.0.0` adds the `measPeakMbAllocated` field to+ `Measured` for reporting maximum megabytes allocated. Since `criterion`+ re-exports `Measured` from `Criterion.Types`, this change affects `criterion`+ as well. Naturally, this affects the behavior of `Measured`'s `{To,From}JSON`+ and `Binary` instances.+* Fix a bug in which the `--help` text for the `--match` option was printed+ twice in `criterion` applications.++1.5.13.0++* Allow building with `optparse-applicative-0.17.*`.++1.5.12.0++* Fix a bug introduced in version 1.5.9.0 in which benchmark names that include+ double quotes would produce broken HTML reports.++1.5.11.0++* Allow building with `aeson-2.0.0.0`.++1.5.10.0++* Fix a bug in which the `defaultMainWith` function would not use the+ `regressions` values specified in the `Config` argument. This bug only+ affected `criterion` the library—uses of the `--regressions` flag from+ `criterion` executables themselves were unaffected.++1.5.9.0++* Fix a bug where HTML reports failed to escape JSON properly.++1.5.8.0++* The HTML reports have been reworked.++ * The `flot` plotting library (`js-flot` on Hackage) has been replaced by+ `Chart.js` (`js-chart`).+ * Most practical changes focus on improving the functionality of the overview+ chart:+ * It now supports logarithmic scale (#213). The scale can be toggled by+ clicking the x-axis.+ * Manual zooming has been replaced by clicking to focus a single bar.+ * It now supports a variety of sort orders.+ * The legend can now be toggled on/off and is hidden by default.+ * Clicking the name of a group in the legend shows/hides all bars in that+ group.+ * The regression line on the scatter plot shows confidence interval.+ * Better support for mobile and print.+ * JSON escaping has been made more robust by no longer directly injecting+ reports as JavaScript code.++1.5.7.0++* Warn if an HTML report name contains newlines, and replace newlines with+ whitespace to avoid syntax errors in the report itself.++1.5.6.2++* Use unescaped HTML in the `json.tpl` template.++1.5.6.1++* Bundle `criterion-examples`' `LICENSE` file.++1.5.6.0++* Allow building with `base-compat-batteries-0.11`.++1.5.5.0++* Fix the build on old GHCs with the `embed-data-files` flag.+* Require `transformers-compat-0.6.4` or later.++1.5.4.0++* Add `parserWith`, which allows creating a `criterion` command-line interface+ using a custom `optparse-applicative` `Parser`. This is usefule for sitations+ where one wants to add additional command-line arguments to the default ones+ that `criterion` provides.++ For an example of how to use `parserWith`, refer to+ `examples/ExtensibleCLI.hs`.++* Tweak the way the graph in the HTML overview zooms:++ * Zooming all the way out resets to the default view (instead of continuing+ to zoom out towards empty space).+ * Panning all the way to the right resets to the default view in which zero+ is left-aligned (instead of continuing to pan off the edge of the graph).+ * Panning and zooming only affecs the x-axis, so all results remain in-frame.++1.5.3.0++* Make more functions (e.g., `runMode`) able to print the `µ` character on+ non-UTF-8 encodings.++1.5.2.0++* Fix a bug in which HTML reports would render incorrectly when including+ benchmark names containing apostrophes.++* Only incur a dependency on `fail` on old GHCs.++1.5.1.0++* Add a `MonadFail Criterion` instance.++* Add some documentation in `Criterion.Main` about `criterion-measurement`'s+ new `nfAppIO` and `whnfAppIO` functions, which `criterion` reexports.++1.5.0.0++* Move the measurement functionality of `criterion` into a standalone package,+ `criterion-measurement`. In particular, `cbits/` and `Criterion.Measurement`+ are now in `criterion-measurement`, along with the relevant definitions of+ `Criterion.Types` and `Criterion.Types.Internal` (both of which are now under+ the `Criterion.Measurement.*` namespace).+ Consequently, `criterion` now depends on `criterion-measurement`.++ This will let other libraries (e.g. alternative statistical analysis+ front-ends) to import the measurement functionality alone as a lightweight+ dependency.++* Fix a bug on macOS and Windows where using `runAndAnalyse` and other+ lower-level benchmarking functions would result in an infinite loop.++1.4.1.0++* Use `base-compat-batteries`.++1.4.0.0++* We now do three samples for statistics:++ * `performMinorGC` before the first sample, to ensure it's up to date.+ * Take another sample after the action, without a garbage collection, so we+ can gather legitimate readings on GC-related statistics.+ * Then `performMinorGC` and sample once more, so we can get up-to-date+ readings on other metrics.++ The type of `applyGCStatistics` has changed accordingly. Before, it was:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ Now, it is:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run, post-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the end of a run, pre-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ When diffing `GCStatistics` in `applyGCStatistics`, we carefully choose+ whether to diff against the end stats pre- or post-GC.++* Use `performMinorGC` rather than `performGC` to update garbage collection+ statistics. This improves the benchmark performance of fast functions on large+ objects.++* Fix a bug in the `ToJSON Measured` instance which duplicated the+ mutator CPU seconds where GC CPU seconds should go.++* Fix a bug in sample analysis which incorrectly accounted for overhead+ causing runtime errors and invalid results. Accordingly, the buggy+ `getOverhead` function has been removed.++* Fix a bug in `Measurement.measure` which inflated the reported time taken+ for `perRun` benchmarks.++* Reduce overhead of `nf`, `whnf`, `nfIO`, and `whnfIO` by removing allocation+ from the central loops.++1.3.0.0++* `criterion` was previously reporting the following statistics incorrectly+ on GHC 8.2 and later:++ * `gcStatsBytesAllocated`+ * `gcStatsBytesCopied`+ * `gcStatsGcCpuSeconds`+ * `gcStatsGcWallSeconds`++ This has been fixed.++* The type signature of `runBenchmarkable` has changed from:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (IO () -> IO a) -> IO a+ ```++ to:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (Int64 -> IO () -> IO a) -> IO a+ ```++ The extra `Int64` argument represents how many iterations are being timed.++* Remove the deprecated `getGCStats` and `applyGCStats` functions (which have+ been replaced by `getGCStatistics` and `applyGCStatistics`).+* Remove the deprecated `forceGC` field of `Config`, as well as the+ corresponding `--no-gc` command-line option.+* The header in generated JSON output mistakenly used the string `"criterio"`.+ This has been corrected to `"criterion"`.++1.2.6.0++* Add error bars and zoomable navigation to generated HTML report graphs.++ (Note that there have been reports that this feature can be somewhat unruly+ when using macOS and Firefox simultaneously. See+ https://github.com/flot/flot/issues/1554 for more details.)++* Use a predetermined set of cycling colors for benchmark groups in HTML+ reports. This avoids a bug in earlier versions of `criterion` where benchmark+ group colors could be chosen that were almost completely white, which made+ them impossible to distinguish from the background.++1.2.5.0++* Add an `-fembed-data-files` flag. Enabling this option will embed the+ `data-files` from `criterion.cabal` directly into the binary, producing+ a relocatable executable. (This has the downside of increasing the binary+ size significantly, so be warned.)++1.2.4.0++* Fix issue where `--help` would display duplicate options.++1.2.3.0++* Add a `Semigroup` instance for `Outliers`.++* Improve the error messages that are thrown when forcing nonexistent+ benchmark environments.++* Explicitly mark `forceGC` as deprecated. `forceGC` has not had any effect+ for several releases, and it will be removed in the next major `criterion`+ release.++1.2.2.0++* Important bugfix: versions 1.2.0.0 and 1.2.1.0 were incorrectly displaying+ the lower and upper bounds for measured values on HTML reports.++* Have `criterion` emit warnings if suspicious things happen during mustache+ template substitution when creating HTML reports. This can be useful when+ using custom templates with the `--template` flag.++1.2.1.0++* Add `GCStatistics`, `getGCStatistics`, and `applyGCStatistics` to+ `Criterion.Measurement`. These are inteded to replace `GCStats` (which has+ been deprecated in `base` and will be removed in GHC 8.4), as well as+ `getGCStats` and `applyGCStats`, which have also been deprecated and will be+ removed in the next major `criterion` release.++* Add new matchers for the `--match` flag:+ * `--match pattern`, which matches by searching for a given substring in+ benchmark paths.+ * `--match ipattern`, which is like `--match pattern` but case-insensitive.++* Export `Criterion.Main.Options.config`.++* Export `Criterion.toBenchmarkable`, which behaves like the `Benchmarkable`+ constructor did prior to `criterion-1.2.0.0`.++1.2.0.0++* Use `statistics-0.14`.++* Replace the `hastache` dependency with `microstache`.++* Add support for per-run allocation/cleanup of the environment with+ `perRunEnv` and `perRunEnvWithCleanup`,++* Add support for per-batch allocation/cleanup with+ `perBatchEnv` and `perBatchEnvWithCleanup`.++* Add `envWithCleanup`, a variant of `env` with cleanup support.++* Add the `criterion-report` executable, which creates reports from previously+ created JSON files.++1.1.4.0++* Unicode output is now correctly printed on Windows.++* Add Safe Haskell annotations.++* Add `--json` option for writing reports in JSON rather than binary+ format. Also: various bugfixes related to this.++* Use the `js-jquery` and `js-flot` libraries to substitute in JavaScript code+ into the default HTML report template.++* Use the `code-page` library to ensure that `criterion` prints out Unicode+ characters (like ², which `criterion` uses in reports) in a UTF-8-compatible+ code page on Windows.++* Give an explicit implementation for `get` in the `Binary Regression`+ instance. This should fix sporadic `criterion` failures with older versions+ of `binary`.++* Use `tasty` instead of `test-framework` in the test suites.++* Restore support for 32-bit Intel CPUs.++* Restore build compatibilty with GHC 7.4.++1.1.1.0++* If a benchmark uses `Criterion.env` in a non-lazy way, and you try+ to use `--list` to list benchmark names, you'll now get an+ understandable error message instead of something cryptic.++* We now flush stdout and stderr after printing messages, so that+ output is printed promptly even when piped (e.g. into a pager).++* A new function `runMode` allows custom benchmarking applications to+ run benchmarks with control over the `Mode` used.++* Added support for Linux on non-Intel CPUs.++* This version supports GHC 8.++* The `--only-run` option for benchmarks is renamed to `--iters`.++1.1.0.0++* The dependency on the either package has been dropped in favour of a+ dependency on transformers-compat. This greatly reduces the number+ of packages criterion depends on. This shouldn't affect the+ user-visible API.++* The documentation claimed that environments were created only when+ needed, but this wasn't implemented. (gh-76)++* The package now compiles with GHC 7.10.++* On Windows with a non-Unicode code page, printing results used to+ cause a crash. (gh-55)++1.0.2.0++* Bump lower bound on optparse-applicative to 0.11 to handle yet more+ annoying API churn.++1.0.1.0++* Added a lower bound of 0.10 on the optparse-applicative dependency,+ as there were major API changes between 0.9 and 0.10.
criterion.cabal view
@@ -1,88 +1,204 @@ name: criterion-version: 0.8.1.0+version: 1.6.5.0 synopsis: Robust, reliable performance measurement and analysis license: BSD3 license-file: LICENSE author: Bryan O'Sullivan <bos@serpentine.com>-maintainer: Bryan O'Sullivan <bos@serpentine.com>-copyright: 2009-2013 Bryan O'Sullivan+maintainer: Ryan Scott <ryan.gl.scott@gmail.com>+copyright: 2009-present Bryan O'Sullivan and others category: Development, Performance, Testing, Benchmarking-homepage: https://github.com/bos/criterion-bug-reports: https://github.com/bos/criterion/issues+homepage: https://github.com/haskell/criterion+bug-reports: https://github.com/haskell/criterion/issues build-type: Simple-cabal-version: >= 1.6+cabal-version: >= 1.10 extra-source-files: README.markdown+ changelog.md+ examples/LICENSE+ examples/*.cabal examples/*.hs- examples/*.html+ www/fibber.html+ www/report.html+ www/fibber-screenshot.png+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2 data-files:- templates/js/excanvas-r3.min.js- templates/js/jquery-1.6.4.min.js- templates/js/jquery.criterion.js- templates/js/jquery.flot-0.7.min.js templates/*.css templates/*.tpl+ templates/*.js description: This library provides a powerful but simple way to measure software- performance. It provides both a framework for executing and+ performance. It consists of both a framework for executing and analysing benchmarks and a set of driver functions that makes it easy to build and run benchmarks, and to analyse their results. .- The fastest way to get started is to read the documentation and- examples in the Criterion.Main module.- .- For an example of the kinds of reports that criterion generates, see- <http://bos.github.com/criterion/>.+ The fastest way to get started is to read the+ <https://github.com/haskell/criterion/blob/master/README.markdown#tutorial online tutorial>,+ followed by the documentation and examples in the "Criterion.Main"+ module. +flag fast+ description: compile without optimizations+ default: False+ manual: True++flag embed-data-files+ description: Embed the data files in the binary for a relocatable executable.+ (Warning: This will increase the executable size significantly.)+ default: False+ manual: True+ library exposed-modules: Criterion Criterion.Analysis- Criterion.Analysis.Types- Criterion.Config- Criterion.Environment Criterion.IO Criterion.IO.Printf+ Criterion.Internal Criterion.Main- Criterion.Measurement+ Criterion.Main.Options Criterion.Monad Criterion.Report Criterion.Types other-modules:- Criterion.Internal+ Criterion.Monad.Internal++ other-modules: Paths_criterion build-depends:- aeson >= 0.3.2.12,- base < 5,- binary >= 0.6.3.0,- bytestring >= 0.9 && < 1.0,+ aeson >= 2 && < 2.3,+ base >= 4.9 && < 5,+ base-compat-batteries >= 0.10 && < 0.16,+ binary >= 0.8.3.0,+ binary-orphans >= 1.0.1 && < 1.1,+ bytestring >= 0.10.8.1 && < 1.0,+ cassava >= 0.3.0.0,+ code-page, containers,+ criterion-measurement >= 0.2 && < 0.3, deepseq >= 1.1.0.0, directory,+ exceptions >= 0.8.2 && < 0.11, filepath, Glob >= 0.7.2,- hastache >= 0.6.0,+ microstache >= 1.0.1 && < 1.1,+ js-chart >= 2.9.4 && < 3, mtl >= 2, mwc-random >= 0.8.0.3,- parsec >= 3.1.0,- statistics >= 0.11,+ optparse-applicative >= 0.18 && < 0.20,+ prettyprinter >= 1.7 && < 1.8,+ prettyprinter-ansi-terminal >= 1.1 && < 1.2,+ statistics >= 0.14 && < 0.17, text >= 0.11,- time, transformers,- vector >= 0.7.1,- vector-algorithms >= 0.4- if impl(ghc < 7.6)- build-depends:- ghc-prim+ transformers-compat >= 0.6.4,+ vector >= 0.7.1 - ghc-options: -O2 -Wall -funbox-strict-fields- if impl(ghc >= 6.8)- ghc-options: -fwarn-tabs+ default-language: Haskell2010+ ghc-options: -Wall -funbox-strict-fields -Wtabs+ if flag(fast)+ ghc-options: -O0+ else+ ghc-options: -O2 + if flag(embed-data-files)+ other-modules: Criterion.EmbeddedData+ build-depends: file-embed < 0.1,+ template-haskell+ cpp-options: "-DEMBED"++Executable criterion-report+ Default-Language: Haskell2010+ GHC-Options: -Wall -rtsopts+ Main-Is: Report.hs+ Other-Modules: Options+ Paths_criterion+ Hs-Source-Dirs: app++ Build-Depends:+ base,+ base-compat-batteries,+ criterion,+ optparse-applicative >= 0.13++test-suite sanity+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ main-is: Sanity.hs+ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ if flag(fast)+ ghc-options: -O0+ else+ ghc-options: -O2++ build-depends:+ HUnit,+ base,+ bytestring,+ criterion,+ tasty,+ tasty-hunit++test-suite tests+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ main-is: Tests.hs+ default-language: Haskell2010+ other-modules: Properties++ ghc-options:+ -Wall -threaded -O0 -rtsopts++ build-depends:+ QuickCheck >= 2.4,+ base,+ base-compat-batteries,+ criterion,+ statistics,+ HUnit,+ tasty,+ tasty-hunit,+ tasty-quickcheck,+ vector,+ aeson++test-suite cleanup+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ default-language: Haskell2010+ main-is: Cleanup.hs++ ghc-options:+ -Wall -threaded -O0 -rtsopts++ build-depends:+ HUnit,+ base,+ base-compat,+ bytestring,+ criterion,+ deepseq,+ directory,+ tasty,+ tasty-hunit+ source-repository head type: git- location: git://github.com/bos/criterion.git+ location: https://github.com/haskell/criterion.git
+ examples/BadReadFile.hs view
@@ -0,0 +1,17 @@+-- This example demonstrates the peril of trying to benchmark a+-- function that performs lazy I/O.++import Criterion.Main++main :: IO ()+main = defaultMain [+ -- By using whnfIO, when the benchmark loop goes through an+ -- iteration, we inspect only the first constructor returned after+ -- the file is opened. Since the entire file must be read in+ -- order for it to be closed, this causes file handles to leak,+ -- and our benchmark will probably crash while running with an+ -- error like this:+ --+ -- openFile: resource exhausted (Too many open files)+ bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs")+ ]
examples/Comparison.hs view
@@ -1,9 +1,7 @@ import Criterion.Main main = defaultMain [- bcompare [- bench "exp" $ whnf exp (2 :: Double)- , bench "log" $ whnf log (2 :: Double)- , bench "sqrt" $ whnf sqrt (2 :: Double)- ]+ bench "exp" $ whnf exp (2 :: Double)+ , bench "log" $ whnf log (2 :: Double)+ , bench "sqrt" $ whnf sqrt (2 :: Double) ]
+ examples/ConduitVsPipes.hs view
@@ -0,0 +1,34 @@+-- Contributed by Gabriella Gonzales as a test case for+-- https://github.com/haskell/criterion/issues/35+--+-- The numbers reported by this benchmark can be made "more correct"+-- by compiling with the -fno-full-laziness option.++import Criterion.Main (bench, bgroup, defaultMain, nfIO, whnf)+import Data.Conduit (runConduit, (.|))+import Data.Functor.Identity (Identity(..))+import Pipes ((>->), discard, each, for, runEffect)+import qualified Data.Conduit.List as C+import qualified Pipes.Prelude as P++criterion :: Int -> IO ()+criterion n = defaultMain+ [ bgroup "IO"+ [ -- This will appear to run in just a few nanoseconds.+ bench "pipes" $ nfIO (pipes n)+ -- In contrast, this should take ~10 microseconds. Which is+ -- also wrong, as it happens.+ , bench "conduit" $ nfIO (conduit n)+ ]+ , bgroup "Identity"+ [ bench "pipes" $ whnf (runIdentity . pipes ) n+ , bench "conduit" $ whnf (runIdentity . conduit) n+ ]+ ]++pipes, conduit :: (Monad m) => Int -> m ()+pipes n = runEffect $ for (each [1..n] >-> P.map (+1) >-> P.filter even) discard+conduit n = runConduit $ C.sourceList [1..n] .| C.map (+1) .| C.filter even .| C.sinkNull++main :: IO ()+main = criterion 10000
+ examples/ExtensibleCLI.hs view
@@ -0,0 +1,38 @@+module Main where++import Criterion.Main+import Criterion.Main.Options+import Options.Applicative+import Prelude ()+import Prelude.Compat++data CustomArgs = CustomArgs+ { -- This data type adds two new arguments, listed below.+ customArg1 :: Int+ , customArg2 :: String++ -- The remaining arguments come from criterion itself.+ , criterionArgs :: Mode+ }++customParser :: Parser CustomArgs+customParser = CustomArgs+ <$> option auto+ ( long "custom-arg1"+ <> value 42+ <> metavar "INT"+ <> help "Custom argument 1" )+ <*> strOption+ ( long "custom-arg2"+ <> value "Benchmark name"+ <> metavar "STR"+ <> help "Custom argument 2" )+ <*> parseWith defaultConfig++main :: IO ()+main = do+ args <- execParser $ describeWith customParser+ putStrLn $ "custom-arg1: " ++ show (customArg1 args)+ putStrLn $ "custom-arg2: " ++ customArg2 args+ runMode (criterionArgs args)+ [ bench (customArg2 args) $ whnf id $ customArg1 args ]
examples/Fibber.hs view
@@ -1,45 +1,23 @@-{-# LANGUAGE ScopedTypeVariables #-}+{- cabal:+build-depends: base, criterion+-} import Criterion.Main +-- The function we're benchmarking. fib :: Int -> Int-fib n | n < 0 = error "negative!"- | otherwise = go (fromIntegral n)+fib m | m < 0 = error "negative!"+ | otherwise = go m where go 0 = 0 go 1 = 1 go n = go (n-1) + go (n-2) -fact :: Int -> Integer-fact n | n < 0 = error "negative!"- | otherwise = go (fromIntegral n)- where go 0 = 1- go i = i * go (i-1)--fio :: Int -> IO Integer-fio n | n < 0 = error "negative!"- | otherwise = go (fromIntegral n)- where go i | i == 0 = return 1- | otherwise = do- j <- go (i-1)- return $! i * j-+main :: IO () main = defaultMain [- bgroup "tiny" [ bench "fib 10" $ whnf fib 10- , bench "fib 15" $ whnf fib 15- , bench "fib 20" $ whnf fib 20- , bench "fib 25" $ whnf fib 25- ],- bgroup "fib" [ bench "fib 10" $ whnf fib 10- , bench "fib 35" $ whnf fib 35- , bench "fib 37" $ whnf fib 37- ],- bgroup "fact" [ bench "fact 100" $ whnf fact 100- , bench "fact 1000" $ whnf fact 1000- , bench "fact 3000" $ whnf fact 3000- ],- bgroup "fio" [ bench "fio 100" (fio 100)- , bench "fio 1000" (fio 1000)- , bench "fio 3000" (fio 3000)- ]- ]+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]
+ examples/GoodReadFile.hs view
@@ -0,0 +1,12 @@+-- This example demonstrates how to correctly benchmark a function+-- that performs lazy I/O.++import Criterion.Main++main :: IO ()+main = defaultMain [+ -- Because we are using nfIO here, the entire file will be read on+ -- each benchmark loop iteration. This will cause the associated+ -- file handle to be eagerly closed every time.+ bench "nfIO readFile" $ nfIO (readFile "GoodReadFile.hs")+ ]
examples/Judy.hs view
@@ -13,8 +13,7 @@ import qualified Data.IntMap as I import Data.List (foldl') --- Work around the fact that the GC won't run finalizers aggressively--- enough for us.+-- An example of how to specify a configuration value. myConfig = defaultConfig { cfgPerformGC = ljust True } main = defaultMainWith myConfig (return ()) [
+ examples/LICENSE view
@@ -0,0 +1,26 @@+Copyright (c) 2009, 2010 Bryan O'Sullivan+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ examples/Maps.hs view
@@ -0,0 +1,82 @@+-- Benchmark the cost of creating various types of map.++{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}++import Criterion.Main+import Data.ByteString (ByteString, pack)+import Data.Hashable (Hashable)+import System.Random.MWC+import qualified Data.HashMap.Lazy as H+import qualified Data.IntMap as I+import qualified Data.Map as M+import qualified Data.Vector as V+import qualified Data.Vector.Algorithms.Intro as I+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U++type V = U.Vector Int+type B = V.Vector ByteString++numbers :: IO (V, V, V)+numbers = do+ gen <- createSystemRandom+ random <- uniformVector gen 40000+ let sorted = G.modify I.sort random+ revsorted = G.reverse sorted+ return (random, sorted, revsorted)++strings :: IO (B, B, B)+strings = do+ gen <- createSystemRandom+ random <- V.replicateM 10000 $+ (pack . U.toList) `fmap` (uniformVector gen =<< uniformR (1,16) gen)+ let sorted = G.modify I.sort random+ revsorted = G.reverse sorted+ return (random, sorted, revsorted)++main :: IO ()+main = defaultMain [+ env numbers $ \ ~(random,sorted,revsorted) ->+ bgroup "Int" [+ bgroup "IntMap" [+ bench "sorted" $ whnf intmap sorted+ , bench "random" $ whnf intmap random+ , bench "revsorted" $ whnf intmap revsorted+ ]+ , bgroup "Map" [+ bench "sorted" $ whnf mmap sorted+ , bench "random" $ whnf mmap random+ , bench "revsorted" $ whnf mmap revsorted+ ]+ , bgroup "HashMap" [+ bench "sorted" $ whnf hashmap sorted+ , bench "random" $ whnf hashmap random+ , bench "revsorted" $ whnf hashmap revsorted+ ]+ ]+ , env strings $ \ ~(random,sorted,revsorted) ->+ bgroup "ByteString" [+ bgroup "Map" [+ bench "sorted" $ whnf mmap sorted+ , bench "random" $ whnf mmap random+ , bench "revsorted" $ whnf mmap revsorted+ ]+ , bgroup "HashMap" [+ bench "sorted" $ whnf hashmap sorted+ , bench "random" $ whnf hashmap random+ , bench "revsorted" $ whnf hashmap revsorted+ ]+ ]+ ]++hashmap :: (G.Vector v k, Hashable k, Eq k) => v k -> H.HashMap k Int+hashmap xs = G.foldl' (\m k -> H.insert k value m) H.empty xs++intmap :: G.Vector v Int => v Int -> I.IntMap Int+intmap xs = G.foldl' (\m k -> I.insert k value m) I.empty xs++mmap :: (G.Vector v k, Ord k) => v k -> M.Map k Int+mmap xs = G.foldl' (\m k -> M.insert k value m) M.empty xs++value :: Int+value = 31337
+ examples/Overhead.hs view
@@ -0,0 +1,35 @@+-- This benchmark measures the timing overhead added by the various+-- functions we use to measure performance.++{-# LANGUAGE CPP #-}++module Main (main) where++import Criterion.Main+import Criterion.Measurement as M+import GHC.Stats as GHC++main :: IO ()+main = do+ M.initializeTime -- Need to do this before calling M.getTime+ statsEnabled <- getRTSStatsEnabled+ defaultMain $ [+ bench "measure" $ whnfIO (M.measure (whnfIO $ return ()) 1)+ , bench "getTime" $ whnfIO M.getTime+ , bench "getCPUTime" $ whnfIO M.getCPUTime+ , bench "getCycles" $ whnfIO M.getCycles+ , bench "M.getGCStatistics" $ whnfIO M.getGCStatistics+ ] ++ if statsEnabled+ then [bench+#if MIN_VERSION_base(4,10,0)+ "GHC.getRTSStats" $ whnfIO GHC.getRTSStats+#else+ "GHC.getGCStats" $ whnfIO GHC.getGCStats+#endif+ ]+ else []++#if !MIN_VERSION_base(4,10,0)+getRTSStatsEnabled :: IO Bool+getRTSStatsEnabled = getGCStatsEnabled+#endif
+ examples/Quotes.hs view
@@ -0,0 +1,12 @@+module Main where++import Criterion+import Criterion.Main++main :: IO ()+main = defaultMain+ [ env (return ()) $+ \ ~() -> bgroup "\"oops\"" [bench "dummy" $ nf id ()]+ , env (return ()) $+ \ ~() -> bgroup "'oops'" [bench "dummy" $ nf id ()]+ ]
− examples/Tiny.hs
@@ -1,28 +0,0 @@-{-# LANGUAGE ScopedTypeVariables #-}--import Criterion.Main-import Control.Parallel-import qualified Data.IntMap as I-import Data.List (foldl')-import Criterion.Config--main = defaultMainWith defaultConfig (return ()) [- bgroup "fib" [- bench "fib 10" $ whnf fib 10- , bench "fib 20" $ whnf fib 20- , bench "fib 30" $ whnf fib 30- ],- bgroup "intmap" [- bench "intmap 25k" $ whnf intmap 25000- , bench "intmap 50k" $ whnf intmap 50000- , bench "intmap 75k" $ whnf intmap 75000- ]- ]- -fib :: Int -> Int-fib 0 = 0-fib 1 = 1-fib n = fib (n-1) + fib (n-2)--intmap :: Int -> I.IntMap Int-intmap n = foldl' (\m k -> I.insert k 33 m) I.empty [0..n]
+ examples/criterion-examples.cabal view
@@ -0,0 +1,135 @@+name: criterion-examples+version: 0+synopsis: Examples for the criterion benchmarking system+description: Examples for the criterion benchmarking system.+homepage: https://github.com/haskell/criterion+license: BSD3+license-file: LICENSE+author: Bryan O'Sullivan <bos@serpentine.com>+maintainer: Bryan O'Sullivan <bos@serpentine.com>+category: Benchmarks+build-type: Simple+cabal-version: >=1.10+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2++flag conduit-vs-pipes+ default: True++flag maps+ default: True++executable fibber+ main-is: Fibber.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable conduit-vs-pipes+ if !flag(conduit-vs-pipes)+ buildable: False++ main-is: ConduitVsPipes.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ conduit >= 1.2.13.1,+ criterion,+ pipes >= 4.3.5++executable maps+ if !flag(maps)+ buildable: False++ main-is: Maps.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ bytestring,+ containers,+ criterion,+ hashable,+ mwc-random >= 0.13.1,+ unordered-containers,+ vector,+ vector-algorithms++executable overhead+ main-is: Overhead.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion,+ criterion-measurement++executable bad-read-file+ main-is: BadReadFile.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable good-read-file+ main-is: GoodReadFile.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++executable extensible-cli+ main-is: ExtensibleCLI.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ base-compat-batteries,+ criterion,+ optparse-applicative++executable quotes+ main-is: Quotes.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion++-- Cannot uncomment due to https://github.com/haskell/cabal/issues/1725+--+-- executable judy+-- main-is: Judy.hs+--+-- buildable: False+-- default-language: Haskell2010+-- ghc-options: -Wall -rtsopts+-- build-depends:+-- base >= 4.9 && < 5,+-- criterion,+-- judy
− examples/tiny.html
@@ -1,668 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-<html>- <head>- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">- <title>criterion report</title>- <!--[if lte IE 8]>- <script language="javascript" type="text/javascript">- if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};- </script>- <![endif]-->- <script language="javascript" type="text/javascript">- /*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */-(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete -t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean-(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);- </script>- <script language="javascript" type="text/javascript">- /* Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */-(function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=1;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}H.stroke()}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);- </script>- <script language="javascript" type="text/javascript">- (function ($) {- $.zip = function(a,b) {- var x = Math.min(a.length,b.length);- var c = new Array(x);- for (var i = 0; i < x; i++)- c[i] = [a[i],b[i]];- return c;- };-- $.mean = function(ary) {- var m = 0, i = 0;-- while (i < ary.length) {- var j = i++;- m += (ary[j] - m) / i;- }-- return m;- };-- $.timeUnits = function(secs) {- if (secs < 0) return timeUnits(-secs);- else if (secs >= 1e9) return [1e-9, "Gs"];- else if (secs >= 1e6) return [1e-6, "Ms"];- else if (secs >= 1) return [1, "s"];- else if (secs >= 1e-3) return [1e3, "ms"];- else if (secs >= 1e-6) return [1e6, "\u03bcs"];- else if (secs >= 1e-9) return [1e9, "ns"];- else if (secs >= 1e-12) return [1e12, "ps"];- };-- $.scaleTimes = function(ary) {- var s = $.timeUnits($.mean(ary));- return [$.scaleBy(s[0], ary), s[1]];- };-- $.scaleBy = function(x, ary) {- var nary = new Array(ary.length);- for (var i = 0; i < ary.length; i++)- nary[i] = ary[i] * x;- return nary;- };-- $.renderTime = function(text) {- var x = parseFloat(text);- var t = $.timeUnits(x);- x *= t[0];- if (x >= 1000 || x <= -1000) return x.toFixed() + " " + t[1];- var prec = 5;- if (x < 0) prec++;-- return x.toString().substring(0,prec) + " " + t[1];- };-- $.unitFormatter = function(units) {- var ticked = 0;- return function(val,axis) {- var s = val.toFixed(axis.tickDecimals);- if (ticked > 1)- return s;- else {- ticked++;- return s + ' ' + units;- }- };- };-- $.addTooltip = function(name, renderText) {- function showTooltip(x, y, contents) {- $('<div id="tooltip">' + contents + '</div>').css( {- position: 'absolute',- display: 'none',- top: y + 5,- left: x + 5,- border: '1px solid #fdd',- padding: '2px',- 'background-color': '#fee',- opacity: 0.80- }).appendTo("body").fadeIn(200);- };- var pp = null;- $(name).bind("plothover", function (event, pos, item) {- $("#x").text(pos.x.toFixed(2));- $("#y").text(pos.y.toFixed(2));-- if (item) {- if (pp != item.dataIndex) {- pp = item.dataIndex;-- $("#tooltip").remove();- var x = item.datapoint[0].toFixed(2),- y = item.datapoint[1].toFixed(2);-- showTooltip(item.pageX, item.pageY, renderText(x,y));- }- }- else {- $("#tooltip").remove();- pp = null; - }- });- };-})(jQuery);-- </script>- <style type="text/css">-html, body {- height: 100%;- margin: 0;-}--#wrap {- min-height: 100%;-}--#main {- overflow: auto;- padding-bottom: 180px; /* must be same height as the footer */-}--#footer {- position: relative;- margin-top: -180px; /* negative value of footer height */- height: 180px;- clear: both;- background: #888;- margin: 40px 0 0;- color: white;- font-size: larger;- font-weight: 300;-} --body:before {- /* Opera fix */- content: "";- height: 100%;- float: left;- width: 0;- margin-top: -32767px;-}--body {- font: 14px Helvetica Neue;- text-rendering: optimizeLegibility;- margin-top: 1em;-}--a:link {- color: steelblue;- text-decoration: none;-}--a:visited {- color: #4a743b;- text-decoration: none;-}--#footer a {- color: white;- text-decoration: underline;-}--.hover {- color: steelblue;- text-decoration: none;-}--.body {- width: 960px;- margin: auto;-}--.footfirst {- position: relative;- top: 30px;-}--th {- font-weight: 500;- opacity: 0.8;-}--th.cibound {- opacity: 0.4;-}--.citime {- opacity: 0.5;-}--h1 {- font-size: 36px;- font-weight: 300;- margin-bottom: .3em;-}--h2 {- font-size: 30px;- font-weight: 300;- margin-bottom: .3em;-}--.meanlegend {- color: #404040;- background-color: #ffffff;- opacity: 0.6;- font-size: smaller;-}-- </style>- <!--[if !IE 7]>- <style type="text/css">- #wrap {display:table;height:100%}- </style>- <![endif]-->- </head>- <body>- <div id="wrap">- <div id="main" class="body">- <h1>criterion performance measurements</h1>--<h2>overview</h2>--<p><a href="#grokularation">want to understand this report?</a></p>--<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>--<h2><a name="b0">fib/fib 10</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde0" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time0" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">7.950250148027324e-7</span></td>- <td><span class="time">8.087233523139602e-7</span></td>- <td><span class="citime">8.263881789521396e-7</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">6.469576002518438e-8</span></td>- <td><span class="time">7.962093335887086e-8</span></td>- <td><span class="citime">9.595188287095253e-8</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have severe- (<span class="percent">0.789683189845111</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b1">fib/fib 20</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde1" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time1" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">9.397387721886237e-5</span></td>- <td><span class="time">9.511279240520537e-5</span></td>- <td><span class="citime">9.683396722581508e-5</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">5.084981483933464e-6</span></td>- <td><span class="time">7.060410460215048e-6</span></td>- <td><span class="citime">9.916444086871226e-6</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have severe- (<span class="percent">0.6764999252677036</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b2">fib/fib 30</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde2" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time2" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.1405421545418602e-2</span></td>- <td><span class="time">1.1464177420052388e-2</span></td>- <td><span class="citime">1.166933422318349e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">1.5835878091381052e-4</span></td>- <td><span class="time">5.030517750313856e-4</span></td>- <td><span class="citime">1.146763021342376e-3</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.414995643896579</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b3">intmap/intmap 25k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde3" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time3" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">5.030530741127831e-3</span></td>- <td><span class="time">5.067442705544335e-3</span></td>- <td><span class="citime">5.11489753952871e-3</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">1.7601420712288937e-4</span></td>- <td><span class="time">2.14104721044797e-4</span></td>- <td><span class="citime">2.796949297562274e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.39528660323872544</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b4">intmap/intmap 50k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde4" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time4" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.3004106333168846e-2</span></td>- <td><span class="time">1.3085197260292869e-2</span></td>- <td><span class="citime">1.317617540589223e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">3.817067615429757e-4</span></td>- <td><span class="time">4.4020726935288003e-4</span></td>- <td><span class="citime">5.281243811580562e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.2967324863902443</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b5">intmap/intmap 75k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde5" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time5" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.772755031815419e-2</span></td>- <td><span class="time">1.782442693940053e-2</span></td>- <td><span class="citime">1.794612770310293e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">4.572927417104507e-4</span></td>- <td><span class="time">5.554628346393567e-4</span></td>- <td><span class="citime">7.805157733235236e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.2673858721467461</span>%)- effect on estimated standard deviation.</p>- </span>-- <h2><a name="grokularation">understanding this report</a></h2>-- <p>In this report, each function benchmarked by criterion is assigned- a section of its own. In each section, we display two charts, each- with an <i>x</i> axis that represents measured execution time.- These charts are active; if you hover your mouse over data points- and annotations, you will see more details.</p>-- <ul>- <li>The chart on the left is a- <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel- density estimate</a> (also known as a KDE) of time- measurements. This graphs the probability of any given time- measurement occurring. A spike indicates that a measurement of a- particular time occurred; its height indicates how often that- measurement was repeated.</li>-- <li>The chart on the right is the raw data from which the kernel- density estimate is built. Measurements are displayed on- the <i>y</i> axis in the order in which they occurred.</li>- </ul>- - <p>Under the charts is a small table displaying the mean and standard- deviation of the measurements. We use a statistical technique- called- the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>- to provide confidence intervals on our estimates of these values.- The bootstrap-derived upper and lower bounds on the mean and- standard deviation let you see how accurate we believe those- estimates to be. (Hover the mouse over the table headers to see- the confidence levels.)</p>- - <p>A noisy benchmarking environment can cause some or many- measurements to fall far from the mean. These outlying- measurements can have a significant inflationary effect on the- estimate of the standard deviation. We calculate and display an- estimate of the extent to which the standard deviation has been- inflated by outliers.</p>--<script type="text/javascript">-$(function () {- function mangulate(number, name, mean, times, kdetimes, kdepdf) {- var meanSecs = mean;- var units = $.timeUnits(mean);- var scale = units[0];- units = units[1];- mean *= scale;- kdetimes = $.scaleBy(scale, kdetimes);- var ts = $.scaleBy(scale, times);- var kq = $("#kde" + number);- var k = $.plot(kq,- [{ label: name + " time densities",- data: $.zip(kdetimes, kdepdf),- }],- { xaxis: { tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- grid: { borderColor: "#777",- hoverable: true, markings: [ { color: '#6fd3fb',- lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },- });- var o = k.pointOffset({ x: mean, y: 0});- kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +- '" style="position:absolute;left:' + (o.left + 4) +- 'px;bottom:139px;">mean</div>');- var timepairs = new Array(ts.length);- for (var i = 0; i < ts.length; i++)- timepairs[i] = [ts[i],i];- $.plot($("#time" + number),- [{ label: name + " times",- data: timepairs }],- { points: { show: true },- grid: { borderColor: "#777", hoverable: true },- xaxis: { min: kdetimes[0], max: kdetimes[kdetimes.length-1],- tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- });- $.addTooltip("#kde" + number, function(x,y) { return x + ' ' + units; });- $.addTooltip("#time" + number, function(x,y) { return x + ' ' + units; });- };- mangulate(0, "fib/fib 10",- 8.087233523139602e-7,- [7.377674858265166e-7,7.368895123355534e-7,7.799102133927503e-7,8.043959185296127e-7,7.92104289656128e-7,7.667406110283022e-7,7.368895123355534e-7,7.671308214687303e-7,7.823490286454257e-7,8.641956685252174e-7,7.561073765266367e-7,7.368895123355534e-7,7.385479067073727e-7,7.581559813388842e-7,7.9629905189073e-7,7.667406110283022e-7,7.946406575189106e-7,7.720084519740814e-7,7.700573997719409e-7,7.409867219600483e-7,7.753252407177201e-7,7.463521155159345e-7,7.385479067073727e-7,7.683990054001215e-7,7.398160906387641e-7,7.380601436568377e-7,7.786420294613589e-7,7.368895123355534e-7,7.741546093964359e-7,7.659601901474461e-7,7.872266591507768e-7,7.508395355808575e-7,7.806906342736064e-7,7.364993018951253e-7,7.380601436568377e-7,7.626434014038073e-7,7.466447733462556e-7,7.847878438981013e-7,8.031277345982215e-7,8.129805482190307e-7,7.83617212576817e-7,7.384503540972658e-7,7.384503540972658e-7,7.884948430821682e-7,8.027375241577934e-7,7.545465347649244e-7,7.385479067073727e-7,7.740570567863288e-7,7.840074230172451e-7,7.958112888401949e-7,7.463521155159345e-7,7.691794262809778e-7,7.385479067073727e-7,7.475227468372188e-7,8.355152011537529e-7,1.0494480751184528e-6,9.962819026101256e-7,9.930626664765938e-7,8.178581787243818e-7,8.01079129785974e-7,8.039081554790776e-7,8.032252872083284e-7,8.052738920205759e-7,8.027375241577934e-7,8.027375241577934e-7,8.047861289700409e-7,8.032252872083284e-7,8.043959185296127e-7,8.039081554790776e-7,8.031277345982215e-7,8.043959185296127e-7,8.068347337822882e-7,8.028350767679004e-7,8.027375241577934e-7,8.027375241577934e-7,8.542453022943011e-7,9.783322223504334e-7,9.76283617538186e-7,1.028669369165657e-6,1.011012346736286e-6,1.0298400004869412e-6,9.770640384190422e-7,1.050716259049844e-6,9.76283617538186e-7,8.797065335322339e-7,8.771701656694514e-7,8.064445233418602e-7,8.032252872083284e-7,8.110294960168903e-7,9.218492610984676e-7,9.087772113441266e-7,7.970794727715862e-7,7.736668463459007e-7,7.900556848438805e-7,8.227358092297329e-7,8.612690902220067e-7,7.384503540972658e-7,7.385479067073727e-7,7.405965115196202e-7,8.043959185296127e-7,],- [7.050776061796535e-7,7.080465853023752e-7,7.11015564425097e-7,7.139845435478188e-7,7.169535226705404e-7,7.199225017932622e-7,7.22891480915984e-7,7.258604600387057e-7,7.288294391614275e-7,7.317984182841493e-7,7.347673974068709e-7,7.377363765295927e-7,7.407053556523145e-7,7.436743347750362e-7,7.46643313897758e-7,7.496122930204798e-7,7.525812721432015e-7,7.555502512659232e-7,7.58519230388645e-7,7.614882095113667e-7,7.644571886340885e-7,7.674261677568103e-7,7.703951468795319e-7,7.733641260022537e-7,7.763331051249755e-7,7.793020842476972e-7,7.82271063370419e-7,7.852400424931408e-7,7.882090216158626e-7,7.911780007385843e-7,7.94146979861306e-7,7.971159589840278e-7,8.000849381067495e-7,8.030539172294713e-7,8.060228963521931e-7,8.089918754749147e-7,8.119608545976365e-7,8.149298337203583e-7,8.1789881284308e-7,8.208677919658018e-7,8.238367710885236e-7,8.268057502112453e-7,8.297747293339671e-7,8.327437084566888e-7,8.357126875794105e-7,8.386816667021323e-7,8.416506458248541e-7,8.446196249475758e-7,8.475886040702975e-7,8.505575831930193e-7,8.53526562315741e-7,8.564955414384628e-7,8.594645205611846e-7,8.624334996839063e-7,8.654024788066281e-7,8.683714579293499e-7,8.713404370520715e-7,8.743094161747933e-7,8.772783952975151e-7,8.802473744202368e-7,8.832163535429585e-7,8.861853326656803e-7,8.89154311788402e-7,8.921232909111238e-7,8.950922700338456e-7,8.980612491565673e-7,9.010302282792891e-7,9.039992074020109e-7,9.069681865247326e-7,9.099371656474543e-7,9.129061447701761e-7,9.158751238928978e-7,9.188441030156196e-7,9.218130821383413e-7,9.24782061261063e-7,9.277510403837848e-7,9.307200195065066e-7,9.336889986292283e-7,9.366579777519501e-7,9.396269568746719e-7,9.425959359973936e-7,9.455649151201154e-7,9.485338942428371e-7,9.515028733655588e-7,9.544718524882805e-7,9.574408316110023e-7,9.60409810733724e-7,9.633787898564458e-7,9.663477689791676e-7,9.693167481018893e-7,9.72285727224611e-7,9.752547063473329e-7,9.782236854700546e-7,9.811926645927764e-7,9.841616437154982e-7,9.871306228382197e-7,9.900996019609417e-7,9.930685810836633e-7,9.96037560206385e-7,9.990065393291068e-7,1.0019755184518286e-6,1.0049444975745503e-6,1.0079134766972721e-6,1.0108824558199939e-6,1.0138514349427156e-6,1.0168204140654374e-6,1.0197893931881592e-6,1.022758372310881e-6,1.0257273514336025e-6,1.0286963305563245e-6,1.031665309679046e-6,1.0346342888017678e-6,1.0376032679244896e-6,1.0405722470472113e-6,1.0435412261699331e-6,1.0465102052926549e-6,1.0494791844153766e-6,1.0524481635380984e-6,1.0554171426608202e-6,1.058386121783542e-6,1.0613551009062637e-6,1.0643240800289853e-6,1.0672930591517073e-6,1.0702620382744288e-6,1.0732310173971506e-6,1.0761999965198723e-6,1.0791689756425941e-6,1.0821379547653159e-6,],- [758.5777655574481,-2321.1543988419735,4023.8526593647907,-5969.678542596276,8255.893134287526,-10877.816387636318,13258.80288387981,-11970.022679779135,24826.628201773277,2774079.488057585,1.8392530774752047e7,3.0574590555598773e7,1.166133699927089e7,3424377.4396439414,9419088.099925276,5266617.565528951,3303589.194399796,3444690.118635301,3356348.4342334606,4576983.544176456,9043075.693981845,9515712.770944044,8695237.7182705,1.0480362363947053e7,5885761.981161242,6681154.940234727,9068443.372149916,7364147.085546517,6210306.4263969585,5087047.293373542,8068714.210483239,4030545.48537255,1.4096350241745548e7,4.158830423471533e7,1.856283193052455e7,4022524.145650863,3058627.2059520385,1046745.9854679189,2885952.338313088,2754349.838309664,633203.5471903565,-32443.074595815022,-2892.8348111516193,613232.1023437271,2186689.9788602497,628013.1101309155,-37259.02799370251,30683.043841366227,-40132.36536944665,633274.7690757504,2181052.447994885,618052.036967569,559953.6610857417,2828804.3071846734,2794814.1208680714,611984.9976885823,-37952.53555504595,607708.5440600157,2805021.8220361387,2807611.00441047,600673.0092721324,-22393.516850557255,15594.775105656468,-12514.358399110733,13580.063055919636,-18041.720945391364,28496.47661754441,-48196.121006611495,648924.9514914048,2154454.239780577,663194.9459344556,-83047.98257751309,662710.8157463135,2155443.4580729404,647384.1690745661,-46020.353198678305,25540.42564572161,-14041.97425042219,8015.587893601925,-4209.983934851987,1389.5930476172514,1032.012867786423,-3414.4471353313584,6060.772277407805,-9324.918609720504,13737.770503412698,-20242.656341206915,30756.29517690236,-49755.20455689963,89606.38432658189,-163282.43154387147,2556302.0968688834,8676430.99336962,2552676.1540422146,-153346.24003292026,70187.68487903339,550706.6880764095,2835023.043062306,2793767.894278938,601441.349991305,-7358.0746787718135,-22601.713682561975,628534.8753184661,2175226.4818469835,635769.7545593386,-40844.985396975695,28492.276904797232,-27601.819376742715,603126.5719205893,2805649.895153476,2808350.2124900045,599705.4735676054,-22401.159074643827,19442.064228567484,-22896.497319230042,600793.1421781109,2806440.6076827333,2808839.606545121,597734.2727886875,-17990.256325380145,9593.667662473541,-4416.832169552694,2313.513256760389,-1313.237756383254,775.6472484615549,-454.3276910014735,239.5804212662041,-74.92986615808515,]);- mangulate(1, "fib/fib 20",- 9.511279240520537e-5,- [8.981917432738818e-5,9.972909439787052e-5,9.512657921869252e-5,8.92490429425801e-5,8.938380126989837e-5,8.920757884186679e-5,9.50436510172659e-5,8.947709549650333e-5,9.104236529843098e-5,1.0239316286870102e-4,1.0374074614188377e-4,9.282532162910354e-5,9.074175056825944e-5,8.951855959721665e-5,9.365460364336984e-5,9.06899204423678e-5,9.595586123295884e-5,9.090760697111271e-5,9.23070203701871e-5,8.93941672950767e-5,9.560341637689565e-5,9.365460364336984e-5,9.008869098202473e-5,9.38204600462231e-5,9.160213065806074e-5,9.304300815784844e-5,9.27423934276769e-5,9.31363023844534e-5,9.704429387668335e-5,9.44320555317445e-5,9.056552814022785e-5,1.0169863918175299e-4,9.117712362574926e-5,9.052406403951454e-5,8.969478202524824e-5,9.255580497446699e-5,9.978092452376216e-5,9.165396078395238e-5,8.999539675541977e-5,8.921794486704512e-5,9.330215878730666e-5,9.617354776170374e-5,9.104236529843098e-5,8.921794486704512e-5,9.264909920107194e-5,9.27734915032119e-5,1.186885544490339e-4,9.838151112468777e-5,9.730344450614158e-5,9.782174576505802e-5,1.0255901927155429e-4,9.377899594550979e-5,9.416253887710795e-5,9.326069468659335e-5,1.004754482107102e-4,9.643269839116196e-5,9.264909920107194e-5,8.951855959721665e-5,9.647416249187527e-5,1.0574138900130123e-4,1.249910977574578e-4,1.295210507603875e-4,1.2008796784810829e-4,9.786320986577134e-5,1.0939022986407296e-4,9.213079794215551e-5,8.947709549650333e-5,9.686807144865177e-5,9.673331312133349e-5,9.290824983053016e-5,9.417290490228627e-5,9.238994857161373e-5,1.0104557959551827e-4,9.595586123295884e-5,9.42143690029996e-5,8.92490429425801e-5,9.403814657496801e-5,9.19131114134106e-5,9.334362288801998e-5,9.751076500970815e-5,9.48674285892343e-5,9.577963880492724e-5,8.951855959721665e-5,8.969478202524824e-5,9.629794006384368e-5,8.94252653706117e-5,9.391375427282805e-5,9.27734915032119e-5,9.055516211504952e-5,9.825711882254783e-5,8.973624612596155e-5,9.364423761819151e-5,9.391375427282805e-5,9.156066655734741e-5,9.721015027953662e-5,9.38204600462231e-5,9.264909920107194e-5,8.947709549650333e-5,9.308447225856176e-5,9.665038491990687e-5,],- [8.517623165001472e-5,8.555714634530783e-5,8.593806104060093e-5,8.631897573589404e-5,8.669989043118716e-5,8.708080512648027e-5,8.746171982177338e-5,8.784263451706648e-5,8.822354921235959e-5,8.86044639076527e-5,8.898537860294582e-5,8.936629329823892e-5,8.974720799353203e-5,9.012812268882514e-5,9.050903738411825e-5,9.088995207941135e-5,9.127086677470446e-5,9.165178146999758e-5,9.203269616529069e-5,9.24136108605838e-5,9.27945255558769e-5,9.317544025117001e-5,9.355635494646313e-5,9.393726964175623e-5,9.431818433704934e-5,9.469909903234245e-5,9.508001372763556e-5,9.546092842292866e-5,9.584184311822177e-5,9.622275781351488e-5,9.6603672508808e-5,9.69845872041011e-5,9.736550189939421e-5,9.774641659468732e-5,9.812733128998042e-5,9.850824598527355e-5,9.888916068056665e-5,9.927007537585976e-5,9.965099007115287e-5,1.0003190476644597e-4,1.0041281946173908e-4,1.0079373415703219e-4,1.011746488523253e-4,1.0155556354761841e-4,1.0193647824291152e-4,1.0231739293820463e-4,1.0269830763349774e-4,1.0307922232879084e-4,1.0346013702408396e-4,1.0384105171937707e-4,1.0422196641467018e-4,1.0460288110996328e-4,1.0498379580525639e-4,1.053647105005495e-4,1.057456251958426e-4,1.0612653989113571e-4,1.0650745458642883e-4,1.0688836928172194e-4,1.0726928397701505e-4,1.0765019867230815e-4,1.0803111336760127e-4,1.0841202806289438e-4,1.0879294275818749e-4,1.091738574534806e-4,1.095547721487737e-4,1.0993568684406681e-4,1.1031660153935991e-4,1.1069751623465302e-4,1.1107843092994613e-4,1.1145934562523925e-4,1.1184026032053236e-4,1.1222117501582546e-4,1.1260208971111857e-4,1.1298300440641169e-4,1.133639191017048e-4,1.137448337969979e-4,1.1412574849229101e-4,1.1450666318758412e-4,1.1488757788287722e-4,1.1526849257817033e-4,1.1564940727346344e-4,1.1603032196875655e-4,1.1641123666404967e-4,1.1679215135934277e-4,1.1717306605463588e-4,1.17553980749929e-4,1.1793489544522211e-4,1.1831581014051521e-4,1.1869672483580832e-4,1.1907763953110143e-4,1.1945855422639454e-4,1.1983946892168764e-4,1.2022038361698075e-4,1.2060129831227386e-4,1.2098221300756696e-4,1.2136312770286008e-4,1.2174404239815319e-4,1.221249570934463e-4,1.2250587178873942e-4,1.2288678648403252e-4,1.2326770117932563e-4,1.2364861587461874e-4,1.2402953056991185e-4,1.2441044526520495e-4,1.2479135996049806e-4,1.2517227465579117e-4,1.2555318935108427e-4,1.2593410404637738e-4,1.263150187416705e-4,1.266959334369636e-4,1.270768481322567e-4,1.2745776282754983e-4,1.2783867752284294e-4,1.2821959221813605e-4,1.2860050691342916e-4,1.2898142160872226e-4,1.2936233630401537e-4,1.2974325099930848e-4,1.3012416569460158e-4,1.305050803898947e-4,1.3088599508518782e-4,1.3126690978048093e-4,1.3164782447577404e-4,1.3202873917106715e-4,1.3240965386636025e-4,1.3279056856165336e-4,1.3317148325694647e-4,1.3355239795223957e-4,],- [4.300931240704569e-4,-3.549578682618365e-4,3.8520369098528795e-2,0.9520446036583423,16.529845295457218,189.4624968597879,1451.3210278942822,7500.4679916295745,26436.418129206275,64257.59492108207,109099.846066102,132507.55103589315,122775.89368333074,100867.71897254158,87284.17420647093,79914.94543494808,74415.07728246463,77058.50020983275,92547.93132884815,114802.2447981375,131821.6543787473,136553.23736239152,127893.71833138197,105807.55476892975,76914.60048381802,55201.69368014875,48869.7804489285,55503.112038008185,67295.59137533768,74805.88674794715,72865.16604932163,64621.733373578136,55529.27138350215,46099.52421352893,34122.45187277227,21579.408593770975,14443.621625478869,14888.352602351608,18331.31637026973,19988.055598288185,19438.209054332106,17876.53398426213,16528.67237038494,16769.077529376736,18019.426662606194,17269.312323300233,13200.6259294074,8994.846519843559,7610.732311618474,7409.927362211231,5871.9003496641635,3923.1434054001206,3917.679639793975,5809.032017967959,6969.089635398829,5592.969407914455,2924.3896552781516,993.2986148034079,221.87274392728014,62.698229648134934,221.87013326255817,993.2966600315895,2924.2063675896325,5590.066743432221,6937.731731488198,5590.066658290188,2924.199292604475,993.121226732226,218.9566750251127,31.354700306826683,2.9033766093324442,0.18464610593290295,-1.4697545828838794e-3,8.145081382190547e-3,-7.7425519715678265e-3,7.681428107316558e-3,-7.778976363884425e-3,8.041643250469075e-3,-8.472926130846721e-3,9.265759606300312e-3,-3.011524722577509e-3,0.18665087368621527,2.9008587490301427,31.357975447153052,218.95980950815522,993.3014504412324,2927.1069911239524,5621.417056095799,7156.692768772124,6583.1832841619935,5848.403513853245,6583.182527729184,7156.6942994817755,5621.414715034091,2927.110197510748,993.2973073264817,218.96516383852077,31.358536461862847,3.084201931837604,3.0906192265999604,31.351806483251607,218.9651004006971,993.1143457379385,2924.2049449477495,5590.062130831868,6937.735209224498,5590.064086122645,2924.2009857445883,993.1205884020951,218.9634833356266,31.531441154321573,5.814408043697522,31.531825748502463,218.96270583767705,993.1217757465075,2924.199362328002,5590.066182097465,6937.73259265773,5590.065329106023,2924.2010891158143,993.118948056959,218.95946232583887,31.35136609776941,2.907308767600331,0.18005063205360966,3.8708427773068536e-3,1.958526060830285e-3,-5.872457912759309e-4,]);- mangulate(2, "fib/fib 30",- 1.1464177420052388e-2,- [1.1321011831673482e-2,1.1604968359383443e-2,1.1342946340950826e-2,1.1461917211922506e-2,1.1230889608773092e-2,1.1280003836068014e-2,1.1742774298104146e-2,1.1267844488533834e-2,1.1331979086312154e-2,1.164096956482778e-2,1.1098805715950826e-2,1.1681977560433248e-2,1.1676017095955709e-2,1.1440936376961568e-2,1.146406297913442e-2,1.135582094422231e-2,1.113289957276235e-2,1.1607829382332662e-2,1.159686212769399e-2,1.1468831350716451e-2,1.15219986938561e-2,1.1300030996712545e-2,1.131004457703481e-2,1.1358920385750631e-2,1.1293832113655904e-2,1.1419955542000631e-2,1.1439982702645162e-2,1.140302782288442e-2,1.1270943930062154e-2,1.1200848867806295e-2,1.1300984671028951e-2,1.15677750610436e-2,1.1369887640389303e-2,1.1671963980110982e-2,1.1352006246956686e-2,1.1527005484017232e-2,1.1497918417366842e-2,1.1558953573616842e-2,1.1691991140755514e-2,1.1405888845833639e-2,1.1461917211922506e-2,1.1469785025032857e-2,1.1672917654427389e-2,1.1408034613045553e-2,1.1404935171517232e-2,1.1380854895027975e-2,1.1122885992440084e-2,1.1273089697274068e-2,1.1266890814217428e-2,1.1796895315560201e-2,1.1602107336434225e-2,1.135105257264028e-2,1.1493865301522115e-2,1.1412802984627584e-2,1.1310998251351217e-2,1.1311951925667623e-2,1.1326018621834615e-2,1.1464778234871725e-2,1.1487904837044576e-2,1.1543933203133443e-2,1.1300030996712545e-2,1.1239949514778951e-2,1.1408988287361959e-2,1.1796895315560201e-2,1.182884340515981e-2,1.1199895193489889e-2,1.1467877676400045e-2,1.128095751038442e-2,1.1643830587776998e-2,1.1377755453499654e-2,1.1514130880745748e-2,1.1376801779183248e-2,1.1263076116951803e-2,1.1276904394539693e-2,1.1238042166146139e-2,1.1408988287361959e-2,1.1411849310311178e-2,1.1334840109261373e-2,1.1578980734261373e-2,1.1583987524422506e-2,1.1411849310311178e-2,1.1327925970467428e-2,1.1363927175911764e-2,1.1098805715950826e-2,1.1388007452401021e-2,1.6171876242073873e-2,1.1288825323494771e-2,1.1370126058968404e-2,1.1286917974861959e-2,1.1690799047860006e-2,1.1645976354988912e-2,1.1208001425179342e-2,1.1666003515633443e-2,1.1192027380379537e-2,1.1501971533211568e-2,1.13541520141686e-2,1.145786409607778e-2,1.1279050161751607e-2,1.1248055746468404e-2,1.1156026174935201e-2,],- [1.059149866333852e-2,1.0639433187994802e-2,1.0687367712651082e-2,1.0735302237307363e-2,1.0783236761963643e-2,1.0831171286619925e-2,1.0879105811276206e-2,1.0927040335932486e-2,1.0974974860588767e-2,1.1022909385245049e-2,1.1070843909901328e-2,1.111877843455761e-2,1.116671295921389e-2,1.121464748387017e-2,1.1262582008526452e-2,1.1310516533182732e-2,1.1358451057839013e-2,1.1406385582495293e-2,1.1454320107151575e-2,1.1502254631807856e-2,1.1550189156464136e-2,1.1598123681120417e-2,1.1646058205776699e-2,1.1693992730432978e-2,1.174192725508926e-2,1.178986177974554e-2,1.183779630440182e-2,1.18857308290581e-2,1.1933665353714382e-2,1.1981599878370663e-2,1.2029534403026943e-2,1.2077468927683225e-2,1.2125403452339506e-2,1.2173337976995786e-2,1.2221272501652067e-2,1.2269207026308349e-2,1.2317141550964628e-2,1.236507607562091e-2,1.241301060027719e-2,1.2460945124933471e-2,1.250887964958975e-2,1.2556814174246032e-2,1.2604748698902313e-2,1.2652683223558593e-2,1.2700617748214875e-2,1.2748552272871156e-2,1.2796486797527436e-2,1.2844421322183717e-2,1.2892355846839999e-2,1.2940290371496278e-2,1.298822489615256e-2,1.303615942080884e-2,1.3084093945465121e-2,1.31320284701214e-2,1.3179962994777682e-2,1.3227897519433963e-2,1.3275832044090243e-2,1.3323766568746525e-2,1.3371701093402806e-2,1.3419635618059086e-2,1.3467570142715367e-2,1.3515504667371649e-2,1.3563439192027928e-2,1.361137371668421e-2,1.365930824134049e-2,1.3707242765996771e-2,1.375517729065305e-2,1.3803111815309332e-2,1.3851046339965613e-2,1.3898980864621893e-2,1.3946915389278175e-2,1.3994849913934456e-2,1.4042784438590736e-2,1.4090718963247017e-2,1.4138653487903299e-2,1.4186588012559578e-2,1.4234522537215858e-2,1.428245706187214e-2,1.4330391586528421e-2,1.43783261111847e-2,1.4426260635840982e-2,1.4474195160497264e-2,1.4522129685153543e-2,1.4570064209809825e-2,1.4617998734466106e-2,1.4665933259122386e-2,1.4713867783778665e-2,1.4761802308434949e-2,1.4809736833091228e-2,1.4857671357747508e-2,1.490560588240379e-2,1.4953540407060071e-2,1.500147493171635e-2,1.5049409456372632e-2,1.5097343981028914e-2,1.5145278505685193e-2,1.5193213030341475e-2,1.5241147554997756e-2,1.5289082079654036e-2,1.5337016604310316e-2,1.5384951128966599e-2,1.5432885653622878e-2,1.5480820178279158e-2,1.552875470293544e-2,1.5576689227591721e-2,1.5624623752248e-2,1.567255827690428e-2,1.5720492801560564e-2,1.5768427326216843e-2,1.5816361850873123e-2,1.5864296375529406e-2,1.5912230900185686e-2,1.5960165424841966e-2,1.600809994949825e-2,1.605603447415453e-2,1.6103968998810808e-2,1.615190352346709e-2,1.619983804812337e-2,1.624777257277965e-2,1.6295707097435934e-2,1.6343641622092214e-2,1.6391576146748493e-2,1.6439510671404776e-2,1.6487445196061056e-2,1.6535379720717336e-2,1.6583314245373616e-2,1.66312487700299e-2,1.667918329468618e-2,],- [1.5067393424728645e-6,8.62607601344067e-5,1.5910388716289035e-3,2.2359461225032688e-2,0.22389127382472598,1.6180275348192565,8.511768163087446,33.056836908354605,96.8628371994017,221.70142102555153,417.94088105965636,693.2159892859798,1061.5905949112644,1500.8915224853342,1906.2539720837385,2151.984505925835,2193.374133918425,2059.089385023018,1801.350084880522,1502.6766857697958,1254.1618628330045,1075.918331100701,907.9521102123229,706.1247039871992,498.87613231450484,330.3040614955097,205.62828913677973,113.00960289955205,50.57119596368357,17.424731765605493,4.482849750722098,0.8467586406709887,0.11619141498507161,1.1519756454105766e-2,8.039279295825564e-4,5.3542086439195716e-5,-9.395795766975361e-6,9.916163538161706e-6,-8.976167115681441e-6,8.179240316401413e-6,-7.471281602496892e-6,6.841369628685418e-6,-6.279409450018718e-6,5.7767031090578865e-6,-5.325764163582279e-6,4.920152530535622e-6,-4.554325615788818e-6,4.223506623342113e-6,-3.923571320570379e-6,3.650955083231211e-6,-3.402560724672476e-6,3.175704449899703e-6,-2.968037791255329e-6,2.777516513998219e-6,-2.6023425946621576e-6,2.4409408227324004e-6,-2.2919204159057845e-6,2.154053833027385e-6,-2.0262523727212477e-6,1.907550678612085e-6,-1.7970869314499403e-6,1.69409205382953e-6,-1.5978777874803784e-6,1.507824005442586e-6,-1.4233749150533707e-6,1.3440256175256121e-6,-1.2693193481470597e-6,1.1988418026947988e-6,-1.1322128266597943e-6,1.0690858848078989e-6,-1.0091408664632536e-6,9.520826641467624e-7,-8.97636356676499e-7,8.455460077923685e-7,-7.955698606547608e-7,7.474803606410459e-7,-7.010582966461137e-7,6.560946248020503e-7,-6.123859912463326e-7,5.697301181110461e-7,-5.279312838005137e-7,4.867864536031556e-7,-4.4609603963758e-7,4.0564787035662817e-7,-3.65226765075675e-7,3.2460018129877547e-7,-2.8352490776987724e-7,2.417324017666222e-7,-1.9893477090088483e-7,1.5480866967402934e-7,-1.089980168192276e-7,6.109922317207973e-8,-1.0656858056733018e-8,-4.285020528453524e-8,1.0001854758893345e-7,-1.6153799944400636e-7,2.282046193327827e-7,-3.0094514422922963e-7,3.808339699956995e-7,-4.691189047981285e-7,5.672446708685856e-7,-6.768710229465412e-7,7.99886039775834e-7,-9.383964184965184e-7,1.0946964166987734e-6,-1.2704324520321107e-6,1.507136384483626e-6,-2.672633465308161e-7,4.054216072922732e-5,7.363660043939374e-4,9.98850979902326e-3,9.540577334715034e-2,0.6441483196222084,3.0731255080436286,10.360449489507818,24.681793273046946,41.55045836140686,49.42826996112889,41.55045825160409,24.681793494680175,10.360449151940749,3.0731259678112877,0.644147729092882,9.540650564790562e-2,9.98762210492744e-3,7.374254667425369e-4,3.9292479660887163e-5,1.2330192623251278e-6,]);- mangulate(3, "intmap/intmap 25k",- 5.067442705544335e-3,- [5.340758612068991e-3,4.925910284432272e-3,5.171958258065085e-3,4.924956610115866e-3,4.933062841805319e-3,4.967871954354147e-3,5.077067663582663e-3,4.929009725960593e-3,4.899922659310202e-3,5.186024954232077e-3,5.714837362679343e-3,5.070868780526022e-3,4.852000524910788e-3,5.018893530281882e-3,4.88585596314321e-3,4.958812048348288e-3,5.096856405648093e-3,4.989806463631491e-3,5.088988592537741e-3,5.142871191414694e-3,4.957858374031882e-3,4.939023306282858e-3,5.051795294197897e-3,4.797879507454733e-3,4.98503809204946e-3,4.828873922737936e-3,5.634967138680319e-3,5.024138739022116e-3,4.796925833138327e-3,5.340043356331686e-3,5.188885977181296e-3,5.277816107186179e-3,4.908982565316061e-3,4.970971395882468e-3,4.90874414673696e-3,5.086842825325827e-3,4.9590504669273896e-3,5.004111578377585e-3,5.230132391365866e-3,4.930917074593405e-3,5.999985983284811e-3,5.257788946541647e-3,5.5939591430748505e-3,5.002919485482077e-3,5.155030538948874e-3,4.954997351082663e-3,4.979077627571921e-3,4.813853552254538e-3,5.193892767342429e-3,4.932824423226218e-3,4.970017721566061e-3,5.044881155403952e-3,4.874888708504538e-3,4.990760137947897e-3,5.087081243904929e-3,5.3710377716148896e-3,4.852954199227194e-3,5.110923101815085e-3,5.335036566170554e-3,4.994097998055319e-3,5.1438248657311005e-3,4.871789266976218e-3,5.083028128060202e-3,4.844847967537741e-3,5.076113989266257e-3,4.909936239632468e-3,5.2048600219811005e-3,5.096141149910788e-3,4.986945440682272e-3,4.9437916778648896e-3,4.876080801400046e-3,4.903737356575827e-3,4.865828802498679e-3,5.092803289803366e-3,5.294982244881491e-3,5.0599015258873505e-3,4.8369801544273896e-3,5.153838446053366e-3,5.067054083260397e-3,5.158845236214499e-3,4.848901083382468e-3,4.8729813598717255e-3,5.102816870125632e-3,4.915896704110007e-3,5.27495508423696e-3,4.808846762093405e-3,4.930917074593405e-3,4.932824423226218e-3,5.0408280395592255e-3,4.846993734749655e-3,5.286876013192038e-3,5.021039297493796e-3,4.965964605721335e-3,5.518857290657858e-3,5.275908758553366e-3,5.303088476570944e-3,5.109969427498679e-3,5.583945562752585e-3,4.867020895394186e-3,5.2489674591148896e-3,],- [4.676619818123679e-3,4.687987315605378e-3,4.699354813087077e-3,4.710722310568776e-3,4.722089808050475e-3,4.733457305532174e-3,4.744824803013873e-3,4.756192300495572e-3,4.767559797977271e-3,4.77892729545897e-3,4.790294792940669e-3,4.801662290422368e-3,4.813029787904067e-3,4.8243972853857665e-3,4.8357647828674655e-3,4.8471322803491645e-3,4.858499777830864e-3,4.869867275312563e-3,4.881234772794262e-3,4.892602270275961e-3,4.90396976775766e-3,4.915337265239359e-3,4.926704762721059e-3,4.938072260202758e-3,4.949439757684457e-3,4.960807255166156e-3,4.972174752647855e-3,4.983542250129554e-3,4.994909747611253e-3,5.006277245092952e-3,5.017644742574651e-3,5.02901224005635e-3,5.040379737538049e-3,5.051747235019748e-3,5.063114732501447e-3,5.074482229983146e-3,5.085849727464845e-3,5.097217224946544e-3,5.108584722428243e-3,5.119952219909942e-3,5.131319717391641e-3,5.14268721487334e-3,5.1540547123550395e-3,5.1654222098367385e-3,5.1767897073184375e-3,5.188157204800137e-3,5.199524702281836e-3,5.210892199763535e-3,5.222259697245234e-3,5.233627194726933e-3,5.244994692208632e-3,5.256362189690331e-3,5.26772968717203e-3,5.279097184653729e-3,5.290464682135428e-3,5.301832179617127e-3,5.313199677098826e-3,5.324567174580525e-3,5.335934672062224e-3,5.347302169543923e-3,5.358669667025622e-3,5.370037164507321e-3,5.38140466198902e-3,5.39277215947072e-3,5.404139656952418e-3,5.415507154434118e-3,5.426874651915816e-3,5.438242149397516e-3,5.449609646879215e-3,5.460977144360914e-3,5.472344641842613e-3,5.4837121393243125e-3,5.4950796368060115e-3,5.5064471342877105e-3,5.51781463176941e-3,5.529182129251109e-3,5.540549626732808e-3,5.551917124214507e-3,5.563284621696206e-3,5.574652119177905e-3,5.586019616659604e-3,5.597387114141303e-3,5.608754611623002e-3,5.620122109104701e-3,5.6314896065864e-3,5.642857104068099e-3,5.654224601549798e-3,5.665592099031497e-3,5.676959596513196e-3,5.688327093994895e-3,5.699694591476594e-3,5.711062088958293e-3,5.722429586439992e-3,5.733797083921691e-3,5.74516458140339e-3,5.756532078885089e-3,5.7678995763667884e-3,5.7792670738484875e-3,5.7906345713301865e-3,5.8020020688118856e-3,5.813369566293585e-3,5.824737063775284e-3,5.8361045612569835e-3,5.847472058738682e-3,5.858839556220382e-3,5.87020705370208e-3,5.88157455118378e-3,5.892942048665478e-3,5.904309546147178e-3,5.915677043628876e-3,5.927044541110576e-3,5.938412038592274e-3,5.949779536073974e-3,5.961147033555673e-3,5.972514531037372e-3,5.983882028519071e-3,5.99524952600077e-3,6.006617023482469e-3,6.017984520964168e-3,6.029352018445867e-3,6.040719515927566e-3,6.052087013409265e-3,6.063454510890964e-3,6.074822008372663e-3,6.086189505854362e-3,6.0975570033360614e-3,6.1089245008177605e-3,6.1202919982994595e-3,],- [120.40626011580319,134.79094214130544,163.81785360780302,207.92946872195603,267.619412470169,343.2588336345364,434.91093596055737,542.1640232842949,664.0106985820831,798.7931587056509,944.2229178989038,1097.4698646033914,1255.3031557089914,1414.258100301859,1570.8012462824427,1721.4712194215529,1862.984271311001,1992.3077197231087,2106.7169584169806,2203.857967315519,2281.8343784085214,2339.326107175012,2375.7285376967457,2391.2829651721786,2387.1570066640484,2365.433249971276,2328.9775992688997,2281.1835031865016,2225.618550771366,2165.627507617751,2103.9625230499596,2042.511349980418,1982.1768340353053,1922.9295630324095,1864.0184307825639,1804.2907461291459,1742.5529994535555,1677.900232955811,1609.9556684452775,1538.9875152195953,1465.8986056560113,1392.1086911792522,1319.363628233027,1249.5091662563839,1184.262271208891,1125.0045468555606,1072.6147198767592,1027.3525865941053,988.8048366940559,955.9014102568489,927.0068459349659,900.0830976213938,872.9093663148886,843.3333674943664,809.5206485199151,770.1668857871983,724.6434894394662,673.0581244568833,616.2260831176908,555.5623971524163,492.91526746512403,430.36718888546386,370.03087274177454,313.86366438221313,263.51812154543666,220.2392840491194,184.81211826605892,157.55642915938222,138.36162856112423,126.75037825021431,121.95847079544679,123.0185029034322,128.83694018812423,138.25781428468986,150.11091363960105,163.2469482650722,176.5656136002667,189.0437050952394,199.76891282437194,207.98093768747214,213.11627440702594,214.84816730358384,213.11069104425974,208.0968775493118,200.225434964074,190.07775993730036,178.3145462656805,165.5869672608538,152.45929745392888,139.35724499281528,126.54990276546408,114.16497625536283,102.22922334509414,90.72099408219631,79.62059877321673,68.94691829125789,58.77402460680266,49.22777153486429,40.46750064169651,32.6608908067588,25.960128103872275,20.48540305321012,16.3182551132849,13.50367123979443,12.057126963242787,11.971553540165223,13.219671614402367,15.748987127997722,19.469448108904384,24.236610108423395,29.835429496092722,35.970874019194184,42.27101278335131,48.3060739634601,53.62351018209745,57.79515888507249,60.46914306129024,61.41721619428076,60.56846699600331,58.02273551231475,54.041170883189615,49.015996487904005,43.42548285996627,37.78233678527546,32.58373076656188,28.269249360142126,25.18993557161973,23.588487089845888,]);- mangulate(4, "intmap/intmap 50k",- 1.3085197260292869e-2,- [1.2671891500862936e-2,1.2530986120613912e-2,1.331180696717153e-2,1.2922946264656881e-2,1.3363066961678365e-2,1.2693110754402975e-2,1.3326827337654928e-2,1.2479964544686178e-2,1.3017836859139303e-2,1.365989809265981e-2,1.302498941651235e-2,1.2518111517342428e-2,1.3585988333138326e-2,1.3022843649300436e-2,1.3281766226204732e-2,1.2613955786141256e-2,1.385516290894399e-2,1.3940755178841451e-2,1.352399950257192e-2,1.3097945501717428e-2,1.3506118109139303e-2,1.3110820104988912e-2,1.3454858114632467e-2,1.2654963781746725e-2,1.341098909607778e-2,1.301902895203481e-2,1.3174954702767232e-2,1.2730065634163717e-2,1.4521066000374654e-2,1.2897912313851217e-2,1.3276044180306295e-2,1.2595120718392232e-2,1.331180696717153e-2,1.2639943411263326e-2,1.4387074758919576e-2,1.2972060491951803e-2,1.3904753973397115e-2,1.2422028829964498e-2,1.2901011755379537e-2,1.2640897085579732e-2,1.3360921194466451e-2,1.2840930273445943e-2,1.3758841802986959e-2,1.3076010992440084e-2,1.2791816046151021e-2,1.2526933004769186e-2,1.3231936743172506e-2,1.2719098379525045e-2,1.3115826895150045e-2,1.3031903555306295e-2,1.278394823304067e-2,1.2812081625374654e-2,1.2894097616585592e-2,1.355594759217153e-2,1.3280097296151021e-2,1.2547913839730123e-2,1.3145867636116842e-2,1.2866917898568014e-2,1.3199750234993795e-2,1.3061944296273092e-2,1.318687563172231e-2,1.2741032888802389e-2,1.3162795355233053e-2,1.2489978125008443e-2,1.3220969488533834e-2,1.3532820989998678e-2,1.4222089102181295e-2,1.3004962255867818e-2,1.3394776632698873e-2,1.2651864340218404e-2,1.3076010992440084e-2,1.2789908697518209e-2,1.3344947149666646e-2,1.3137046148690084e-2,1.3185921957405904e-2,1.2434903433235982e-2,1.2854996969612936e-2,1.2616816809090475e-2,1.3529959967049459e-2,1.2469950964363912e-2,1.3272944738777975e-2,1.2852851202401021e-2,1.310295229187856e-2,1.2664023687752584e-2,1.3544026663216451e-2,1.2381736090096334e-2,1.383990411988149e-2,1.3158980657967428e-2,1.3267937948616842e-2,1.2599889089974264e-2,1.3734999945076803e-2,1.3194028189095357e-2,1.32920182251061e-2,1.2640897085579732e-2,1.2952987005623678e-2,1.25748551391686e-2,1.3215962698372701e-2,1.264208917847524e-2,1.3268891622933248e-2,1.269096498719106e-2,],- [1.2167803099068501e-2,1.2188017239953022e-2,1.220823138083754e-2,1.222844552172206e-2,1.224865966260658e-2,1.22688738034911e-2,1.2289087944375618e-2,1.2309302085260139e-2,1.2329516226144657e-2,1.2349730367029178e-2,1.2369944507913696e-2,1.2390158648798217e-2,1.2410372789682737e-2,1.2430586930567256e-2,1.2450801071451776e-2,1.2471015212336295e-2,1.2491229353220815e-2,1.2511443494105334e-2,1.2531657634989854e-2,1.2551871775874373e-2,1.2572085916758893e-2,1.2592300057643412e-2,1.2612514198527932e-2,1.2632728339412452e-2,1.2652942480296971e-2,1.2673156621181491e-2,1.269337076206601e-2,1.271358490295053e-2,1.2733799043835049e-2,1.275401318471957e-2,1.2774227325604088e-2,1.2794441466488608e-2,1.2814655607373127e-2,1.2834869748257647e-2,1.2855083889142166e-2,1.2875298030026686e-2,1.2895512170911207e-2,1.2915726311795725e-2,1.2935940452680246e-2,1.2956154593564764e-2,1.2976368734449285e-2,1.2996582875333803e-2,1.3016797016218324e-2,1.3037011157102842e-2,1.3057225297987363e-2,1.3077439438871881e-2,1.3097653579756402e-2,1.311786772064092e-2,1.313808186152544e-2,1.3158296002409961e-2,1.317851014329448e-2,1.3198724284179e-2,1.3218938425063519e-2,1.3239152565948039e-2,1.3259366706832558e-2,1.3279580847717078e-2,1.3299794988601597e-2,1.3320009129486117e-2,1.3340223270370637e-2,1.3360437411255156e-2,1.3380651552139676e-2,1.3400865693024195e-2,1.3421079833908715e-2,1.3441293974793234e-2,1.3461508115677754e-2,1.3481722256562273e-2,1.3501936397446793e-2,1.3522150538331312e-2,1.3542364679215832e-2,1.3562578820100351e-2,1.3582792960984871e-2,1.3603007101869392e-2,1.362322124275391e-2,1.364343538363843e-2,1.366364952452295e-2,1.368386366540747e-2,1.3704077806291988e-2,1.3724291947176509e-2,1.3744506088061027e-2,1.3764720228945548e-2,1.3784934369830068e-2,1.3805148510714587e-2,1.3825362651599105e-2,1.3845576792483626e-2,1.3865790933368146e-2,1.3886005074252665e-2,1.3906219215137185e-2,1.3926433356021704e-2,1.3946647496906224e-2,1.3966861637790743e-2,1.3987075778675263e-2,1.4007289919559782e-2,1.4027504060444302e-2,1.4047718201328822e-2,1.4067932342213341e-2,1.4088146483097861e-2,1.410836062398238e-2,1.41285747648669e-2,1.4148788905751419e-2,1.416900304663594e-2,1.4189217187520458e-2,1.4209431328404978e-2,1.4229645469289499e-2,1.4249859610174017e-2,1.4270073751058536e-2,1.4290287891943056e-2,1.4310502032827577e-2,1.4330716173712095e-2,1.4350930314596616e-2,1.4371144455481134e-2,1.4391358596365655e-2,1.4411572737250173e-2,1.4431786878134694e-2,1.4452001019019212e-2,1.4472215159903733e-2,1.4492429300788253e-2,1.4512643441672772e-2,1.453285758255729e-2,1.455307172344181e-2,1.4573285864326331e-2,1.459350000521085e-2,1.461371414609537e-2,1.4633928286979889e-2,1.4654142427864409e-2,1.4674356568748928e-2,1.4694570709633448e-2,1.4714784850517967e-2,1.4734998991402487e-2,],- [103.23384805393238,107.3752914677975,115.62757324750896,127.92730622276207,144.17422922035547,164.22570061823546,187.89046994668956,214.9225509805089,245.01607980785485,277.80202813715005,312.84755889540276,349.6586653358409,387.68653606501005,426.3378472910014,464.9889114723179,503.0033208615244,539.7524299937965,574.6377413388791,607.1140155301579,636.7117473408694,663.0575569077963,685.8910649273824,705.0769643359672,720.6112697542422,732.6211039638166,741.3578357538271,747.183870192453,750.5538581101829,751.9914846016084,752.0632743245319,751.3509884113067,750.4241785264625,749.8143232872203,749.9917330901451,751.346113655101,754.1713704717274,758.654953954549,764.8718146840549,772.7828710084405,782.2377844405181,792.9817773611506,804.666191776358,816.8624554126002,829.0790739463846,840.7811940645797,851.4121780486358,860.4165017468949,867.2631466135408,871.4685212144883,872.6178403472804,870.3838344248719,864.5416807240634,854.9791599702043,841.7012571436591,824.8287434534138,804.5906817547868,781.3112591537147,755.39182253342,727.2894195854574,697.4934712671561,666.5023698466989,634.8017748961096,602.8461577421625,571.0447425606752,539.7524582172168,509.2659209570764,479.823898198806,451.6112403749668,424.7649773819395,399.3811972990175,375.52146137047225,353.2178291729213,332.4760102689458,313.27664402070417,295.5751540705569,279.3009551651073,264.3569567966358,250.62028972509458,237.94498868723457,226.16703635906114,215.11176864557885,204.60322748195753,194.47469020897543,184.5793577556953,174.8000815282204,165.0570623480132,155.31265244628065,145.5727023154178,135.8842732397759,126.3299319204459,117.01920471911774,108.07805190518104,99.63739564601549,91.82178385502823,84.73919671523653,78.47282060833221,73.07535457528495,68.56611435886083,64.93089794635813,62.124310727988636,60.074046613025786,58.68650143256997,57.85306195243451,57.45646096686773,57.376699379389564,57.49618640235938,57.70391293348565,57.89862615740994,57.991095703013116,57.90564068524497,57.58111828092576,56.97156156687562,56.04660695832037,54.791783567068784,53.208663459476035,51.31480740409522,49.143396455095484,46.74242241855831,44.17332178797506,41.50897538202859,38.83105324089572,36.22675254751814,33.78504579162512,31.592617995872008,29.729718160576247,28.266176126642666,27.2578394261955,26.74366553476359,]);- mangulate(5, "intmap/intmap 75k",- 1.782442693940053e-2,- [1.749295358887563e-2,1.7258826544197896e-2,1.7368022253426412e-2,1.8662873556526998e-2,1.7566863348397115e-2,1.7872039129647115e-2,1.7835799505623678e-2,1.8371049215706686e-2,1.8445912649544576e-2,1.730674867859731e-2,1.7462912847908834e-2,1.7838898947151998e-2,1.7818871786507467e-2,1.78241169952477e-2,1.738590364685903e-2,1.7644826223763326e-2,1.727599268189321e-2,1.8683854391487936e-2,1.7210904409798482e-2,1.7943803121956686e-2,1.73358357452477e-2,1.80529988311852e-2,1.8007937719735006e-2,1.8245879461678365e-2,1.7191830923470357e-2,1.8243972113045553e-2,1.7829123785408834e-2,1.8160048773201803e-2,1.779502992859731e-2,1.8102828314217428e-2,1.717085008850942e-2,1.8603984167488912e-2,1.746982698670278e-2,1.810187463990102e-2,1.7732802679451803e-2,1.7922107031258443e-2,1.8269959738167623e-2,1.75799763702477e-2,1.7178956320198873e-2,1.9241992285164693e-2,1.832288866272817e-2,1.798886423340688e-2,1.7413798620613912e-2,1.774901514283071e-2,1.767582063904653e-2,1.7769757559212545e-2,1.7350140859993795e-2,1.7886821081551412e-2,1.7167035391243795e-2,1.884907846680532e-2,1.7287913610848287e-2,1.791686182251821e-2,1.7867032339485982e-2,1.819795732727895e-2,1.7615739157112936e-2,1.7959061911019186e-2,1.7609063436898092e-2,1.7425004293831686e-2,1.813978319397817e-2,1.778716211548696e-2,1.7445031454476217e-2,1.8166962911995748e-2,1.7095748236092428e-2,1.835197572937856e-2,1.718610887757192e-2,1.774901514283071e-2,1.7853919317635396e-2,1.8454972555550436e-2,1.7885867407235006e-2,1.8212024023445943e-2,1.7335120489510396e-2,1.797217493286977e-2,1.84039509796227e-2,1.8130008032235006e-2,1.7295066168221334e-2,1.718896990052114e-2,1.7470780661019186e-2,1.8232051184090475e-2,1.7176095297249654e-2,1.7421904852303365e-2,1.7430964758309225e-2,1.73510945343102e-2,1.7648164083870748e-2,2.055210237732778e-2,1.9183818151863912e-2,1.781481867066274e-2,1.7480078985604146e-2,1.763791208496938e-2,1.7991010000618795e-2,1.7378989508065084e-2,1.8564883520516256e-2,1.6936961462410787e-2,1.801294450989614e-2,1.7384949972542623e-2,1.8936816503914693e-2,1.7874900152596334e-2,1.7111960699471334e-2,1.766389971009145e-2,1.7120782186898092e-2,1.785010462036977e-2,],- [1.6575447370919087e-2,1.660960618271358e-2,1.6643764994508068e-2,1.667792380630256e-2,1.6712082618097052e-2,1.6746241429891544e-2,1.6780400241686033e-2,1.6814559053480525e-2,1.6848717865275017e-2,1.688287667706951e-2,1.6917035488864e-2,1.695119430065849e-2,1.6985353112452983e-2,1.7019511924247475e-2,1.7053670736041963e-2,1.7087829547836456e-2,1.7121988359630948e-2,1.715614717142544e-2,1.719030598321993e-2,1.722446479501442e-2,1.7258623606808913e-2,1.7292782418603405e-2,1.7326941230397894e-2,1.7361100042192386e-2,1.7395258853986878e-2,1.742941766578137e-2,1.746357647757586e-2,1.749773528937035e-2,1.7531894101164843e-2,1.7566052912959335e-2,1.7600211724753824e-2,1.7634370536548316e-2,1.7668529348342808e-2,1.77026881601373e-2,1.773684697193179e-2,1.777100578372628e-2,1.7805164595520773e-2,1.7839323407315266e-2,1.7873482219109754e-2,1.7907641030904246e-2,1.794179984269874e-2,1.797595865449323e-2,1.801011746628772e-2,1.804427627808221e-2,1.8078435089876704e-2,1.8112593901671196e-2,1.8146752713465684e-2,1.8180911525260177e-2,1.821507033705467e-2,1.824922914884916e-2,1.828338796064365e-2,1.8317546772438142e-2,1.8351705584232634e-2,1.8385864396027126e-2,1.8420023207821615e-2,1.8454182019616107e-2,1.84883408314106e-2,1.852249964320509e-2,1.855665845499958e-2,1.8590817266794072e-2,1.8624976078588564e-2,1.8659134890383056e-2,1.8693293702177545e-2,1.8727452513972037e-2,1.876161132576653e-2,1.879577013756102e-2,1.882992894935551e-2,1.8864087761150002e-2,1.8898246572944494e-2,1.8932405384738987e-2,1.8966564196533475e-2,1.9000723008327967e-2,1.903488182012246e-2,1.906904063191695e-2,1.910319944371144e-2,1.9137358255505933e-2,1.9171517067300425e-2,1.9205675879094917e-2,1.9239834690889406e-2,1.9273993502683898e-2,1.930815231447839e-2,1.9342311126272882e-2,1.937646993806737e-2,1.9410628749861863e-2,1.9444787561656355e-2,1.9478946373450847e-2,1.9513105185245336e-2,1.9547263997039828e-2,1.958142280883432e-2,1.9615581620628812e-2,1.96497404324233e-2,1.9683899244217793e-2,1.9718058056012285e-2,1.9752216867806777e-2,1.9786375679601266e-2,1.9820534491395758e-2,1.985469330319025e-2,1.9888852114984742e-2,1.992301092677923e-2,1.9957169738573723e-2,1.9991328550368215e-2,2.0025487362162704e-2,2.0059646173957196e-2,2.009380498575169e-2,2.012796379754618e-2,2.0162122609340673e-2,2.019628142113516e-2,2.0230440232929654e-2,2.0264599044724146e-2,2.0298757856518634e-2,2.0332916668313127e-2,2.036707548010762e-2,2.040123429190211e-2,2.0435393103696603e-2,2.046955191549109e-2,2.0503710727285584e-2,2.0537869539080076e-2,2.0572028350874565e-2,2.0606187162669057e-2,2.064034597446355e-2,2.067450478625804e-2,2.0708663598052533e-2,2.0742822409847022e-2,2.0776981221641514e-2,2.0811140033436006e-2,2.0845298845230495e-2,2.0879457657024987e-2,2.091361646881948e-2,],- [21.93696057324332,24.323735524953364,29.197465686411057,36.75008750960917,47.248277626418485,61.007705134983176,78.35878632902248,99.60495891767276,124.97563466621021,154.5773214493261,188.34766234011738,226.01800790081552,267.0903280285252,310.8335864909691,356.30310088076294,402.38402294292166,447.8571842398891,491.482547822521,532.0928088563512,568.6876833767396,600.5184203373826,627.1522664598195,648.5080867703326,664.8570509451873,676.7860520244654,685.1259888700641,690.8517144497637,694.9646902102361,698.3724901820792,701.7806196819816,705.6112064695835,709.9598805326355,714.5969034794213,719.0120904505084,722.4963654621741,724.2471177814522,723.48097725776,719.5369266930733,711.954989993026,700.5206229119342,685.2713900030592,666.469207695621,644.5470131490156,620.0421145336287,593.529156572744,565.563700677379,536.6435566426949,507.19027225134886,477.5487341742802,447.9996022176686,418.77782180289967,390.0907773898615,362.13136841350666,335.0837430392383,309.1218853193872,284.40312149134456,261.0595539944422,239.1904075297476,218.85749096682912,200.0847993889323,182.86208294073515,167.15129342624252,152.89434445180126,140.02059566447338,128.45279270387934,118.11070564611964,108.91226081461306,100.7724507010389,93.60068621341667,87.2975145400551,81.75176443963267,76.83918639468442,72.42350021276238,68.36042245038495,64.50472756111803,60.719762896263845,56.888210439146604,52.92242352488722,48.77250900225098,44.430555664609024,39.93001125126254,35.34006272821711,30.755784337782483,26.285572702609148,22.037817602200025,18.108778586462353,14.573274687076877,11.479161383345508,8.845831510154438,6.666303326330748,4.911977577921341,3.5389188883712333,2.494539495813015,1.7237762860966004,1.1741684743099787,0.7995749403683968,0.5625474529992474,0.43555794509438145,0.4013533830075499,0.45269331548320124,0.5916411256085017,0.828465891657938,1.180104015328516,1.6680610106593938,2.315629031373574,3.1443682916201947,4.169948369871807,5.39764755359036,6.818024735941304,8.403453934332482,10.1062867001933,11.859333517944679,13.579109923623305,15.17189480676388,16.54215940440886,17.602443088285202,18.28338710822338,18.542485590936373,18.370226260684653,17.79266157209302,16.870001092881687,15.691429395854753,14.366898199321922,13.01700778896602,11.762224038372791,10.712582038139441,9.958771303703996,9.565178629521867,]);- - var benches = ["fib/fib 10","fib/fib 20","fib/fib 30","intmap/intmap 25k","intmap/intmap 50k","intmap/intmap 75k",];- var ylabels = [[-0,'<a href="#b0">fib/fib 10</a>'],[-1,'<a href="#b1">fib/fib 20</a>'],[-2,'<a href="#b2">fib/fib 30</a>'],[-3,'<a href="#b3">intmap/intmap 25k</a>'],[-4,'<a href="#b4">intmap/intmap 50k</a>'],[-5,'<a href="#b5">intmap/intmap 75k</a>'],];- var means = $.scaleTimes([8.087233523139602e-7,9.511279240520537e-5,1.1464177420052388e-2,5.067442705544335e-3,1.3085197260292869e-2,1.782442693940053e-2,]);- var xs = [];- var prev = null;- for (var i = 0; i < means[0].length; i++) {- var name = benches[i].split(/\//);- name.pop();- name = name.join('/');- if (name != prev) {- xs.push({ label: name, data: [[means[0][i], -i]]});- prev = name;- }- else- xs[xs.length-1].data.push([means[0][i],-i]);- }- var oq = $("#overview");- o = $.plot(oq, xs, { bars: { show: true, horizontal: true,- barWidth: 0.75, align: "center" },- grid: { borderColor: "#777", hoverable: true },- legend: { show: xs.length > 1 },- xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },- yaxis: { ticks: ylabels, tickColor: '#ffffff' } });- if (benches.length > 3)- o.getPlaceholder().height(28*benches.length);- o.resize();- o.setupGrid();- o.draw();- $.addTooltip("#overview", function(x,y) { return x + ' ' + means[1]; });-});-$(document).ready(function () {- $(".time").text(function(_, text) {- return $.renderTime(text);- });- $(".citime").text(function(_, text) {- return $.renderTime(text);- });- $(".percent").text(function(_, text) {- return (text*100).toFixed(1);- });- });-</script>-- </div>- </div>- <div id="footer">- <div class="body">- <div class="footfirst">- <h2>colophon</h2>- <p>This report was created using the- <a href="http://hackage.haskell.org/package/criterion">criterion</a>- benchmark execution and performance analysis tool.</p>- <p>Criterion is developed and maintained- by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>- </div>- </div>- </div>- </body>-</html>
templates/criterion.css view
@@ -1,102 +1,143 @@-html, body {- height: 100%;- margin: 0;+html,body {+ padding: 0; margin: 0;+ font-family: sans-serif; }--#wrap {- min-height: 100%;+* {+ -webkit-tap-highlight-color: transparent; }--#main {- overflow: auto;- padding-bottom: 180px; /* must be same height as the footer */+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em; }+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+} -#footer {- position: relative;- margin-top: -180px; /* negative value of footer height */- height: 180px;- clear: both;- background: #888;- margin: 40px 0 0;- color: white;- font-size: larger;- font-weight: 300;-} +#legend-toggle {+ cursor: pointer;+} -body:before {- /* Opera fix */- content: "";- height: 100%;- float: left;- width: 0;- margin-top: -32767px;+.overview-info {+ float:right; } -body {- font: 14px Helvetica Neue;- text-rendering: optimizeLegibility;- margin-top: 1em;+.overview-info a {+ display: inline-block;+ margin-left: 10px; }+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+} -a:link {- color: steelblue;- text-decoration: none;+select {+ outline: none;+ border:none;+ background: transparent; } -a:visited {- color: #4a743b;- text-decoration: none;+footer .content {+ padding: 0; } -#footer a {- color: white;- text-decoration: underline;+span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em; } -.hover {- color: steelblue;+@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active { text-decoration: none;+ color: #309ef2; }--.body {- width: 960px;- margin: auto;+h1.title {+ font-weight: 600; }--.footfirst {- position: relative;- top: 30px;+h1 {+ font-weight: 400; }--th {- font-weight: 500;- opacity: 0.8;+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */ }+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+} -th.cibound {- opacity: 0.4;+.explanation {+ margin-top: 3em; } -.citime {- opacity: 0.5;+.explanation h1 {+ font-size: 2.6em; } -h1 {- font-size: 36px;- font-weight: 300;- margin-bottom: .3em;+#grokularation.explanation li {+ margin: 1em 0; } -h2 {- font-size: 30px;- font-weight: 300;- margin-bottom: .3em;+#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal; } -.meanlegend {- color: #404040;- background-color: #ffffff;- opacity: 0.6;- font-size: smaller;+@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ } }
+ templates/criterion.js view
@@ -0,0 +1,870 @@+(function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();
+ templates/default.tpl view
@@ -0,0 +1,139 @@+<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ {{{js-chart}}}+ {{{js-criterion}}}+ </script>+ <style>+ {{{criterion-css}}}+ </style>+ <script type="application/json" id="report-data">+ {{{json}}}+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>
− templates/js/excanvas-r3.min.js
@@ -1,1 +0,0 @@-if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
− templates/js/jquery-1.6.4.min.js
@@ -1,4 +0,0 @@-/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */-(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete -t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean-(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
− templates/js/jquery.criterion.js
@@ -1,103 +0,0 @@-(function ($) {- $.zip = function(a,b) {- var x = Math.min(a.length,b.length);- var c = new Array(x);- for (var i = 0; i < x; i++)- c[i] = [a[i],b[i]];- return c;- };-- $.mean = function(ary) {- var m = 0, i = 0;-- while (i < ary.length) {- var j = i++;- m += (ary[j] - m) / i;- }-- return m;- };-- $.timeUnits = function(secs) {- if (secs < 0) return timeUnits(-secs);- else if (secs >= 1e9) return [1e-9, "Gs"];- else if (secs >= 1e6) return [1e-6, "Ms"];- else if (secs >= 1) return [1, "s"];- else if (secs >= 1e-3) return [1e3, "ms"];- else if (secs >= 1e-6) return [1e6, "\u03bcs"];- else if (secs >= 1e-9) return [1e9, "ns"];- else if (secs >= 1e-12) return [1e12, "ps"];- };-- $.scaleTimes = function(ary) {- var s = $.timeUnits($.mean(ary));- return [$.scaleBy(s[0], ary), s[1]];- };-- $.scaleBy = function(x, ary) {- var nary = new Array(ary.length);- for (var i = 0; i < ary.length; i++)- nary[i] = ary[i] * x;- return nary;- };-- $.renderTime = function(text) {- var x = parseFloat(text);- var t = $.timeUnits(x);- x *= t[0];- if (x >= 1000 || x <= -1000) return x.toFixed() + " " + t[1];- var prec = 5;- if (x < 0) prec++;-- return x.toString().substring(0,prec) + " " + t[1];- };-- $.unitFormatter = function(units) {- var ticked = 0;- return function(val,axis) {- var s = val.toFixed(axis.tickDecimals);- if (ticked > 1)- return s;- else {- ticked++;- return s + ' ' + units;- }- };- };-- $.addTooltip = function(name, renderText) {- function showTooltip(x, y, contents) {- $('<div id="tooltip">' + contents + '</div>').css( {- position: 'absolute',- display: 'none',- top: y + 5,- left: x + 5,- border: '1px solid #fdd',- padding: '2px',- 'background-color': '#fee',- opacity: 0.80- }).appendTo("body").fadeIn(200);- };- var pp = null;- $(name).bind("plothover", function (event, pos, item) {- $("#x").text(pos.x.toFixed(2));- $("#y").text(pos.y.toFixed(2));-- if (item) {- if (pp != item.dataIndex) {- pp = item.dataIndex;-- $("#tooltip").remove();- var x = item.datapoint[0].toFixed(2),- y = item.datapoint[1].toFixed(2);-- showTooltip(item.pageX, item.pageY, renderText(x,y));- }- }- else {- $("#tooltip").remove();- pp = null; - }- });- };-})(jQuery);
− templates/js/jquery.flot-0.7.min.js
@@ -1,6 +0,0 @@-/* Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */-(function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=1;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}H.stroke()}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);
+ templates/json.tpl view
@@ -0,0 +1,1 @@+{{{json}}}
− templates/report.tpl
@@ -1,229 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-<html>- <head>- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">- <title>criterion report</title>- <!--[if lte IE 8]>- <script language="javascript" type="text/javascript">- {{#include}}js/excanvas-r3.min.js{{/include}}- </script>- <![endif]-->- <script language="javascript" type="text/javascript">- {{#include}}js/jquery-1.6.4.min.js{{/include}}- </script>- <script language="javascript" type="text/javascript">- {{#include}}js/jquery.flot-0.7.min.js{{/include}}- </script>- <script language="javascript" type="text/javascript">- {{#include}}js/jquery.criterion.js{{/include}}- </script>- <style type="text/css">-{{#include}}criterion.css{{/include}}- </style>- <!--[if !IE 7]>- <style type="text/css">- #wrap {display:table;height:100%}- </style>- <![endif]-->- </head>- <body>- <div id="wrap">- <div id="main" class="body">- <h1>criterion performance measurements</h1>--<h2>overview</h2>--<p><a href="#grokularation">want to understand this report?</a></p>--<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>--{{#report}}-<h2><a name="b{{number}}">{{name}}</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde{{number}}" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time{{number}}" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="{{anMean.estConfidenceLevel}} confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="{{anMean.estConfidenceLevel}} confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">{{anMean.estLowerBound}}</span></td>- <td><span class="time">{{anMean.estPoint}}</span></td>- <td><span class="citime">{{anMean.estUpperBound}}</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">{{anStdDev.estLowerBound}}</span></td>- <td><span class="time">{{anStdDev.estPoint}}</span></td>- <td><span class="citime">{{anStdDev.estUpperBound}}</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have {{anOutlierVar.ovDesc}}- (<span class="percent">{{anOutlierVar.ovFraction}}</span>%)- effect on estimated standard deviation.</p>- </span>-{{/report}}-- <h2><a name="grokularation">understanding this report</a></h2>-- <p>In this report, each function benchmarked by criterion is assigned- a section of its own. In each section, we display two charts, each- with an <i>x</i> axis that represents measured execution time.- These charts are active; if you hover your mouse over data points- and annotations, you will see more details.</p>-- <ul>- <li>The chart on the left is a- <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel- density estimate</a> (also known as a KDE) of time- measurements. This graphs the probability of any given time- measurement occurring. A spike indicates that a measurement of a- particular time occurred; its height indicates how often that- measurement was repeated.</li>-- <li>The chart on the right is the raw data from which the kernel- density estimate is built. Measurements are displayed on- the <i>y</i> axis in the order in which they occurred.</li>- </ul>- - <p>Under the charts is a small table displaying the mean and standard- deviation of the measurements. We use a statistical technique- called- the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>- to provide confidence intervals on our estimates of these values.- The bootstrap-derived upper and lower bounds on the mean and- standard deviation let you see how accurate we believe those- estimates to be. (Hover the mouse over the table headers to see- the confidence levels.)</p>- - <p>A noisy benchmarking environment can cause some or many- measurements to fall far from the mean. These outlying- measurements can have a significant inflationary effect on the- estimate of the standard deviation. We calculate and display an- estimate of the extent to which the standard deviation has been- inflated by outliers.</p>--<script type="text/javascript">-$(function () {- function mangulate(number, name, mean, times, kdetimes, kdepdf) {- var meanSecs = mean;- var units = $.timeUnits(mean);- var scale = units[0];- units = units[1];- mean *= scale;- kdetimes = $.scaleBy(scale, kdetimes);- var ts = $.scaleBy(scale, times);- var kq = $("#kde" + number);- var k = $.plot(kq,- [{ label: name + " time densities",- data: $.zip(kdetimes, kdepdf),- }],- { xaxis: { tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- grid: { borderColor: "#777",- hoverable: true, markings: [ { color: '#6fd3fb',- lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },- });- var o = k.pointOffset({ x: mean, y: 0});- kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +- '" style="position:absolute;left:' + (o.left + 4) +- 'px;bottom:139px;">mean</div>');- var timepairs = new Array(ts.length);- for (var i = 0; i < ts.length; i++)- timepairs[i] = [ts[i],i];- $.plot($("#time" + number),- [{ label: name + " times",- data: timepairs }],- { points: { show: true },- grid: { borderColor: "#777", hoverable: true },- xaxis: { min: kdetimes[0], max: kdetimes[kdetimes.length-1],- tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- });- $.addTooltip("#kde" + number, function(x,y) { return x + ' ' + units; });- $.addTooltip("#time" + number, function(x,y) { return x + ' ' + units; });- };- {{#report}}- mangulate({{number}}, "{{name}}",- {{anMean.estPoint}},- [{{#times}}{{x}},{{/times}}],- [{{#kdetimes}}{{x}},{{/kdetimes}}],- [{{#kdepdf}}{{x}},{{/kdepdf}}]);- {{/report}}-- var benches = [{{#report}}"{{name}}",{{/report}}];- var ylabels = [{{#report}}[-{{number}},'<a href="#b{{number}}">{{name}}</a>'],{{/report}}];- var means = $.scaleTimes([{{#report}}{{anMean.estPoint}},{{/report}}]);- var xs = [];- var prev = null;- for (var i = 0; i < means[0].length; i++) {- var name = benches[i].split(/\//);- name.pop();- name = name.join('/');- if (name != prev) {- xs.push({ label: name, data: [[means[0][i], -i]]});- prev = name;- }- else- xs[xs.length-1].data.push([means[0][i],-i]);- }- var oq = $("#overview");- o = $.plot(oq, xs, { bars: { show: true, horizontal: true,- barWidth: 0.75, align: "center" },- grid: { borderColor: "#777", hoverable: true },- legend: { show: xs.length > 1 },- xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },- yaxis: { ticks: ylabels, tickColor: '#ffffff' } });- if (benches.length > 3)- o.getPlaceholder().height(28*benches.length);- o.resize();- o.setupGrid();- o.draw();- $.addTooltip("#overview", function(x,y) { return x + ' ' + means[1]; });-});-$(document).ready(function () {- $(".time").text(function(_, text) {- return $.renderTime(text);- });- $(".citime").text(function(_, text) {- return $.renderTime(text);- });- $(".percent").text(function(_, text) {- return (text*100).toFixed(1);- });- });-</script>-- </div>- </div>- <div id="footer">- <div class="body">- <div class="footfirst">- <h2>colophon</h2>- <p>This report was created using the- <a href="http://hackage.haskell.org/package/criterion">criterion</a>- benchmark execution and performance analysis tool.</p>- <p>Criterion is developed and maintained- by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>- </div>- </div>- </div>- </body>-</html>
+ tests/Cleanup.hs view
@@ -0,0 +1,123 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# OPTIONS_GHC -Wno-orphans #-}++import Criterion.Main (Benchmark, bench, nfIO)+import Criterion.Types (Config(..), Verbosity(Quiet))+import Control.DeepSeq (NFData(..))+import Control.Exception (Exception, try, throwIO)+import Control.Monad (when)+import Data.ByteString (ByteString)+import Prelude ()+import Prelude.Compat+import System.Directory (doesFileExist, removeFile)+import System.Environment (withArgs)+import System.IO ( Handle, IOMode(ReadWriteMode), SeekMode(AbsoluteSeek)+ , hClose, hFileSize, hSeek, openFile)+import Test.Tasty (TestTree, defaultMain)+#if MIN_VERSION_tasty(1,5,4)+import Test.Tasty (inOrderTestGroup)+#else+import Test.Tasty (TestName, testGroup)+#endif+import Test.Tasty.HUnit (testCase)+import Test.HUnit (assertFailure)+import qualified Criterion.Main as C+import qualified Data.ByteString as BS++instance NFData Handle where+ rnf !_ = ()++data CheckResult = ShouldThrow | WrongData deriving Show++instance Exception CheckResult++type BenchmarkWithFile =+ String -> IO Handle -> (Handle -> IO ()) -> (Handle -> IO ()) -> Benchmark++perRun :: BenchmarkWithFile+perRun name alloc clean work =+ bench name $ C.perRunEnvWithCleanup alloc clean work++perBatch :: BenchmarkWithFile+perBatch name alloc clean work =+ bench name $ C.perBatchEnvWithCleanup (const alloc) (const clean) work++envWithCleanup :: BenchmarkWithFile+envWithCleanup name alloc clean work =+ C.envWithCleanup alloc clean $ bench name . nfIO . work++testCleanup :: Bool -> String -> BenchmarkWithFile -> TestTree+testCleanup shouldFail name withEnvClean = testCase name $ do+ existsBefore <- doesFileExist testFile+ when existsBefore $ failTest "Input file already exists"++ result <- runTest . withEnvClean name alloc clean $ \hnd -> do+ result <- hFileSize hnd >>= BS.hGet hnd . fromIntegral+ resetHandle hnd+ when (result /= testData) $ throwIO WrongData+ when shouldFail $ throwIO ShouldThrow++ case result of+ Left WrongData -> failTest "Incorrect result read from file"+ Left ShouldThrow -> return ()+ Right _ | shouldFail -> failTest "Failed to throw exception"+ | otherwise -> return ()++ existsAfter <- doesFileExist testFile+ when existsAfter $ do+ removeFile testFile+ failTest "Failed to delete file"+ where+ testFile :: String+ testFile = "tmp"++ testData :: ByteString+ testData = "blah"++ runTest :: Benchmark -> IO (Either CheckResult ())+ runTest = withArgs (["-n","1"]) . try . C.defaultMainWith config . pure+ where+ config = C.defaultConfig { verbosity = Quiet , timeLimit = 1 }++ failTest :: String -> IO ()+ failTest s = assertFailure $ s ++ " in test: " ++ name ++ "!"++ resetHandle :: Handle -> IO ()+ resetHandle hnd = hSeek hnd AbsoluteSeek 0++ alloc :: IO Handle+ alloc = do+ hnd <- openFile testFile ReadWriteMode+ BS.hPut hnd testData+ resetHandle hnd+ return hnd++ clean :: Handle -> IO ()+ clean hnd = do+ hClose hnd+ removeFile testFile++testSuccess :: String -> BenchmarkWithFile -> TestTree+testSuccess = testCleanup False++testFailure :: String -> BenchmarkWithFile -> TestTree+testFailure = testCleanup True++-- before 1.5.4, tasty would not execute tests in parallel without +RTS -N+#if !MIN_VERSION_tasty(1,5,4)+inOrderTestGroup :: TestName -> [TestTree] -> TestTree+inOrderTestGroup = testGroup+#endif++main :: IO ()+main = defaultMain $ inOrderTestGroup "cleanup"+ [ testSuccess "perRun Success" perRun+ , testFailure "perRun Failure" perRun+ , testSuccess "perBatch Success" perBatch+ , testFailure "perBatch Failure" perBatch+ , testSuccess "envWithCleanup Success" envWithCleanup+ , testFailure "envWithCleanup Failure" envWithCleanup+ ]
+ tests/Properties.hs view
@@ -0,0 +1,34 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Properties (tests) where++import Control.Applicative as A ((<$>))+import Criterion.Analysis+import Prelude ()+import Prelude.Compat+import Statistics.Types (Sample)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.QuickCheck (testProperty)+import Test.QuickCheck+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Unboxed as U++instance (Arbitrary a, U.Unbox a) => Arbitrary (U.Vector a) where+ arbitrary = U.fromList A.<$> arbitrary+ shrink = map U.fromList . shrink . U.toList++outlier_bucketing :: Double -> Sample -> Bool+outlier_bucketing y ys =+ countOutliers (classifyOutliers xs) <= fromIntegral (G.length xs)+ where xs = U.cons y ys++outlier_bucketing_weighted :: Double -> Sample -> Bool+outlier_bucketing_weighted x xs =+ outlier_bucketing x (xs <> G.replicate (G.length xs * 10) 0)++tests :: TestTree+tests = testGroup "Properties" [+ testProperty "outlier_bucketing" outlier_bucketing+ , testProperty "outlier_bucketing_weighted" outlier_bucketing_weighted+ ]
+ tests/Sanity.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE ScopedTypeVariables #-}++import Criterion.Main (bench, bgroup, env, whnf)+import System.Environment (getEnv, withArgs)+import System.Timeout (timeout)+import Test.Tasty (defaultMain)+import Test.Tasty.HUnit (testCase)+import Test.HUnit (Assertion, assertFailure)+import qualified Criterion.Main as C+import qualified Control.Exception as E+import qualified Data.ByteString as B++fib :: Int -> Int+fib = sum . go+ where go 0 = [0]+ go 1 = [1]+ go n = go (n-1) ++ go (n-2)++-- Additional arguments to include along with the ARGS environment variable.+extraArgs :: [String]+extraArgs = [ "--raw=sanity.dat", "--json=sanity.json", "--csv=sanity.csv"+ , "--output=sanity.html", "--junit=sanity.junit" ]++sanity :: Assertion+sanity = do+ args <- getArgEnv+ withArgs (extraArgs ++ args) $ do+ let tooLong = 30+ wat <- timeout (tooLong * 1000000) $+ C.defaultMain [+ bgroup "fib" [+ bench "fib 10" $ whnf fib 10+ , bench "fib 22" $ whnf fib 22+ ]+ , env (return (replicate 1024 0)) $ \xs ->+ bgroup "length . filter" [+ bench "string" $ whnf (length . filter (==0)) xs+ , env (return (B.pack xs)) $ \bs ->+ bench "bytestring" $ whnf (B.length . B.filter (==0)) bs+ ]+ ]+ case wat of+ Just () -> return ()+ Nothing -> assertFailure $ "killed for running longer than " +++ show tooLong ++ " seconds!"++main :: IO ()+main = defaultMain $ testCase "sanity" sanity++-- This is a workaround to in pass arguments that sneak past+-- test-framework to get to criterion.+getArgEnv :: IO [String]+getArgEnv =+ fmap words (getEnv "ARGS") `E.catch`+ \(_ :: E.SomeException) -> return []
+ tests/Tests.hs view
@@ -0,0 +1,45 @@+module Main (main) where++import Criterion.Types+import qualified Data.Aeson as Aeson+import qualified Data.Vector as V+import Properties+import Statistics.Types (estimateFromErr, mkCL)+import Test.Tasty (defaultMain, testGroup)+import Test.Tasty.HUnit (testCase)+import Test.HUnit++r1 :: Report+r1 = Report 0 "" [] v1 s1 (Outliers 0 0 0 0 0) []+ where+ m1 = Measured 4.613000783137977e-05 3.500000000000378e-05 31432 1 0 0 0 0 0.0 0.0 0.0 0.0+ v1 = V.fromList [m1]+ est1 = estimateFromErr 0.0 (0.0, 0.0) (mkCL 0.0)+ s1 = SampleAnalysis [] est1 est1 (OutlierVariance Unaffected "" 0.0)++m2 :: Measured+m2 = Measured {measTime = 1.1438998626545072e-5+ , measCpuTime = 1.2000000001677336e-5+ , measCycles = 6208+ , measIters = 1++ , measAllocated = minBound+ , measPeakMbAllocated = minBound+ , measNumGcs = minBound+ , measBytesCopied = minBound++ , measMutatorWallSeconds = -1/0+ , measMutatorCpuSeconds = -1/0+ , measGcWallSeconds = -1/0+ , measGcCpuSeconds = -1/0}++main :: IO ()+main = defaultMain $ testGroup "Tests"+ [ Properties.tests+ , testCase "json-roundtrip1"+ (assertEqual "round trip simple Measured"+ (Right m2) (Aeson.eitherDecode (Aeson.encode m2)))+ , testCase "json-roundtrip2"+ (assertEqual "round trip simple Report"+ (Right r1) (Aeson.eitherDecode (Aeson.encode r1)))+ ]
+ www/fibber-screenshot.png view
binary file changed (absent → 42451 bytes)
+ www/fibber.html view
@@ -0,0 +1,1159 @@+<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <script type="application/json" id="report-data">+ [{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.5918709355982327e-11,"confIntUDX":2.9607390233713285e-11},"estPoint":9.106360888572829e-9},"anOutlierVar":{"ovDesc":"a slight","ovEffect":"Slight","ovFraction":6.737143023159825e-2},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.6763788761244487e-11,"confIntUDX":1.6468105142732684e-11},"estPoint":9.096614263095112e-9},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.7868969216318594e-5,"confIntUDX":5.3873819469498e-5},"estPoint":-1.89965930799961e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.1530397141645832e-4,"confIntUDX":6.189785882004806e-5},"estPoint":0.9998424977692931},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":3.1940524528690886e-11,"confIntUDX":6.843837978395988e-11},"estPoint":7.27346604075967e-11}},"reportKDEs":[{"kdePDF":[9.931606075488966e8,1.0446311483745661e9,1.1464845639902506e9,1.2965437618608782e9,1.491547637557964e9,1.727179362628494e9,1.998136110213061e9,2.2982568299065623e9,2.620717970608426e9,2.9582966052431026e9,3.303688038174394e9,3.649852937184193e9,3.9903596668450484e9,4.31968283935058e9,4.633420512813919e9,4.928400385004462e9,5.202659063138075e9,5.455296200087194e9,5.686224155673746e9,5.895850465898425e9,6.084741408592668e9,6.253317736089339e9,6.401627077830508e9,6.52922242308152e9,6.635155299567513e9,6.718070115960201e9,6.7763675603010025e9,6.808394233799898e9,6.812615352872726e9,6.787737335532024e9,6.732764732156293e9,6.646996596909848e9,6.529985569037385e9,6.381493856597582e9,6.201481156386637e9,5.990150166223097e9,5.748058301478973e9,5.476284019000945e9,5.176617992812801e9,4.85173783236445e9,4.505322859430657e9,4.142073069456993e9,3.7676118941272745e9,3.3882721733002987e9,3.010784556149582e9,2.641903442299702e9,2.2880147745562897e9,1.954771361231472e9,1.6467954437233305e9,1.3674767504643753e9,1.1188798578844686e9,9.017600120116296e8,7.15673955964767e8,5.591633247823689e8,4.299835043065657e8,3.253503869132641e8,2.4218045502268296e8,1.7730498138150364e8,1.2764564554527739e8,9.034542869571006e7,6.285441349903045e7,4.29745477478034e7,2.8870311074783392e7,1.9053600175646566e7,1.2351255644524533e7,7862832.293523749,4914830.48186121,3015990.9532654574,1816671.7589945681,1073948.7195011273,623002.4922210469,354598.2259269887,198001.38800569507,108450.78055980211,58261.76645420628,30696.71066565336,15863.40139928159,8047.139692022314,4023.107564696037,2018.721815444101,1095.546339864918,797.0964160039194,965.7646637602897,1673.7654005465572,3244.3449793213904,6365.1275956224035,12319.268362039442,23385.05350289781,43482.41151544118,79175.31160885778,141169.37035284,246467.67007506167,421353.8574208979,705344.4473682788,1156172.7788911723,1855715.6798094162,2916536.115642558,4488389.43567646,6763648.023156671,9980190.449160652,1.4419962338167649e7,2.0401262981384832e7,2.826297453225845e7,3.833954552916834e7,5.092663124875632e7,6.6238850702506244e7,8.436299044722326e7,1.0521188300608647e8,1.2848572100459903e8,1.5364830502573544e8,1.7992528832738453e8,2.0632966605884564e8,2.3171661122398487e8,2.5486563990265465e8,2.7458362770757973e8,2.898182045255506e8,2.9976833755220944e8,3.0397810114449865e8,3.024010060477763e8,2.954256653350271e8,2.8385843975927883e8,2.688641717828093e8,2.5187123788457197e8,2.3445110785056865e8,2.1818489202187002e8,2.045298706102621e8,1.9469798460383764e8,1.8955621319835737e8],"kdeType":"time","kdeValues":[8.978554056224653e-9,8.982955739396322e-9,8.987357422567991e-9,8.991759105739662e-9,8.996160788911331e-9,9.000562472083e-9,9.00496415525467e-9,9.00936583842634e-9,9.01376752159801e-9,9.018169204769678e-9,9.022570887941347e-9,9.026972571113017e-9,9.031374254284687e-9,9.035775937456356e-9,9.040177620628026e-9,9.044579303799695e-9,9.048980986971365e-9,9.053382670143035e-9,9.057784353314704e-9,9.062186036486373e-9,9.066587719658042e-9,9.070989402829713e-9,9.075391086001382e-9,9.079792769173051e-9,9.08419445234472e-9,9.08859613551639e-9,9.09299781868806e-9,9.097399501859729e-9,9.101801185031398e-9,9.106202868203067e-9,9.110604551374738e-9,9.115006234546407e-9,9.119407917718076e-9,9.123809600889745e-9,9.128211284061414e-9,9.132612967233085e-9,9.137014650404754e-9,9.141416333576423e-9,9.145818016748092e-9,9.150219699919763e-9,9.154621383091432e-9,9.159023066263101e-9,9.16342474943477e-9,9.16782643260644e-9,9.17222811577811e-9,9.17662979894978e-9,9.181031482121449e-9,9.185433165293118e-9,9.189834848464789e-9,9.194236531636458e-9,9.198638214808127e-9,9.203039897979796e-9,9.207441581151465e-9,9.211843264323136e-9,9.216244947494805e-9,9.220646630666474e-9,9.225048313838143e-9,9.229449997009814e-9,9.233851680181483e-9,9.238253363353152e-9,9.242655046524821e-9,9.24705672969649e-9,9.251458412868161e-9,9.25586009603983e-9,9.2602617792115e-9,9.264663462383168e-9,9.269065145554839e-9,9.273466828726508e-9,9.277868511898177e-9,9.282270195069846e-9,9.286671878241516e-9,9.291073561413186e-9,9.295475244584855e-9,9.299876927756525e-9,9.304278610928194e-9,9.308680294099864e-9,9.313081977271534e-9,9.317483660443203e-9,9.321885343614872e-9,9.326287026786541e-9,9.330688709958212e-9,9.33509039312988e-9,9.33949207630155e-9,9.343893759473219e-9,9.34829544264489e-9,9.352697125816559e-9,9.357098808988228e-9,9.361500492159897e-9,9.365902175331566e-9,9.370303858503237e-9,9.374705541674906e-9,9.379107224846575e-9,9.383508908018244e-9,9.387910591189915e-9,9.392312274361584e-9,9.396713957533253e-9,9.401115640704922e-9,9.405517323876592e-9,9.409919007048262e-9,9.414320690219931e-9,9.4187223733916e-9,9.42312405656327e-9,9.42752573973494e-9,9.43192742290661e-9,9.436329106078279e-9,9.440730789249948e-9,9.445132472421617e-9,9.449534155593288e-9,9.453935838764957e-9,9.458337521936626e-9,9.462739205108295e-9,9.467140888279964e-9,9.471542571451635e-9,9.475944254623304e-9,9.480345937794973e-9,9.484747620966642e-9,9.489149304138313e-9,9.493550987309982e-9,9.497952670481651e-9,9.50235435365332e-9,9.506756036824991e-9,9.51115771999666e-9,9.51555940316833e-9,9.519961086339998e-9,9.524362769511667e-9,9.528764452683338e-9,9.533166135855007e-9,9.537567819026676e-9]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[2.9859947971999645e-6,2.184000000000127e-6,5577,1,null,null,null,null,null,null,null,null],[1.3720127753913403e-6,1.2830000000003602e-6,3927,2,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.081999999999906e-6,3366,3,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,9.809999999997251e-7,2970,4,null,null,null,null,null,null,null,null],[1.0119983926415443e-6,9.4199999999987e-7,2970,5,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0209999999999213e-6,3201,6,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0320000000002029e-6,3201,7,null,null,null,null,null,null,null,null],[1.1220108717679977e-6,1.0620000000000247e-6,3267,8,null,null,null,null,null,null,null,null],[1.152046024799347e-6,1.0520000000000841e-6,3234,9,null,null,null,null,null,null,null,null],[1.2020464055240154e-6,1.1419999999999833e-6,3432,10,null,null,null,null,null,null,null,null],[1.2630480341613293e-6,1.1719999999998051e-6,3531,11,null,null,null,null,null,null,null,null],[1.2119999155402184e-6,1.151999999999924e-6,3597,12,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.1819999999997458e-6,3729,13,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.1820000000001794e-6,3696,14,null,null,null,null,null,null,null,null],[1.2519885785877705e-6,1.2120000000000013e-6,3762,15,null,null,null,null,null,null,null,null],[1.2730015441775322e-6,1.2230000000002829e-6,3795,16,null,null,null,null,null,null,null,null],[1.3629905879497528e-6,1.3020000000003341e-6,3993,17,null,null,null,null,null,null,null,null],[1.3320241123437881e-6,1.313000000000182e-6,4026,18,null,null,null,null,null,null,null,null],[1.3530370779335499e-6,1.313000000000182e-6,4125,19,null,null,null,null,null,null,null,null],[1.402979250997305e-6,1.381999999999859e-6,4257,20,null,null,null,null,null,null,null,null],[1.4030374586582184e-6,1.3620000000004115e-6,4191,21,null,null,null,null,null,null,null,null],[1.4530378393828869e-6,1.4220000000000552e-6,4356,22,null,null,null,null,null,null,null,null],[1.4730030670762062e-6,1.4319999999999958e-6,4455,23,null,null,null,null,null,null,null,null],[1.4829565770924091e-6,1.4229999999999625e-6,4488,25,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5229999999998023e-6,4785,26,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5130000000002954e-6,4686,27,null,null,null,null,null,null,null,null],[1.642969436943531e-6,1.6330000000000164e-6,5016,28,null,null,null,null,null,null,null,null],[1.653039362281561e-6,1.6030000000001945e-6,5049,30,null,null,null,null,null,null,null,null],[1.634005457162857e-6,1.6029999999997609e-6,5082,31,null,null,null,null,null,null,null,null],[1.7039710655808449e-6,1.6629999999998382e-6,5247,33,null,null,null,null,null,null,null,null],[1.7829588614404202e-6,1.7339999999997635e-6,5544,35,null,null,null,null,null,null,null,null],[1.8529826775193214e-6,1.8140000000001558e-6,5544,36,null,null,null,null,null,null,null,null],[1.8430291675031185e-6,1.8039999999997815e-6,5643,38,null,null,null,null,null,null,null,null],[1.924054231494665e-6,1.8829999999998327e-6,5841,40,null,null,null,null,null,null,null,null],[1.9730068743228912e-6,1.9340000000003105e-6,6039,42,null,null,null,null,null,null,null,null],[2.003973349928856e-6,1.9840000000000135e-6,6336,44,null,null,null,null,null,null,null,null],[2.062995918095112e-6,2.0340000000001503e-6,6468,47,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.093999999999794e-6,6666,49,null,null,null,null,null,null,null,null],[2.173997927457094e-6,2.1240000000000495e-6,6798,52,null,null,null,null,null,null,null,null],[2.2840104065835476e-6,2.2139999999999486e-6,6963,54,null,null,null,null,null,null,null,null],[2.4239998310804367e-6,2.305000000000189e-6,7293,57,null,null,null,null,null,null,null,null],[2.394022885710001e-6,2.344000000000044e-6,7524,60,null,null,null,null,null,null,null,null],[2.5150366127490997e-6,2.4640000000001987e-6,7854,63,null,null,null,null,null,null,null,null],[2.574990503489971e-6,2.5150000000002427e-6,8184,66,null,null,null,null,null,null,null,null],[2.6249908842146397e-6,2.5850000000002607e-6,8283,69,null,null,null,null,null,null,null,null],[2.774992026388645e-6,2.745000000000178e-6,8613,73,null,null,null,null,null,null,null,null],[2.8249924071133137e-6,2.785000000000374e-6,8943,76,null,null,null,null,null,null,null,null],[2.94495839625597e-6,2.8949999999997207e-6,9240,80,null,null,null,null,null,null,null,null],[3.075983840972185e-6,3.035999999999664e-6,9735,84,null,null,null,null,null,null,null,null],[3.4259865060448647e-6,3.375999999999813e-6,10956,89,null,null,null,null,null,null,null,null],[3.4159747883677483e-6,3.3860000000001875e-6,10857,93,null,null,null,null,null,null,null,null],[3.5170232877135277e-6,3.4869999999999346e-6,11220,98,null,null,null,null,null,null,null,null],[3.627035766839981e-6,3.585999999999867e-6,11484,103,null,null,null,null,null,null,null,null],[3.7569552659988403e-6,3.706999999999929e-6,11979,108,null,null,null,null,null,null,null,null],[3.867025952786207e-6,3.817999999999617e-6,12309,113,null,null,null,null,null,null,null,null],[4.018016625195742e-6,3.957000000000179e-6,12804,119,null,null,null,null,null,null,null,null],[4.167028237134218e-6,4.127999999999944e-6,13365,125,null,null,null,null,null,null,null,null],[4.347995854914188e-6,4.289000000000202e-6,13959,131,null,null,null,null,null,null,null,null],[4.537985660135746e-6,4.478000000000034e-6,14421,138,null,null,null,null,null,null,null,null],[4.6289642341434956e-6,4.5890000000001555e-6,14883,144,null,null,null,null,null,null,null,null],[4.878966137766838e-6,4.858999999999853e-6,15642,152,null,null,null,null,null,null,null,null],[5.028967279940844e-6,5.0199999999996775e-6,16203,159,null,null,null,null,null,null,null,null],[5.299982149153948e-6,5.280000000000302e-6,17061,167,null,null,null,null,null,null,null,null],[5.540030542761087e-6,5.509999999999803e-6,17820,176,null,null,null,null,null,null,null,null],[5.770998541265726e-6,5.710999999999824e-6,18645,185,null,null,null,null,null,null,null,null],[6.002024747431278e-6,5.961000000000074e-6,19305,194,null,null,null,null,null,null,null,null],[6.27199187874794e-6,6.251999999999994e-6,20229,204,null,null,null,null,null,null,null,null],[6.491958629339933e-6,6.432000000000226e-6,20988,214,null,null,null,null,null,null,null,null],[6.893009413033724e-6,6.782999999999789e-6,21978,224,null,null,null,null,null,null,null,null],[7.072987500578165e-6,7.04299999999998e-6,23001,236,null,null,null,null,null,null,null,null],[7.354014087468386e-6,7.323000000000052e-6,23859,247,null,null,null,null,null,null,null,null],[7.784983608871698e-6,7.744999999999974e-6,25245,260,null,null,null,null,null,null,null,null],[8.164963219314814e-6,8.136000000000167e-6,26433,273,null,null,null,null,null,null,null,null],[8.466013241559267e-6,8.414999999999898e-6,27390,287,null,null,null,null,null,null,null,null],[8.847040589898825e-6,8.81699999999994e-6,28743,301,null,null,null,null,null,null,null,null],[9.206996764987707e-6,9.16700000000003e-6,29964,316,null,null,null,null,null,null,null,null],[9.6180010586977e-6,9.597999999999985e-6,31350,332,null,null,null,null,null,null,null,null],[1.0108982678502798e-5,1.0079000000000077e-5,32901,348,null,null,null,null,null,null,null,null],[1.0489951819181442e-5,1.0449999999999956e-5,34287,366,null,null,null,null,null,null,null,null],[1.0970979928970337e-5,1.0931000000000048e-5,35772,384,null,null,null,null,null,null,null,null],[1.1480995453894138e-5,1.1460999999999937e-5,37422,403,null,null,null,null,null,null,null,null],[1.203297870233655e-5,1.1982000000000225e-5,39204,424,null,null,null,null,null,null,null,null],[1.2612959835678339e-5,1.2563000000000157e-5,41085,445,null,null,null,null,null,null,null,null],[1.317501300945878e-5,1.3123999999999775e-5,42966,467,null,null,null,null,null,null,null,null],[1.379597233608365e-5,1.3776000000000066e-5,45144,490,null,null,null,null,null,null,null,null],[1.4497025404125452e-5,1.4427000000000016e-5,47157,515,null,null,null,null,null,null,null,null],[1.516897464171052e-5,1.5108000000000222e-5,49533,541,null,null,null,null,null,null,null,null],[1.583003904670477e-5,1.57899999999999e-5,51777,568,null,null,null,null,null,null,null,null],[1.661101123318076e-5,1.6561000000000006e-5,54318,596,null,null,null,null,null,null,null,null],[1.7373007722198963e-5,1.7342000000000052e-5,56793,626,null,null,null,null,null,null,null,null],[1.8163991626352072e-5,1.8153999999999827e-5,59499,657,null,null,null,null,null,null,null,null],[1.902499934658408e-5,1.902599999999968e-5,62601,690,null,null,null,null,null,null,null,null],[1.9957020413130522e-5,1.9937000000000253e-5,65538,725,null,null,null,null,null,null,null,null],[2.0938983652740717e-5,2.0889000000000064e-5,68673,761,null,null,null,null,null,null,null,null],[2.1881016436964273e-5,2.188100000000007e-5,71808,799,null,null,null,null,null,null,null,null],[2.296303864568472e-5,2.2943000000000095e-5,75405,839,null,null,null,null,null,null,null,null],[2.422597026452422e-5,2.4175999999999885e-5,79332,881,null,null,null,null,null,null,null,null],[2.527696778997779e-5,2.5278000000000106e-5,83061,925,null,null,null,null,null,null,null,null],[2.650899114087224e-5,2.6500000000000048e-5,86955,972,null,null,null,null,null,null,null,null],[2.779200440272689e-5,2.7782000000000067e-5,91146,1020,null,null,null,null,null,null,null,null],[2.9263959731906652e-5,2.9243999999999885e-5,96129,1071,null,null,null,null,null,null,null,null],[3.059697337448597e-5,3.057699999999995e-5,100848,1125,null,null,null,null,null,null,null,null],[3.2028998248279095e-5,3.2000000000000344e-5,105171,1181,null,null,null,null,null,null,null,null],[3.357295645400882e-5,3.357300000000028e-5,110220,1240,null,null,null,null,null,null,null,null],[5.012302426621318e-5,5.016400000000011e-5,165165,1302,null,null,null,null,null,null,null,null],[3.6999001167714596e-5,3.6998999999999366e-5,121572,1367,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.8732999999999997e-5,127281,1436,null,null,null,null,null,null,null,null],[4.057603655382991e-5,4.052499999999959e-5,133320,1507,null,null,null,null,null,null,null,null],[4.261900903657079e-5,4.2588999999999995e-5,139953,1583,null,null,null,null,null,null,null,null],[4.486303078010678e-5,4.482399999999973e-5,147642,1662,null,null,null,null,null,null,null,null],[4.767900099977851e-5,4.766999999999966e-5,155133,1745,null,null,null,null,null,null,null,null],[4.917202750220895e-5,4.9162000000000164e-5,161733,1832,null,null,null,null,null,null,null,null],[5.167600465938449e-5,5.165700000000009e-5,169884,1924,null,null,null,null,null,null,null,null],[5.425198469310999e-5,5.420199999999972e-5,178233,2020,null,null,null,null,null,null,null,null],[5.678599700331688e-5,5.674599999999988e-5,186780,2121,null,null,null,null,null,null,null,null],[5.9721001889556646e-5,5.970200000000002e-5,196284,2227,null,null,null,null,null,null,null,null],[6.253703031688929e-5,6.252699999999972e-5,205722,2339,null,null,null,null,null,null,null,null],[6.572302663698792e-5,6.572300000000017e-5,216249,2456,null,null,null,null,null,null,null,null],[6.883795140311122e-5,6.883900000000023e-5,226380,2579,null,null,null,null,null,null,null,null],[7.222499698400497e-5,7.222500000000041e-5,237600,2708,null,null,null,null,null,null,null,null],[6.405904423445463e-5,6.398899999999954e-5,210309,2843,null,null,null,null,null,null,null,null],[2.3743952624499798e-5,2.364399999999975e-5,77385,2985,null,null,null,null,null,null,null,null],[2.2141030058264732e-5,2.214200000000017e-5,72864,3134,null,null,null,null,null,null,null,null],[2.3212982341647148e-5,2.3213000000000227e-5,76428,3291,null,null,null,null,null,null,null,null],[2.4375971406698227e-5,2.436500000000015e-5,80223,3456,null,null,null,null,null,null,null,null],[2.5618006475269794e-5,2.561799999999982e-5,84315,3629,null,null,null,null,null,null,null,null],[2.8363021556288004e-5,2.837299999999994e-5,93423,3810,null,null,null,null,null,null,null,null],[3.0687020625919104e-5,3.067800000000013e-5,101013,4001,null,null,null,null,null,null,null,null],[3.1539006158709526e-5,3.154899999999964e-5,103950,4201,null,null,null,null,null,null,null,null],[3.268098225817084e-5,3.268100000000055e-5,107580,4411,null,null,null,null,null,null,null,null],[3.450398799031973e-5,3.4524000000000186e-5,113751,4631,null,null,null,null,null,null,null,null],[3.666797420009971e-5,3.669900000000028e-5,120879,4863,null,null,null,null,null,null,null,null],[3.8141035474836826e-5,3.816199999999957e-5,125697,5106,null,null,null,null,null,null,null,null],[4.0164974052459e-5,4.0186000000000215e-5,132363,5361,null,null,null,null,null,null,null,null],[4.172802437096834e-5,4.1748000000000306e-5,137544,5629,null,null,null,null,null,null,null,null],[4.3902022298425436e-5,4.394300000000028e-5,144804,5911,null,null,null,null,null,null,null,null],[4.723801976069808e-5,4.72789999999999e-5,155760,6207,null,null,null,null,null,null,null,null],[4.709698259830475e-5,4.712799999999958e-5,155232,6517,null,null,null,null,null,null,null,null],[4.9632973968982697e-5,4.966300000000014e-5,163680,6843,null,null,null,null,null,null,null,null],[5.179701838642359e-5,5.183700000000076e-5,170808,7185,null,null,null,null,null,null,null,null],[5.471199983730912e-5,5.477300000000015e-5,180477,7544,null,null,null,null,null,null,null,null],[5.782797234132886e-5,5.786900000000032e-5,190674,7921,null,null,null,null,null,null,null,null],[5.9600977692753077e-5,5.9662000000000256e-5,196581,8318,null,null,null,null,null,null,null,null],[6.358901737257838e-5,6.364899999999982e-5,209748,8733,null,null,null,null,null,null,null,null],[6.672402378171682e-5,6.678500000000063e-5,220011,9170,null,null,null,null,null,null,null,null],[7.018097676336765e-5,7.023199999999993e-5,231528,9629,null,null,null,null,null,null,null,null],[7.272500079125166e-5,7.278600000000003e-5,239844,10110,null,null,null,null,null,null,null,null],[7.671298226341605e-5,7.678399999999988e-5,252978,10616,null,null,null,null,null,null,null,null],[8.08810000307858e-5,8.094200000000051e-5,266772,11146,null,null,null,null,null,null,null,null],[8.372700540348887e-5,8.378699999999923e-5,276111,11704,null,null,null,null,null,null,null,null],[8.852500468492508e-5,8.859599999999981e-5,291918,12289,null,null,null,null,null,null,null,null],[9.31830145418644e-5,9.325499999999955e-5,307197,12903,null,null,null,null,null,null,null,null],[9.790301555767655e-5,9.796300000000039e-5,322872,13549,null,null,null,null,null,null,null,null],[1.0296201799064875e-4,1.0304300000000058e-4,339504,14226,null,null,null,null,null,null,null,null],[1.0808097431436181e-4,1.0815299999999972e-4,356367,14937,null,null,null,null,null,null,null,null],[1.1277996236458421e-4,1.1284100000000068e-4,371877,15684,null,null,null,null,null,null,null,null],[1.1815998004749417e-4,1.1822099999999995e-4,389532,16469,null,null,null,null,null,null,null,null],[1.2447196058928967e-4,1.2455300000000034e-4,410388,17292,null,null,null,null,null,null,null,null],[1.3103499077260494e-4,1.3111600000000057e-4,432003,18157,null,null,null,null,null,null,null,null],[1.383880153298378e-4,1.384699999999999e-4,456192,19065,null,null,null,null,null,null,null,null],[1.4522101264446974e-4,1.45292e-4,478665,20018,null,null,null,null,null,null,null,null],[1.5211402205750346e-4,1.52185e-4,501435,21019,null,null,null,null,null,null,null,null],[1.6178202349692583e-4,1.6183300000000012e-4,533214,22070,null,null,null,null,null,null,null,null],[1.624730066396296e-4,1.6253400000000064e-4,535557,23173,null,null,null,null,null,null,null,null],[1.7752096755430102e-4,1.7757299999999858e-4,585123,24332,null,null,null,null,null,null,null,null],[1.8194998847320676e-4,1.8201000000000155e-4,599709,25549,null,null,null,null,null,null,null,null],[1.907559926621616e-4,1.9081699999999938e-4,628815,26826,null,null,null,null,null,null,null,null],[2.0026403944939375e-4,2.003349999999994e-4,660066,28167,null,null,null,null,null,null,null,null],[2.1026202011853456e-4,2.1033399999999952e-4,693033,29576,null,null,null,null,null,null,null,null],[2.207320067100227e-4,2.2078400000000165e-4,727518,31054,null,null,null,null,null,null,null,null],[2.292379504069686e-4,2.2929899999999878e-4,755469,32607,null,null,null,null,null,null,null,null],[2.3785297526046634e-4,2.3793499999999988e-4,783915,34238,null,null,null,null,null,null,null,null],[2.4973496329039335e-4,2.49797999999999e-4,822987,35950,null,null,null,null,null,null,null,null],[2.6241905288770795e-4,2.624820000000014e-4,864798,37747,null,null,null,null,null,null,null,null],[2.7514301473274827e-4,2.751949999999989e-4,906675,39634,null,null,null,null,null,null,null,null],[3.041769959963858e-4,3.0426000000000064e-4,1002408,41616,null,null,null,null,null,null,null,null],[3.146069939248264e-4,3.146590000000001e-4,1036629,43697,null,null,null,null,null,null,null,null],[3.297440125606954e-4,3.298169999999996e-4,1086591,45882,null,null,null,null,null,null,null,null],[3.4820003202185035e-4,3.482620000000002e-4,1147212,48176,null,null,null,null,null,null,null,null],[3.6996096605435014e-4,3.700429999999987e-4,1219185,50585,null,null,null,null,null,null,null,null],[3.89526947401464e-4,3.895900000000004e-4,1283502,53114,null,null,null,null,null,null,null,null],[4.089929861947894e-4,4.0905599999999966e-4,1347555,55770,null,null,null,null,null,null,null,null],[4.279380082152784e-4,4.280120000000002e-4,1409991,58558,null,null,null,null,null,null,null,null],[4.677620017901063e-4,4.6793599999999866e-4,1543674,61486,null,null,null,null,null,null,null,null],[5.022970144636929e-4,5.023709999999997e-4,1654983,64561,null,null,null,null,null,null,null,null],[5.037890514358878e-4,5.038330000000004e-4,1659735,67789,null,null,null,null,null,null,null,null],[5.253000417724252e-4,5.253640000000004e-4,1730751,71178,null,null,null,null,null,null,null,null],[5.584919708780944e-4,5.585559999999982e-4,1839981,74737,null,null,null,null,null,null,null,null],[5.789300194010139e-4,5.79004000000001e-4,1907433,78474,null,null,null,null,null,null,null,null],[6.074730190448463e-4,6.075370000000017e-4,2001351,82398,null,null,null,null,null,null,null,null],[6.277309730648994e-4,6.277950000000004e-4,2068110,86518,null,null,null,null,null,null,null,null],[6.561529589816928e-4,6.562090000000013e-4,2161566,90843,null,null,null,null,null,null,null,null],[6.887339986860752e-4,6.88809999999998e-4,2268981,95386,null,null,null,null,null,null,null,null],[7.265550084412098e-4,7.266000000000009e-4,2393523,100155,null,null,null,null,null,null,null,null],[7.803859771229327e-4,7.804609999999997e-4,2570964,105163,null,null,null,null,null,null,null,null],[8.119750418700278e-4,8.120310000000013e-4,2674881,110421,null,null,null,null,null,null,null,null],[8.376420009881258e-4,8.37708999999999e-4,2759427,115942,null,null,null,null,null,null,null,null],[8.790089632384479e-4,8.790759999999995e-4,2895717,121739,null,null,null,null,null,null,null,null],[9.422269649803638e-4,9.42303999999998e-4,3104013,127826,null,null,null,null,null,null,null,null],[1.03670300450176e-3,1.0367810000000005e-3,3415170,134217,null,null,null,null,null,null,null,null],[1.0511210421100259e-3,1.0511979999999997e-3,3462690,140928,null,null,null,null,null,null,null,null],[1.0980780352838337e-3,1.0981559999999994e-3,3617757,147975,null,null,null,null,null,null,null,null],[1.1848200228996575e-3,1.1848780000000003e-3,3903108,155373,null,null,null,null,null,null,null,null],[1.2174200383014977e-3,1.2174999999999998e-3,4010424,163142,null,null,null,null,null,null,null,null],[1.316634996328503e-3,1.3166949999999997e-3,4337223,171299,null,null,null,null,null,null,null,null],[1.4903200208209455e-3,1.4903900000000012e-3,4909311,179864,null,null,null,null,null,null,null,null],[1.5586370136588812e-3,1.5587289999999948e-3,5134371,188858,null,null,null,null,null,null,null,null],[1.610192994121462e-3,1.6102750000000013e-3,5304123,198300,null,null,null,null,null,null,null,null],[1.714357000309974e-3,1.7144399999999976e-3,5647323,208215,null,null,null,null,null,null,null,null],[1.7925130086950958e-3,1.7925869999999983e-3,5904657,218626,null,null,null,null,null,null,null,null],[1.8997430452145636e-3,1.899816999999998e-3,6257955,229558,null,null,null,null,null,null,null,null],[2.0159700070507824e-3,2.0160349999999994e-3,6640623,241036,null,null,null,null,null,null,null,null],[2.134780981577933e-3,2.134857000000004e-3,7032102,253087,null,null,null,null,null,null,null,null],[2.1779019734822214e-3,2.1779680000000023e-3,7174035,265742,null,null,null,null,null,null,null,null],[2.3244559997692704e-3,2.324532000000004e-3,7656825,279029,null,null,null,null,null,null,null,null],[2.398522978182882e-3,2.398601e-3,7900794,292980,null,null,null,null,null,null,null,null],[2.5498250033706427e-3,2.549893999999997e-3,8399094,307629,null,null,null,null,null,null,null,null],[2.668687026016414e-3,2.668786999999999e-3,8790705,323011,null,null,null,null,null,null,null,null],[2.7719700010493398e-3,2.7720509999999976e-3,9130836,339161,null,null,null,null,null,null,null,null],[2.939321973826736e-3,2.9394040000000066e-3,9682134,356119,null,null,null,null,null,null,null,null],[3.0518610146827996e-3,3.051944000000001e-3,10052823,373925,null,null,null,null,null,null,null,null],[3.1971129938028753e-3,3.197196999999999e-3,10531191,392622,null,null,null,null,null,null,null,null],[3.3623609924688935e-3,3.3624659999999945e-3,11075559,412253,null,null,null,null,null,null,null,null],[3.5384090151637793e-3,3.538505999999997e-3,11655435,432866,null,null,null,null,null,null,null,null],[3.69921897072345e-3,3.6993169999999936e-3,12185085,454509,null,null,null,null,null,null,null,null],[3.8921490195207298e-3,3.8922379999999923e-3,12820533,477234,null,null,null,null,null,null,null,null],[4.083676030859351e-3,4.083767000000002e-3,13451427,501096,null,null,null,null,null,null,null,null],[4.291393968742341e-3,4.291496000000006e-3,14135649,526151,null,null,null,null,null,null,null,null],[4.5067850151099265e-3,4.506879000000005e-3,14845083,552458,null,null,null,null,null,null,null,null],[4.781036986969411e-3,4.781151999999997e-3,15748524,580081,null,null,null,null,null,null,null,null],[4.970660957042128e-3,4.970757999999992e-3,16373016,609086,null,null,null,null,null,null,null,null],[5.210368020925671e-3,5.210486e-3,17162574,639540,null,null,null,null,null,null,null,null],[5.471844982821494e-3,5.471965999999995e-3,18023874,671517,null,null,null,null,null,null,null,null],[5.742268986068666e-3,5.742382000000004e-3,18914643,705093,null,null,null,null,null,null,null,null],[6.031569966580719e-3,6.031654000000011e-3,19867419,740347,null,null,null,null,null,null,null,null],[6.337188999168575e-3,6.33729600000002e-3,20874150,777365,null,null,null,null,null,null,null,null],[6.658619036898017e-3,6.658737999999997e-3,21932955,816233,null,null,null,null,null,null,null,null],[6.9919200032018125e-3,6.992042000000004e-3,23030733,857045,null,null,null,null,null,null,null,null],[7.334538968279958e-3,7.334662999999991e-3,24159333,899897,null,null,null,null,null,null,null,null],[7.72284297272563e-3,7.722961e-3,25438347,944892,null,null,null,null,null,null,null,null],[8.110958035103977e-3,8.111067999999999e-3,26716602,992136,null,null,null,null,null,null,null,null],[8.519057999365032e-3,8.51919100000001e-3,28060857,1041743,null,null,null,null,null,null,null,null],[9.049738000612706e-3,9.049976000000015e-3,29809362,1093831,null,null,null,null,null,null,null,null],[9.382657997775823e-3,9.382789000000002e-3,30905325,1148522,null,null,null,null,null,null,null,null],[9.854088013526052e-3,9.854240999999986e-3,32458305,1205948,null,null,null,null,null,null,null,null],[1.0322000016458333e-2,1.0322137000000009e-2,33999405,1266246,null,null,null,null,null,null,null,null],[1.0891443002037704e-2,1.0891593999999977e-2,35875191,1329558,null,null,null,null,null,null,null,null],[1.1401584022678435e-2,1.1401719000000005e-2,37555386,1396036,null,null,null,null,null,null,null,null],[1.1973269982263446e-2,1.197342899999998e-2,39438564,1465838,null,null,null,null,null,null,null,null],[1.2587225995957851e-2,1.258737900000001e-2,41460771,1539130,null,null,null,null,null,null,null,null],[1.3198696018662304e-2,1.3198843999999987e-2,43474926,1616086,null,null,null,null,null,null,null,null],[1.3863054977264255e-2,1.3863228000000005e-2,45663222,1696890,null,null,null,null,null,null,null,null],[1.4567888982128352e-2,1.4568057999999995e-2,47984805,1781735,null,null,null,null,null,null,null,null],[1.5372741036117077e-2,1.5372965000000016e-2,50636091,1870822,null,null,null,null,null,null,null,null],[1.6047809971496463e-2,1.6047999000000035e-2,52859400,1964363,null,null,null,null,null,null,null,null],[1.68577489675954e-2,1.6857944999999985e-2,55527285,2062581,null,null,null,null,null,null,null,null],[1.7932684044353664e-2,1.7933048000000007e-2,59068845,2165710,null,null,null,null,null,null,null,null],[1.858933997573331e-2,1.858954800000001e-2,61230774,2273996,null,null,null,null,null,null,null,null],[1.9519192981533706e-2,1.951939800000002e-2,64293603,2387695,null,null,null,null,null,null,null,null],[2.0560456032399088e-2,2.056076899999998e-2,67723821,2507080,null,null,null,null,null,null,null,null],[2.1535142965149134e-2,2.153538300000002e-2,70933863,2632434,null,null,null,null,null,null,null,null],[2.2682933951728046e-2,2.268316199999998e-2,74714508,2764056,null,null,null,null,null,null,null,null],[2.3774439992848784e-2,2.377467600000005e-2,78309759,2902259,null,null,null,null,null,null,null,null],[2.4924944969825447e-2,2.4925191000000013e-2,82099380,3047372,null,null,null,null,null,null,null,null],[3.036867902847007e-2,3.0369775999999904e-2,100033296,3199740,null,null,null,null,null,null,null,null],[3.0574041011277586e-2,3.0574417999999937e-2,100707057,3359727,null,null,null,null,null,null,null,null],[3.1890206038951874e-2,3.189054300000005e-2,105041904,3527714,null,null,null,null,null,null,null,null],[3.3934498031158e-2,3.3931794000000015e-2,111776115,3704100,null,null,null,null,null,null,null,null],[3.533452999545261e-2,3.533499200000001e-2,116387502,3889305,null,null,null,null,null,null,null,null],[3.685817099176347e-2,3.6858515000000036e-2,121405614,4083770,null,null,null,null,null,null,null,null],[3.8699414988514036e-2,3.8699821999999995e-2,127470453,4287958,null,null,null,null,null,null,null,null],[4.083123098826036e-2,4.083161499999999e-2,134492259,4502356,null,null,null,null,null,null,null,null],[4.337995400419459e-2,4.338044699999999e-2,142887855,4727474,null,null,null,null,null,null,null,null],[4.5395844033919275e-2,4.539630100000003e-2,149527587,4963848,null,null,null,null,null,null,null,null],[4.77365399710834e-2,4.773458999999991e-2,157237839,5212040,null,null,null,null,null,null,null,null],[4.9544300010893494e-2,4.954481900000007e-2,163191996,5472642,null,null,null,null,null,null,null,null],[5.2063490031287074e-2,5.2063996e-2,171489747,5746274,null,null,null,null,null,null,null,null],[5.445809499360621e-2,5.4458600000000024e-2,179377110,6033588,null,null,null,null,null,null,null,null],[5.78279200126417e-2,5.782849899999998e-2,190476957,6335268,null,null,null,null,null,null,null,null],[6.084545800695196e-2,6.0846069999999974e-2,200416557,6652031,null,null,null,null,null,null,null,null],[6.384176603751257e-2,6.384235999999999e-2,210285636,6984633,null,null,null,null,null,null,null,null],[6.660954799735919e-2,6.661014200000004e-2,219402183,7333864,null,null,null,null,null,null,null,null],[6.95765310083516e-2,6.95771380000001e-2,229174968,7700558,null,null,null,null,null,null,null,null],[7.366417499724776e-2,7.36648820000001e-2,242639331,8085585,null,null,null,null,null,null,null,null],[7.751908397767693e-2,7.751557099999995e-2,255336675,8489865,null,null,null,null,null,null,null,null],[8.111650496721268e-2,8.111720600000005e-2,267185787,8914358,null,null,null,null,null,null,null,null],[8.518016198650002e-2,8.51809750000001e-2,280571346,9360076,null,null,null,null,null,null,null,null],[8.914823300438002e-2,8.914908500000007e-2,293641656,9828080,null,null,null,null,null,null,null,null],[9.34192180284299e-2,9.342002199999988e-2,307709061,10319484,null,null,null,null,null,null,null,null],[9.867934900103137e-2,9.868026100000016e-2,325035711,10835458,null,null,null,null,null,null,null,null],[0.10399009298998863,0.10399100500000014,342528120,11377231,null,null,null,null,null,null,null,null],[0.10917620599502698,0.10917719600000009,359610702,11946092,null,null,null,null,null,null,null,null],[0.11496545298723504,0.11496801899999998,378685263,12543397,null,null,null,null,null,null,null,null],[0.11922384501667693,0.11922490899999971,392705874,13170567,null,null,null,null,null,null,null,null],[0.1258279909961857,0.12582455700000006,414458682,13829095,null,null,null,null,null,null,null,null],[0.1320721060037613,0.13207447000000005,435030156,14520550,null,null,null,null,null,null,null,null],[0.1393518340191804,0.13935448100000025,459008979,15246578,null,null,null,null,null,null,null,null],[0.14501006697537377,0.14501131299999992,477641736,16008907,null,null,null,null,null,null,null,null],[0.1533388089737855,0.15334022800000024,505075692,16809352,null,null,null,null,null,null,null,null],[0.16058630601037294,0.16059004199999993,528955878,17649820,null,null,null,null,null,null,null,null],[0.1696129809715785,0.1696153220000003,558683004,18532311,null,null,null,null,null,null,null,null],[0.1769879759522155,0.17698957999999987,582972258,19458926,null,null,null,null,null,null,null,null],[0.1861679860157892,0.18617129200000004,613215768,20431872,null,null,null,null,null,null,null,null],[0.19564638298470527,0.1956496689999998,644435913,21453466,null,null,null,null,null,null,null,null],[0.2049338149954565,0.20493568599999978,675022161,22526139,null,null,null,null,null,null,null,null],[0.214223189977929,0.2142251599999998,705620025,23652446,null,null,null,null,null,null,null,null],[0.22455388703383505,0.22455564300000042,739646292,24835069,null,null,null,null,null,null,null,null],[0.23659971298184246,0.2365938639999996,779324502,26076822,null,null,null,null,null,null,null,null]],"reportName":"fib/1","reportNumber":0,"reportOutliers":{"highMild":0,"highSevere":1,"lowMild":0,"lowSevere":0,"samplesSeen":44}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.4639016642762622e-10,"confIntUDX":2.1670345260269087e-10},"estPoint":2.4729011445781207e-8},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.36557582003817074},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.5776555757917e-10,"confIntUDX":2.961541932491451e-10},"estPoint":2.4944687628466725e-8},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.759173441256622e-5,"confIntUDX":7.327400413269949e-5},"estPoint":-5.027601299366412e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":4.522295681896882e-5,"confIntUDX":1.844665932593248e-4},"estPoint":0.9992739833517263},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.656665140957106e-11,"confIntUDX":5.290221906756506e-11},"estPoint":5.812261496408389e-10}},"reportKDEs":[{"kdePDF":[-25.033060231416904,471.87721293456934,7934.124858778293,127930.45319806116,1412061.346520924,1.1077764392941294e7,6.233129370328541e7,2.5629713032143623e8,7.899823653082111e8,1.8815655400092204e9,3.564033530117799e9,5.481770206663521e9,6.927359738730565e9,7.22527424514244e9,6.215560201028286e9,4.452052732677399e9,2.8457586379722295e9,1.9348454192488823e9,1.594267022072115e9,1.4542940473538778e9,1.3030050633789275e9,1.1043340056067436e9,9.358100677366215e8,8.962853451772625e8,9.277135991558222e8,8.454140099618506e8,5.956708689054052e8,3.2603919686349016e8,1.970481137240725e8,2.4362745682386443e8,3.761964358371315e8,4.456346929150531e8,3.709349714806778e8,2.1477966976330283e8,8.6414559139467e7,2.415627063543913e7,4691436.321117351,633100.9554126489,59295.240049212116,3914.150593529916,128.95819955401882,49.00821402111042,-41.08150919938445,38.994140897648805,-36.85440275838137,34.776604804716676,-32.7551219528178,30.7895343529821,-28.880379979720317,27.027923444048145,-25.23164348532409,23.490039575118793,-21.80062823949053,20.16005965210942,-18.56417906151408,17.00817320999244,-15.486611470234786,13.993533487949298,-12.522444599434126,11.066331973169167,-9.617618705586521,8.16810480705756,-6.708881546468919,5.230188726646448,-3.721286732949173,2.1702230932883806,-0.5636264266692081,-1.1136063031004921,2.878645595380913,-4.7511287464240395,6.753642337162726,-8.912228654612539,11.256973450316835,-13.822549250503599,16.648714781815666,-19.780532251611056,23.26811658942905,-27.16346056925755,31.646960137924637,-30.903148116382834,216.75293522649707,3817.6686415191775,59401.33469750879,632984.1762799734,4691564.901964832,2.41561229352846e7,8.641453588106756e7,2.14775455086061e8,3.708719526340991e8,4.4494207872407115e8,3.708719553903246e8,2.147754495359412e8,8.64145443013773e7,2.4156111527951457e7,4691579.456550821,632966.2670567362,59422.85766551803,3792.2179403069385,246.6368317886657,-59.671629616678445,257.59207046422495,4153.781963386106,67514.4638789105,759752.145457279,6084446.254522076,3.4931623052918054e7,1.4549490574895728e8,4.465698725648631e8,1.0310107440369058e9,1.8380744207237566e9,2.610263940880715e9,3.0471790187068405e9,3.004599623047369e9,2.583510303117147e9,2.0691896182992766e9,1.6912978534152453e9,1.4185357764903119e9,1.0896734779131424e9,6.82837669371261e8,3.2673895038146025e8,1.153890368389826e8,2.9488744496974308e7,5384323.547791064,696209.8209623827,63433.20502040137,4013.7537630110273,199.6779084861687,-0.6058604912350835],"kdeType":"time","kdeValues":[2.414797231110446e-8,2.4160956617807207e-8,2.417394092450995e-8,2.4186925231212694e-8,2.419990953791544e-8,2.4212893844618184e-8,2.4225878151320926e-8,2.423886245802367e-8,2.4251846764726417e-8,2.4264831071429162e-8,2.4277815378131904e-8,2.429079968483465e-8,2.4303783991537394e-8,2.4316768298240136e-8,2.432975260494288e-8,2.4342736911645627e-8,2.4355721218348372e-8,2.4368705525051114e-8,2.438168983175386e-8,2.4394674138456604e-8,2.440765844515935e-8,2.442064275186209e-8,2.4433627058564837e-8,2.4446611365267582e-8,2.4459595671970324e-8,2.447257997867307e-8,2.4485564285375814e-8,2.449854859207856e-8,2.45115328987813e-8,2.4524517205484047e-8,2.4537501512186792e-8,2.4550485818889534e-8,2.456347012559228e-8,2.4576454432295024e-8,2.458943873899777e-8,2.460242304570051e-8,2.4615407352403257e-8,2.4628391659106002e-8,2.4641375965808747e-8,2.465436027251149e-8,2.4667344579214234e-8,2.468032888591698e-8,2.469331319261972e-8,2.4706297499322466e-8,2.4719281806025212e-8,2.4732266112727957e-8,2.47452504194307e-8,2.4758234726133444e-8,2.477121903283619e-8,2.4784203339538935e-8,2.4797187646241676e-8,2.4810171952944422e-8,2.4823156259647167e-8,2.483614056634991e-8,2.4849124873052654e-8,2.48621091797554e-8,2.4875093486458145e-8,2.4888077793160886e-8,2.4901062099863632e-8,2.4914046406566377e-8,2.492703071326912e-8,2.4940015019971864e-8,2.495299932667461e-8,2.4965983633377355e-8,2.4978967940080096e-8,2.4991952246782842e-8,2.5004936553485587e-8,2.5017920860188332e-8,2.5030905166891074e-8,2.504388947359382e-8,2.5056873780296565e-8,2.5069858086999306e-8,2.5082842393702052e-8,2.5095826700404797e-8,2.5108811007107542e-8,2.5121795313810284e-8,2.513477962051303e-8,2.5147763927215775e-8,2.516074823391852e-8,2.5173732540621262e-8,2.5186716847324007e-8,2.5199701154026752e-8,2.5212685460729494e-8,2.522566976743224e-8,2.5238654074134985e-8,2.525163838083773e-8,2.5264622687540472e-8,2.5277606994243217e-8,2.5290591300945962e-8,2.5303575607648704e-8,2.531655991435145e-8,2.5329544221054195e-8,2.534252852775694e-8,2.5355512834459682e-8,2.5368497141162427e-8,2.5381481447865172e-8,2.5394465754567917e-8,2.540745006127066e-8,2.5420434367973404e-8,2.543341867467615e-8,2.544640298137889e-8,2.5459387288081637e-8,2.5472371594784382e-8,2.5485355901487127e-8,2.549834020818987e-8,2.5511324514892614e-8,2.552430882159536e-8,2.5537293128298105e-8,2.5550277435000847e-8,2.5563261741703592e-8,2.5576246048406337e-8,2.558923035510908e-8,2.5602214661811824e-8,2.561519896851457e-8,2.5628183275217315e-8,2.5641167581920057e-8,2.5654151888622802e-8,2.5667136195325547e-8,2.568012050202829e-8,2.5693104808731034e-8,2.570608911543378e-8,2.5719073422136525e-8,2.5732057728839267e-8,2.5745042035542012e-8,2.5758026342244757e-8,2.5771010648947503e-8,2.5783994955650244e-8,2.579697926235299e-8]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.1220108717679977e-6,7.109999993204497e-7,1683,1,null,null,null,null,null,null,null,null],[4.2997999116778374e-7,3.8100000043783666e-7,1221,2,null,null,null,null,null,null,null,null],[3.6100391298532486e-7,3.4000000059819513e-7,1056,3,null,null,null,null,null,null,null,null],[3.600143827497959e-7,3.5099999973198237e-7,1089,4,null,null,null,null,null,null,null,null],[3.8102734833955765e-7,3.49999999649242e-7,1056,5,null,null,null,null,null,null,null,null],[3.909808583557606e-7,3.8099999954965824e-7,1221,6,null,null,null,null,null,null,null,null],[4.200264811515808e-7,4.1100000025551253e-7,1287,7,null,null,null,null,null,null,null,null],[4.4103944674134254e-7,4.3000000005122274e-7,1386,8,null,null,null,null,null,null,null,null],[4.909816198050976e-7,4.709999998908643e-7,1518,9,null,null,null,null,null,null,null,null],[5.00993337482214e-7,4.809999998300896e-7,1617,10,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.30999999526216e-7,1716,11,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.410000003536197e-7,1716,12,null,null,null,null,null,null,null,null],[6.00994098931551e-7,5.710000001712956e-7,1815,13,null,null,null,null,null,null,null,null],[6.210175342857838e-7,6.009999999889715e-7,1947,14,null,null,null,null,null,null,null,null],[6.509944796562195e-7,6.41000000634051e-7,1980,15,null,null,null,null,null,null,null,null],[6.710179150104523e-7,6.509999996850979e-7,2046,16,null,null,null,null,null,null,null,null],[6.909831427037716e-7,6.719999996462889e-7,2145,17,null,null,null,null,null,null,null,null],[7.310300134122372e-7,7.120000002913685e-7,2310,18,null,null,null,null,null,null,null,null],[7.709604687988758e-7,7.420000001090443e-7,2376,19,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.719999999267202e-7,2442,20,null,null,null,null,null,null,null,null],[8.119968697428703e-7,7.819999998659455e-7,2574,21,null,null,null,null,null,null,null,null],[8.320203050971031e-7,8.219999996228466e-7,11649,22,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.21999999903278e-7,3003,23,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.020000000248274e-7,2904,25,null,null,null,null,null,null,null,null],[9.710201993584633e-7,9.509999996382135e-7,3069,26,null,null,null,null,null,null,null,null],[9.720097295939922e-7,9.619999996601791e-7,3102,27,null,null,null,null,null,null,null,null],[1.001986674964428e-6,9.91999999477855e-7,3168,28,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0420000000621599e-6,3366,30,null,null,null,null,null,null,null,null],[1.0919757187366486e-6,1.0619999999406105e-6,3465,31,null,null,null,null,null,null,null,null],[1.133012119680643e-6,1.1219999995759622e-6,3630,33,null,null,null,null,null,null,null,null],[1.192034687846899e-6,1.1820000000994924e-6,3828,35,null,null,null,null,null,null,null,null],[1.2219534255564213e-6,1.2129999999999086e-6,3927,36,null,null,null,null,null,null,null,null],[1.292035449296236e-6,1.2730000005234388e-6,4158,38,null,null,null,null,null,null,null,null],[1.333013642579317e-6,1.31300000028034e-6,4290,40,null,null,null,null,null,null,null,null],[1.3830140233039856e-6,1.3629999999764664e-6,4488,42,null,null,null,null,null,null,null,null],[1.4430261217057705e-6,1.4330000004392218e-6,4653,44,null,null,null,null,null,null,null,null],[1.5230034478008747e-6,1.5119999998702838e-6,4917,47,null,null,null,null,null,null,null,null],[1.5730038285255432e-6,1.5629999996491506e-6,5115,49,null,null,null,null,null,null,null,null],[1.6729463823139668e-6,1.6430000000511313e-6,5412,52,null,null,null,null,null,null,null,null],[1.7130514606833458e-6,1.7030000005746615e-6,5544,54,null,null,null,null,null,null,null,null],[1.8139835447072983e-6,1.7930000000276891e-6,5841,57,null,null,null,null,null,null,null,null],[1.894019078463316e-6,1.8829999994807167e-6,6138,60,null,null,null,null,null,null,null,null],[1.9639846868813038e-6,1.952999999943472e-6,6369,63,null,null,null,null,null,null,null,null],[2.0440202206373215e-6,2.024000000488968e-6,6633,66,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.123999999881221e-6,6930,69,null,null,null,null,null,null,null,null],[2.263986971229315e-6,2.2340000001008775e-6,7293,73,null,null,null,null,null,null,null,null],[2.334010787308216e-6,2.31499999969742e-6,7590,76,null,null,null,null,null,null,null,null],[2.425047568976879e-6,2.4149999999778515e-6,7920,80,null,null,null,null,null,null,null,null],[2.555025275796652e-6,2.5350000001367334e-6,8283,84,null,null,null,null,null,null,null,null],[3.0249939300119877e-6,3.0060000000275977e-6,9900,89,null,null,null,null,null,null,null,null],[2.855027560144663e-6,2.835000000089849e-6,9306,93,null,null,null,null,null,null,null,null],[2.9549701139330864e-6,2.9450000003095056e-6,9603,98,null,null,null,null,null,null,null,null],[3.105960786342621e-6,3.0860000004295784e-6,10098,103,null,null,null,null,null,null,null,null],[3.25602013617754e-6,3.2259999995787325e-6,10560,108,null,null,null,null,null,null,null,null],[3.3659744076430798e-6,3.356000000565018e-6,10989,113,null,null,null,null,null,null,null,null],[3.5470002330839634e-6,3.5369999995538137e-6,11583,119,null,null,null,null,null,null,null,null],[3.69601184502244e-6,3.6760000003965843e-6,12078,125,null,null,null,null,null,null,null,null],[3.857014235109091e-6,3.8469999994461546e-6,12639,131,null,null,null,null,null,null,null,null],[4.058005288243294e-6,4.047000000007017e-6,13266,138,null,null,null,null,null,null,null,null],[4.217028617858887e-6,4.208000000005541e-6,13794,144,null,null,null,null,null,null,null,null],[4.447996616363525e-6,4.437999999495901e-6,14553,152,null,null,null,null,null,null,null,null],[4.667963366955519e-6,4.649000000078729e-6,15246,159,null,null,null,null,null,null,null,null],[4.869012627750635e-6,4.849000000639592e-6,15906,167,null,null,null,null,null,null,null,null],[5.139969289302826e-6,5.128999999826078e-6,16830,176,null,null,null,null,null,null,null,null],[5.390029400587082e-6,5.359999999399179e-6,17622,185,null,null,null,null,null,null,null,null],[5.620007868856192e-6,5.601000000687861e-6,18414,194,null,null,null,null,null,null,null,null],[5.901034455746412e-6,5.880999999874348e-6,19305,204,null,null,null,null,null,null,null,null],[6.192014552652836e-6,6.1719999999709785e-6,20229,214,null,null,null,null,null,null,null,null],[6.471993401646614e-6,6.461999999984869e-6,21219,224,null,null,null,null,null,null,null,null],[6.793008651584387e-6,6.783000000787354e-6,22242,236,null,null,null,null,null,null,null,null],[7.104012183845043e-6,7.0939999998742564e-6,23265,247,null,null,null,null,null,null,null,null],[7.483991794288158e-6,7.474000000229353e-6,24519,260,null,null,null,null,null,null,null,null],[7.824040949344635e-6,7.814000000827548e-6,25674,273,null,null,null,null,null,null,null,null],[8.20501009002328e-6,8.195000000377206e-6,26928,287,null,null,null,null,null,null,null,null],[8.616014383733273e-6,8.60599999974454e-6,28248,301,null,null,null,null,null,null,null,null],[9.01601742953062e-6,9.007000000060827e-6,29568,316,null,null,null,null,null,null,null,null],[9.457988198846579e-6,9.448000000134016e-6,31053,332,null,null,null,null,null,null,null,null],[9.91899287328124e-6,9.908000000002914e-6,32604,348,null,null,null,null,null,null,null,null],[1.0409974493086338e-5,1.039899999977223e-5,34188,366,null,null,null,null,null,null,null,null],[1.0910967830568552e-5,1.089999999948077e-5,35838,384,null,null,null,null,null,null,null,null],[1.1452008038759232e-5,1.1431999999977904e-5,37587,403,null,null,null,null,null,null,null,null],[1.2033036909997463e-5,1.202300000002765e-5,39567,424,null,null,null,null,null,null,null,null],[1.2614007573574781e-5,1.2594000000198946e-5,41448,445,null,null,null,null,null,null,null,null],[1.3204000424593687e-5,1.3193999999216999e-5,43395,467,null,null,null,null,null,null,null,null],[1.3855984434485435e-5,1.3845999999873015e-5,45573,490,null,null,null,null,null,null,null,null],[1.4556979294866323e-5,1.4558000000164384e-5,47850,515,null,null,null,null,null,null,null,null],[1.5277997590601444e-5,1.5268999999484834e-5,50193,541,null,null,null,null,null,null,null,null],[1.602998236194253e-5,1.6010000000399316e-5,52701,568,null,null,null,null,null,null,null,null],[1.6811012756079435e-5,1.6790999999294343e-5,55242,596,null,null,null,null,null,null,null,null],[1.7642974853515625e-5,1.7642999999623044e-5,58047,626,null,null,null,null,null,null,null,null],[1.848494866862893e-5,1.848500000001252e-5,60786,657,null,null,null,null,null,null,null,null],[1.942599192261696e-5,1.9426000000599686e-5,63921,690,null,null,null,null,null,null,null,null],[2.0388048142194748e-5,2.037800000032064e-5,67089,725,null,null,null,null,null,null,null,null],[2.138002309948206e-5,2.137999999973772e-5,70356,761,null,null,null,null,null,null,null,null],[2.2432010155171156e-5,2.2431999999739105e-5,73821,799,null,null,null,null,null,null,null,null],[2.3544009309262037e-5,2.3533999999436617e-5,77451,839,null,null,null,null,null,null,null,null],[2.4726963602006435e-5,2.4726999999558075e-5,81378,881,null,null,null,null,null,null,null,null],[2.5938032194972038e-5,2.5928999999536018e-5,85371,925,null,null,null,null,null,null,null,null],[2.7260975912213326e-5,2.7260999999612068e-5,89727,972,null,null,null,null,null,null,null,null],[2.8593000024557114e-5,2.8593999999770858e-5,94149,1020,null,null,null,null,null,null,null,null],[3.00369574688375e-5,3.00269999993219e-5,98835,1071,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.154900000001959e-5,103851,1125,null,null,null,null,null,null,null,null],[3.3070973586291075e-5,3.307199999991184e-5,108900,1181,null,null,null,null,null,null,null,null],[3.471499076113105e-5,3.4705000000023745e-5,114246,1240,null,null,null,null,null,null,null,null],[3.642798401415348e-5,3.642799999958868e-5,119889,1302,null,null,null,null,null,null,null,null],[3.823102451860905e-5,3.823199999963833e-5,125895,1367,null,null,null,null,null,null,null,null],[4.01550205424428e-5,4.015499999976413e-5,132165,1436,null,null,null,null,null,null,null,null],[4.2118015699088573e-5,4.21079999997076e-5,138666,1507,null,null,null,null,null,null,null,null],[4.424300277605653e-5,4.424299999961079e-5,145662,1583,null,null,null,null,null,null,null,null],[4.863098729401827e-5,4.8641000000237966e-5,160215,1662,null,null,null,null,null,null,null,null],[4.875101149082184e-5,4.8750999999569444e-5,160545,1745,null,null,null,null,null,null,null,null],[5.116499960422516e-5,5.11760000003747e-5,168498,1832,null,null,null,null,null,null,null,null],[5.370000144466758e-5,5.370099999968403e-5,176847,1924,null,null,null,null,null,null,null,null],[5.636498099192977e-5,5.636599999991887e-5,185658,2020,null,null,null,null,null,null,null,null],[5.9180951211601496e-5,5.918000000004753e-5,194898,2121,null,null,null,null,null,null,null,null],[6.214599125087261e-5,6.214600000031822e-5,204633,2227,null,null,null,null,null,null,null,null],[6.526097422465682e-5,6.525199999973808e-5,214896,2339,null,null,null,null,null,null,null,null],[6.850797217339277e-5,6.849800000008344e-5,225621,2456,null,null,null,null,null,null,null,null],[7.190497126430273e-5,7.191500000036655e-5,236808,2579,null,null,null,null,null,null,null,null],[7.549097063019872e-5,7.550100000042193e-5,248688,2708,null,null,null,null,null,null,null,null],[7.924699457362294e-5,7.925899999960961e-5,261030,2843,null,null,null,null,null,null,null,null],[8.32049991004169e-5,8.320600000022438e-5,274032,2985,null,null,null,null,null,null,null,null],[8.733296999707818e-5,8.733399999982794e-5,287595,3134,null,null,null,null,null,null,null,null],[9.17009892873466e-5,9.170199999974926e-5,301983,3291,null,null,null,null,null,null,null,null],[9.627902181819081e-5,9.628000000017067e-5,317130,3456,null,null,null,null,null,null,null,null],[1.0111898882314563e-4,1.0111899999998286e-4,333036,3629,null,null,null,null,null,null,null,null],[1.0612799087539315e-4,1.061289999997328e-4,349569,3810,null,null,null,null,null,null,null,null],[1.1144799645990133e-4,1.1145900000020248e-4,367059,4001,null,null,null,null,null,null,null,null],[1.1698796879500151e-4,1.1698899999945667e-4,385341,4201,null,null,null,null,null,null,null,null],[1.2283900287002325e-4,1.2285000000034074e-4,404646,4411,null,null,null,null,null,null,null,null],[1.2893998064100742e-4,1.2897100000053285e-4,424776,4631,null,null,null,null,null,null,null,null],[1.3539200881496072e-4,1.3542299999969032e-4,446127,4863,null,null,null,null,null,null,null,null],[1.4218600699678063e-4,1.4220699999967223e-4,468468,5106,null,null,null,null,null,null,null,null],[1.4924799324944615e-4,1.4928900000032996e-4,491700,5361,null,null,null,null,null,null,null,null],[1.56712019816041e-4,1.5675399999981465e-4,516318,5629,null,null,null,null,null,null,null,null],[1.6456696903333068e-4,1.6459900000054262e-4,542223,5911,null,null,null,null,null,null,null,null],[1.7280294559895992e-4,1.7284299999964503e-4,569382,6207,null,null,null,null,null,null,null,null],[1.8137803999707103e-4,1.8143000000048204e-4,597729,6517,null,null,null,null,null,null,null,null],[1.9045500084757805e-4,1.9049700000017822e-4,627528,6843,null,null,null,null,null,null,null,null],[1.999730011448264e-4,2.000149999998868e-4,659010,7185,null,null,null,null,null,null,null,null],[2.1001201821491122e-4,2.1006299999992706e-4,692043,7544,null,null,null,null,null,null,null,null],[2.2042100317776203e-4,2.2047299999972125e-4,726363,7921,null,null,null,null,null,null,null,null],[2.338959602639079e-4,2.339380000000446e-4,770616,8318,null,null,null,null,null,null,null,null],[2.4533801479265094e-4,2.4538999999990097e-4,808500,8733,null,null,null,null,null,null,null,null],[2.5517598260194063e-4,2.5523800000026853e-4,840840,9170,null,null,null,null,null,null,null,null],[2.6803999207913876e-4,2.6809100000058095e-4,883179,9629,null,null,null,null,null,null,null,null],[2.814849722199142e-4,2.815370000002204e-4,927564,10110,null,null,null,null,null,null,null,null],[2.9551098123192787e-4,2.955729999998269e-4,973797,10616,null,null,null,null,null,null,null,null],[3.097070148214698e-4,3.0974999999955344e-4,1020459,11146,null,null,null,null,null,null,null,null],[3.240240039303899e-4,3.2408700000008395e-4,1067715,11704,null,null,null,null,null,null,null,null],[3.404549788683653e-4,3.4050699999976786e-4,1121802,12289,null,null,null,null,null,null,null,null],[3.5735598066821694e-4,3.574100000003355e-4,1177407,12903,null,null,null,null,null,null,null,null],[3.7583097582682967e-4,3.759030000001218e-4,1238391,13549,null,null,null,null,null,null,null,null],[4.032220458611846e-4,4.032949999999147e-4,1328646,14226,null,null,null,null,null,null,null,null],[4.35382011346519e-4,4.355760000001041e-4,1438371,14937,null,null,null,null,null,null,null,null],[4.7347298823297024e-4,4.735670000002301e-4,1560075,15684,null,null,null,null,null,null,null,null],[4.711890360340476e-4,4.7125299999972725e-4,1552485,16469,null,null,null,null,null,null,null,null],[4.926690016873181e-4,4.927229999998062e-4,1623171,17292,null,null,null,null,null,null,null,null],[5.16803003847599e-4,5.168879999999376e-4,1702668,18157,null,null,null,null,null,null,null,null],[5.425310228019953e-4,5.426159999997182e-4,1787511,19065,null,null,null,null,null,null,null,null],[5.588220083154738e-4,5.588660000004353e-4,1841103,20018,null,null,null,null,null,null,null,null],[5.818450008518994e-4,5.819099999992972e-4,1916970,21019,null,null,null,null,null,null,null,null],[6.157280295155942e-4,6.157829999997588e-4,2028411,22070,null,null,null,null,null,null,null,null],[6.603809888474643e-4,6.604570000003918e-4,2175657,23173,null,null,null,null,null,null,null,null],[6.939350278116763e-4,6.939990000001117e-4,2286174,24332,null,null,null,null,null,null,null,null],[7.108759600669146e-4,7.109410000003535e-4,2341944,25549,null,null,null,null,null,null,null,null],[7.437770254909992e-4,7.438530000003496e-4,2450349,26826,null,null,null,null,null,null,null,null],[7.80866015702486e-4,7.809319999996234e-4,2572548,28167,null,null,null,null,null,null,null,null],[8.356189937330782e-4,8.356950000001362e-4,2752893,29576,null,null,null,null,null,null,null,null],[8.850510348565876e-4,8.851380000001186e-4,2915715,31054,null,null,null,null,null,null,null,null],[9.072209941223264e-4,9.072890000005884e-4,2988711,32607,null,null,null,null,null,null,null,null],[9.894350077956915e-4,9.895430000002037e-4,3259608,34238,null,null,null,null,null,null,null,null],[1.0583139955997467e-3,1.0583809999999971e-3,3487011,35950,null,null,null,null,null,null,null,null],[1.0933089652098715e-3,1.0934069999999352e-3,3601818,37747,null,null,null,null,null,null,null,null],[1.1605540057644248e-3,1.1611340000001746e-3,3830871,39634,null,null,null,null,null,null,null,null],[1.2148360256105661e-3,1.214885000000443e-3,4001679,41616,null,null,null,null,null,null,null,null],[1.2682650121860206e-3,1.2680239999998122e-3,4176942,43697,null,null,null,null,null,null,null,null],[1.3147220015525818e-3,1.3147820000005694e-3,4330887,45882,null,null,null,null,null,null,null,null],[1.3914559967815876e-3,1.3915060000000423e-3,4583370,48176,null,null,null,null,null,null,null,null],[1.449362956918776e-3,1.4494540000002942e-3,4774506,50585,null,null,null,null,null,null,null,null],[1.495618955232203e-3,1.4956909999996881e-3,4926735,53114,null,null,null,null,null,null,null,null],[1.5599590260535479e-3,1.5600509999993406e-3,5138793,55770,null,null,null,null,null,null,null,null],[1.6359509900212288e-3,1.6360440000005028e-3,5389098,58558,null,null,null,null,null,null,null,null],[1.717503007967025e-3,1.7175859999998266e-3,5657718,61486,null,null,null,null,null,null,null,null],[1.8506619962863624e-3,1.8507449999995984e-3,6096321,64561,null,null,null,null,null,null,null,null],[1.9595249905250967e-3,1.95962999999999e-3,6454899,67789,null,null,null,null,null,null,null,null],[2.038571983575821e-3,2.0386470000000045e-3,6715269,71178,null,null,null,null,null,null,null,null],[2.1695360192097723e-3,2.1696219999993716e-3,7146579,74737,null,null,null,null,null,null,null,null],[2.2472109994851053e-3,2.2472979999994536e-3,7402461,78474,null,null,null,null,null,null,null,null],[2.3032159660942852e-3,2.303323000000468e-3,7586997,82398,null,null,null,null,null,null,null,null],[2.4569520028308034e-3,2.457029999999527e-3,8093283,86518,null,null,null,null,null,null,null,null],[2.5408989749848843e-3,2.5409779999998605e-3,8369757,90843,null,null,null,null,null,null,null,null],[2.6689469814300537e-3,2.6690470000003685e-3,8791497,95386,null,null,null,null,null,null,null,null],[2.802106027957052e-3,2.8021870000003446e-3,9230100,100155,null,null,null,null,null,null,null,null],[3.0183690250851214e-3,3.0184520000000603e-3,9942570,105163,null,null,null,null,null,null,null,null],[3.0882700229994953e-3,3.0883619999997336e-3,10172712,110421,null,null,null,null,null,null,null,null],[3.201149986125529e-3,3.201245000000519e-3,10544523,115942,null,null,null,null,null,null,null,null],[2.9520150274038315e-3,2.952106999999593e-3,9724011,121739,null,null,null,null,null,null,null,null],[3.1020959722809494e-3,3.102188999999811e-3,10218318,127826,null,null,null,null,null,null,null,null],[3.2553619821555912e-3,3.2554359999998894e-3,10723119,134217,null,null,null,null,null,null,null,null],[3.419075976125896e-3,3.4191720000000814e-3,11262372,140928,null,null,null,null,null,null,null,null],[3.588431980460882e-3,3.588530000000034e-3,11820303,147975,null,null,null,null,null,null,null,null],[3.7730970070697367e-3,3.7731850000000122e-3,12428493,155373,null,null,null,null,null,null,null,null],[3.964533971156925e-3,3.964614000000033e-3,13058991,163142,null,null,null,null,null,null,null,null],[4.152233945205808e-3,4.152334999999674e-3,13677312,171299,null,null,null,null,null,null,null,null],[4.396218981128186e-3,4.38949999999938e-3,14480994,179864,null,null,null,null,null,null,null,null],[4.608013958204538e-3,4.6081079999993335e-3,15178515,188858,null,null,null,null,null,null,null,null],[4.8116829711943865e-3,4.81178999999976e-3,15849471,198300,null,null,null,null,null,null,null,null],[5.057181988377124e-3,5.057288999999798e-3,16658037,208215,null,null,null,null,null,null,null,null],[5.314111011102796e-3,5.314199999999936e-3,17504223,218626,null,null,null,null,null,null,null,null],[5.582020967267454e-3,5.582131999999795e-3,18386775,229558,null,null,null,null,null,null,null,null],[5.859828961547464e-3,5.859931999999901e-3,19301667,241036,null,null,null,null,null,null,null,null],[6.144660001154989e-3,6.144786000000124e-3,20240055,253087,null,null,null,null,null,null,null,null],[6.451231020037085e-3,6.451350000000744e-3,21249789,265742,null,null,null,null,null,null,null,null],[6.780846975743771e-3,6.780977000000021e-3,22335687,279029,null,null,null,null,null,null,null,null],[7.106222969014198e-3,7.10634699999968e-3,23407329,292980,null,null,null,null,null,null,null,null],[7.483688008505851e-3,7.483792999999572e-3,24650505,307629,null,null,null,null,null,null,null,null],[7.842916995286942e-3,7.843055000000376e-3,25833885,323011,null,null,null,null,null,null,null,null],[8.231642015744e-3,8.231762999999503e-3,27114186,339161,null,null,null,null,null,null,null,null],[8.645844005513936e-3,8.645968999999809e-3,28478571,356119,null,null,null,null,null,null,null,null],[9.086596022825688e-3,9.086725000000406e-3,29930241,373925,null,null,null,null,null,null,null,null],[9.55191400134936e-3,9.552045999999592e-3,31463025,392622,null,null,null,null,null,null,null,null],[1.0013355000410229e-2,1.0013499000000259e-2,32982906,412253,null,null,null,null,null,null,null,null],[1.059920695843175e-2,1.0599436000000573e-2,34913043,432866,null,null,null,null,null,null,null,null],[1.1071338027250022e-2,1.1071481000000105e-2,36467673,454509,null,null,null,null,null,null,null,null],[1.1590857000555843e-2,1.1591002999999489e-2,38178954,477234,null,null,null,null,null,null,null,null],[1.2174506031442434e-2,1.2174656000000006e-2,40101303,501096,null,null,null,null,null,null,null,null],[1.2792046996764839e-2,1.2792201999999975e-2,42135390,526151,null,null,null,null,null,null,null,null],[1.3417874986771494e-2,1.3418044999999879e-2,44196900,552458,null,null,null,null,null,null,null,null],[1.4248274033889174e-2,1.424844899999922e-2,46932105,580081,null,null,null,null,null,null,null,null],[1.4854745008051395e-2,1.485494499999973e-2,48929727,609086,null,null,null,null,null,null,null,null],[1.5565299021545798e-2,1.5565484999999768e-2,51270153,639540,null,null,null,null,null,null,null,null],[1.63057409808971e-2,1.630599200000038e-2,53709117,671517,null,null,null,null,null,null,null,null],[1.7397496034391224e-2,1.7398217000000216e-2,57306843,705093,null,null,null,null,null,null,null,null],[1.801024901214987e-2,1.8010432999999715e-2,59323308,740347,null,null,null,null,null,null,null,null],[1.888897898606956e-2,1.888919900000019e-2,62217903,777365,null,null,null,null,null,null,null,null],[1.988355297362432e-2,1.9883780999999878e-2,65493813,816233,null,null,null,null,null,null,null,null],[2.0825710031203926e-2,2.0825935000000406e-2,68597100,857045,null,null,null,null,null,null,null,null],[2.2223929001484066e-2,2.2224573999999997e-2,73204296,899897,null,null,null,null,null,null,null,null],[2.3176544986199588e-2,2.317709700000048e-2,76341738,944892,null,null,null,null,null,null,null,null],[2.410111902281642e-2,2.410193900000035e-2,79387737,992136,null,null,null,null,null,null,null,null],[2.5368262024130672e-2,2.5368529999999723e-2,83559564,1041743,null,null,null,null,null,null,null,null],[2.7295517036691308e-2,2.7295990000000714e-2,89908566,1093831,null,null,null,null,null,null,null,null],[2.8167893004138023e-2,2.8168183000000013e-2,92781084,1148522,null,null,null,null,null,null,null,null],[2.9317578009795398e-2,2.931786500000033e-2,96568065,1205948,null,null,null,null,null,null,null,null],[3.0783672002144158e-2,3.0783961000000026e-2,101397021,1266246,null,null,null,null,null,null,null,null],[3.2468824996612966e-2,3.2469757999999516e-2,106951218,1329558,null,null,null,null,null,null,null,null],[3.4044572967104614e-2,3.404487600000028e-2,112137729,1396036,null,null,null,null,null,null,null,null],[3.598321898607537e-2,3.598372699999963e-2,118524384,1465838,null,null,null,null,null,null,null,null],[3.7679462984669954e-2,3.767985299999932e-2,124111053,1539130,null,null,null,null,null,null,null,null],[3.9541966980323195e-2,3.9542381000000404e-2,130245885,1616086,null,null,null,null,null,null,null,null],[4.124537401366979e-2,4.1245789999999616e-2,135856644,1696890,null,null,null,null,null,null,null,null],[4.3289995985105634e-2,4.32903979999999e-2,142590987,1781735,null,null,null,null,null,null,null,null],[4.5471495017409325e-2,4.5471923000000025e-2,149776572,1870822,null,null,null,null,null,null,null,null],[4.7792432946152985e-2,4.7792918999999934e-2,157421781,1964363,null,null,null,null,null,null,null,null],[5.0295241991989315e-2,5.029573499999973e-2,165665511,2062581,null,null,null,null,null,null,null,null],[5.2595111017581075e-2,5.259558100000028e-2,173240661,2165710,null,null,null,null,null,null,null,null],[5.5277973995544016e-2,5.5278453999999755e-2,182077533,2273996,null,null,null,null,null,null,null,null],[5.8021020027808845e-2,5.802152000000049e-2,191112768,2387695,null,null,null,null,null,null,null,null],[6.095867801923305e-2,6.0959242000000025e-2,200789259,2507080,null,null,null,null,null,null,null,null],[6.405672599794343e-2,6.405281299999999e-2,210993618,2632434,null,null,null,null,null,null,null,null],[6.718005199218169e-2,6.718063000000019e-2,221281170,2764056,null,null,null,null,null,null,null,null],[7.063243095763028e-2,7.063312499999963e-2,232653333,2902259,null,null,null,null,null,null,null,null],[7.40192270022817e-2,7.401983699999981e-2,243808257,3047372,null,null,null,null,null,null,null,null],[7.780699199065566e-2,7.78076590000003e-2,256284732,3199740,null,null,null,null,null,null,null,null],[8.200011198641732e-2,8.200089000000066e-2,270096585,3359727,null,null,null,null,null,null,null,null],[8.577892900211737e-2,8.577972599999928e-2,282543492,3527714,null,null,null,null,null,null,null,null],[9.023066097870469e-2,9.023142199999956e-2,297206349,3704100,null,null,null,null,null,null,null,null],[9.45879080099985e-2,9.458880000000036e-2,311559039,3889305,null,null,null,null,null,null,null,null],[9.937034698668867e-2,9.937120500000063e-2,327311226,4083770,null,null,null,null,null,null,null,null],[0.1095963490079157,0.10959725300000045,360993930,4287958,null,null,null,null,null,null,null,null],[0.11552848300198093,0.11552953999999982,380534154,4502356,null,null,null,null,null,null,null,null],[0.12088419101200998,0.1208851580000001,398174172,4727474,null,null,null,null,null,null,null,null],[0.12702564499340951,0.1270267279999997,418403667,4963848,null,null,null,null,null,null,null,null],[0.13329898501979187,0.13330005400000022,439066914,5212040,null,null,null,null,null,null,null,null],[0.140186870994512,0.14018804200000012,461754711,5472642,null,null,null,null,null,null,null,null],[0.14730693999445066,0.1473082140000006,485207250,5746274,null,null,null,null,null,null,null,null],[0.1544275899650529,0.154428875999999,508661472,6033588,null,null,null,null,null,null,null,null],[0.16206919099204242,0.16207050400000078,533831661,6335268,null,null,null,null,null,null,null,null],[0.17039759398903698,0.17039912999999984,561264627,6652031,null,null,null,null,null,null,null,null],[0.17910854000365362,0.179110231000001,589957599,6984633,null,null,null,null,null,null,null,null],[0.1877509289770387,0.1877493459999986,618423465,7333864,null,null,null,null,null,null,null,null],[0.19484114198712632,0.19484273800000018,641777466,7700558,null,null,null,null,null,null,null,null],[0.1967731750337407,0.1967748260000004,648141582,8085585,null,null,null,null,null,null,null,null],[0.20656140998471528,0.20656309399999984,680382054,8489865,null,null,null,null,null,null,null,null],[0.21691621298668906,0.21691797200000096,714489534,8914358,null,null,null,null,null,null,null,null],[0.22754845197778195,0.22755028999999993,749510289,9360076,null,null,null,null,null,null,null,null]],"reportName":"fib/5","reportNumber":1,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":42}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.2193049137878224e-9,"confIntUDX":9.656405683572824e-10},"estPoint":1.376154926895251e-7},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.38620218919276267},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.7086514387624945e-9,"confIntUDX":1.6862717006331852e-9},"estPoint":1.3645055682224533e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":8.395999648006277e-5,"confIntUDX":1.1090499541057712e-4},"estPoint":1.5062483839598762e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.452948645059738e-4,"confIntUDX":4.1552799766231274e-4},"estPoint":0.999005998202595},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":7.019182474873841e-10,"confIntUDX":5.272290500819154e-10},"estPoint":3.595410700809442e-9}},"reportKDEs":[{"kdePDF":[5.274041638793628,111.13240968360849,1695.2383614313376,18849.995856274472,151953.77677751292,888638.738075093,3770465.0986158806,1.1615193689312074e7,2.604573840019683e7,4.2924992653846964e7,5.383755031218667e7,5.726678832160708e7,6.349985919530781e7,8.028021940340853e7,9.890440019936185e7,1.0532498343584022e8,1.01342397357232e8,1.0271408767561758e8,1.17182064745088e8,1.3407929163912627e8,1.3686908750733107e8,1.214281619684658e8,9.757712899317943e7,7.416566024415341e7,5.34944006833291e7,4.015401039212305e7,4.1543946818613544e7,5.728722236307025e7,7.59643666474708e7,8.407293963439395e7,7.596098048371162e7,5.724941342531396e7,4.1238353039582565e7,3.83581170247591e7,4.580512753837311e7,5.008773235666174e7,4.205690158951087e7,2.604584692508606e7,1.2484868536130628e7,7537432.037720749,1.2483178035632545e7,2.60269978730671e7,4.1904952579042666e7,4.919921028692312e7,4.203646808523235e7,2.676346395636231e7,1.5363306622683438e7,1.5363307497428445e7,2.67634576596896e7,4.203635846673908e7,4.9197513225379564e7,4.188610492479977e7,2.5875046821242146e7,1.1594652873699171e7,3768659.4373543635,888522.290300119,151948.59252795813,18849.856343822496,1694.9117065527298,111.72696077494949,4.214315793431429,1.2013679346270916,-1.0216822539083192,1.0408957442526592,-1.0660004856336855,1.1023423408375737,-1.1455898667575724,1.3897845725922273,3.9582686708456922,112.05488742925337,1694.5064554621529,18850.345629960262,151948.01108188598,888522.9686671675,3768658.4623361826,1.1594648552844806e7,2.5874935076113727e7,4.188441016318299e7,4.91786630924939e7,4.188441088334783e7,2.587495159056892e7,1.159501342963226e7,3774436.2646145844,955804.9433138748,729489.8218103116,3692274.535586301,1.7420796002569996e7,6.202838431349826e7,1.67230222528094e8,3.4444233533297324e8,5.475200039364114e8,6.802536661495528e8,6.73135123261824e8,5.479218503799253e8,3.888878925056097e8,2.6474696802362826e8,1.925804744539135e8,1.578864134102267e8,1.468145483659374e8,1.559660832954353e8,1.7986018954396734e8,2.0136480350005192e8,2.0298579930257565e8,1.8511085411088043e8,1.6338752783393455e8,1.4783892498728317e8,1.3426812388482302e8,1.1564701084040293e8,9.23838212465019e7,7.278691280684687e7,6.804131811566412e7,8.054822880054186e7,9.589117024674831e7,9.574080436263388e7,7.950774896400969e7,6.336348482247712e7,5.724941711394983e7,5.383595688994364e7,4.292488496705503e7,2.604573495958621e7,1.1615192122526279e7,3770466.264521857,888637.7736333845,151954.5480886748,18849.4069585961,1695.653117943465,110.88590343047127,5.355819889129055],"kdeType":"time","kdeValues":[1.2935309605942562e-7,1.2946083835532028e-7,1.2956858065121497e-7,1.2967632294710963e-7,1.2978406524300432e-7,1.2989180753889898e-7,1.2999954983479364e-7,1.3010729213068833e-7,1.30215034426583e-7,1.3032277672247768e-7,1.3043051901837234e-7,1.3053826131426703e-7,1.306460036101617e-7,1.3075374590605636e-7,1.3086148820195104e-7,1.309692304978457e-7,1.310769727937404e-7,1.3118471508963506e-7,1.3129245738552972e-7,1.314001996814244e-7,1.3150794197731907e-7,1.3161568427321376e-7,1.3172342656910842e-7,1.3183116886500308e-7,1.3193891116089777e-7,1.3204665345679243e-7,1.3215439575268712e-7,1.3226213804858178e-7,1.3236988034447644e-7,1.3247762264037113e-7,1.325853649362658e-7,1.3269310723216048e-7,1.3280084952805514e-7,1.3290859182394983e-7,1.330163341198445e-7,1.3312407641573916e-7,1.3323181871163384e-7,1.333395610075285e-7,1.334473033034232e-7,1.3355504559931786e-7,1.3366278789521252e-7,1.337705301911072e-7,1.3387827248700187e-7,1.3398601478289656e-7,1.3409375707879122e-7,1.3420149937468588e-7,1.3430924167058057e-7,1.3441698396647523e-7,1.3452472626236992e-7,1.3463246855826458e-7,1.3474021085415924e-7,1.3484795315005393e-7,1.349556954459486e-7,1.3506343774184328e-7,1.3517118003773794e-7,1.3527892233363263e-7,1.353866646295273e-7,1.3549440692542195e-7,1.3560214922131664e-7,1.357098915172113e-7,1.35817633813106e-7,1.3592537610900066e-7,1.3603311840489532e-7,1.3614086070079e-7,1.3624860299668467e-7,1.3635634529257936e-7,1.3646408758847402e-7,1.3657182988436868e-7,1.3667957218026337e-7,1.3678731447615803e-7,1.3689505677205272e-7,1.3700279906794738e-7,1.3711054136384204e-7,1.3721828365973673e-7,1.373260259556314e-7,1.3743376825152608e-7,1.3754151054742074e-7,1.3764925284331543e-7,1.377569951392101e-7,1.3786473743510475e-7,1.3797247973099944e-7,1.380802220268941e-7,1.381879643227888e-7,1.3829570661868345e-7,1.3840344891457812e-7,1.385111912104728e-7,1.3861893350636747e-7,1.3872667580226215e-7,1.3883441809815682e-7,1.3894216039405148e-7,1.3904990268994617e-7,1.3915764498584083e-7,1.3926538728173552e-7,1.3937312957763018e-7,1.3948087187352487e-7,1.3958861416941953e-7,1.396963564653142e-7,1.3980409876120888e-7,1.3991184105710354e-7,1.4001958335299823e-7,1.401273256488929e-7,1.4023506794478755e-7,1.4034281024068224e-7,1.404505525365769e-7,1.405582948324716e-7,1.4066603712836625e-7,1.4077377942426092e-7,1.408815217201556e-7,1.4098926401605027e-7,1.4109700631194495e-7,1.4120474860783962e-7,1.413124909037343e-7,1.4142023319962897e-7,1.4152797549552363e-7,1.4163571779141832e-7,1.4174346008731298e-7,1.4185120238320764e-7,1.4195894467910233e-7,1.42066686974997e-7,1.4217442927089168e-7,1.4228217156678634e-7,1.4238991386268103e-7,1.424976561585757e-7,1.4260539845447035e-7,1.4271314075036504e-7,1.428208830462597e-7,1.429286253421544e-7,1.4303636763804905e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.4730030670762062e-6,8.810000000636364e-7,2178,1,null,null,null,null,null,null,null,null],[7.210182957351208e-7,7.019999994639647e-7,2277,2,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.509999999655292e-7,2409,3,null,null,null,null,null,null,null,null],[8.92032403498888e-7,8.820000001463768e-7,2838,4,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0419999991739815e-6,3399,5,null,null,null,null,null,null,null,null],[1.23301288112998e-6,1.2119999990289898e-6,3960,6,null,null,null,null,null,null,null,null],[1.3730023056268692e-6,1.3619999990055476e-6,4455,7,null,null,null,null,null,null,null,null],[1.533015165477991e-6,1.5130000008412026e-6,4983,8,null,null,null,null,null,null,null,null],[1.6840058378875256e-6,1.682999998919854e-6,5478,9,null,null,null,null,null,null,null,null],[1.8539722077548504e-6,1.8429999997238156e-6,6006,10,null,null,null,null,null,null,null,null],[2.0239967852830887e-6,2.0139999996615643e-6,6633,11,null,null,null,null,null,null,null,null],[2.1840096451342106e-6,2.1740000004655258e-6,7062,12,null,null,null,null,null,null,null,null],[2.343964297324419e-6,2.3240000004420835e-6,7623,13,null,null,null,null,null,null,null,null],[2.503977157175541e-6,2.505000001207236e-6,8151,14,null,null,null,null,null,null,null,null],[2.655026037245989e-6,2.644999998580033e-6,8646,15,null,null,null,null,null,null,null,null],[2.8259819373488426e-6,2.8150000002113984e-6,9207,16,null,null,null,null,null,null,null,null],[2.9859947971999645e-6,2.9660000002706965e-6,9702,17,null,null,null,null,null,null,null,null],[3.145949449390173e-6,3.136000000125705e-6,10263,18,null,null,null,null,null,null,null,null],[3.326043952256441e-6,3.316000000808117e-6,10791,19,null,null,null,null,null,null,null,null],[3.4660333767533302e-6,3.4570000000400114e-6,11286,20,null,null,null,null,null,null,null,null],[3.6159763112664223e-6,3.617000000843973e-6,11847,21,null,null,null,null,null,null,null,null],[3.797002136707306e-6,3.7870000006989812e-6,12375,22,null,null,null,null,null,null,null,null],[3.947003278881311e-6,3.936999998899182e-6,12903,23,null,null,null,null,null,null,null,null],[4.258006811141968e-6,4.247999999762442e-6,13926,25,null,null,null,null,null,null,null,null],[4.427973181009293e-6,4.41799999961745e-6,14487,26,null,null,null,null,null,null,null,null],[4.558998625725508e-6,4.547999999715557e-6,14916,27,null,null,null,null,null,null,null,null],[4.73798718303442e-6,4.718999999653306e-6,15510,28,null,null,null,null,null,null,null,null],[5.059002432972193e-6,5.050000000395016e-6,16566,30,null,null,null,null,null,null,null,null],[5.220004823058844e-6,5.200000000371574e-6,17061,31,null,null,null,null,null,null,null,null],[5.541020072996616e-6,5.52000000020314e-6,18117,33,null,null,null,null,null,null,null,null],[5.85097586736083e-6,5.840000000034706e-6,19173,35,null,null,null,null,null,null,null,null],[6.021000444889069e-6,6.021000000799859e-6,19767,36,null,null,null,null,null,null,null,null],[6.352027412503958e-6,6.341999998937808e-6,20823,38,null,null,null,null,null,null,null,null],[6.642017979174852e-6,6.6329999999226175e-6,21813,40,null,null,null,null,null,null,null,null],[7.002963684499264e-6,6.9629999988052305e-6,22902,42,null,null,null,null,null,null,null,null],[7.314025424420834e-6,7.304000000374344e-6,23991,44,null,null,null,null,null,null,null,null],[7.78399407863617e-6,7.775000000265209e-6,25542,47,null,null,null,null,null,null,null,null],[8.105009328573942e-6,8.085999999352111e-6,26565,49,null,null,null,null,null,null,null,null],[8.585979230701923e-6,8.575999999038686e-6,28182,52,null,null,null,null,null,null,null,null],[8.89599323272705e-6,8.876000000768158e-6,29238,54,null,null,null,null,null,null,null,null],[9.417999535799026e-6,9.408000000377115e-6,30987,57,null,null,null,null,null,null,null,null],[9.908981155604124e-6,9.888999999319026e-6,32538,60,null,null,null,null,null,null,null,null],[1.035997411236167e-5,1.0350000000158843e-5,33990,63,null,null,null,null,null,null,null,null],[1.0850024409592152e-5,1.0840999999928158e-5,35673,66,null,null,null,null,null,null,null,null],[1.132104080170393e-5,1.1311000001512639e-5,37224,69,null,null,null,null,null,null,null,null],[1.1971977073699236e-5,1.1963000000392299e-5,39303,73,null,null,null,null,null,null,null,null],[1.2432981748133898e-5,1.242399999945576e-5,40887,76,null,null,null,null,null,null,null,null],[1.3084965758025646e-5,1.3075000000029036e-5,43032,80,null,null,null,null,null,null,null,null],[1.373601844534278e-5,1.3716000001551265e-5,45144,84,null,null,null,null,null,null,null,null],[1.4607969205826521e-5,1.4587999999093881e-5,48015,89,null,null,null,null,null,null,null,null],[1.5209021512418985e-5,1.5198999999910257e-5,50028,93,null,null,null,null,null,null,null,null],[1.5989993698894978e-5,1.5979999998805283e-5,52602,98,null,null,null,null,null,null,null,null],[1.680100103840232e-5,1.6791999998488905e-5,55209,103,null,null,null,null,null,null,null,null],[1.7623009625822306e-5,1.7602999999866142e-5,57948,108,null,null,null,null,null,null,null,null],[1.8403981812298298e-5,1.8393999999588573e-5,60555,113,null,null,null,null,null,null,null,null],[1.9366038031876087e-5,1.9345999998421348e-5,63657,119,null,null,null,null,null,null,null,null],[2.0337989553809166e-5,2.0327999999736335e-5,66891,125,null,null,null,null,null,null,null,null],[2.6780006010085344e-5,2.7240999999733617e-5,91179,131,null,null,null,null,null,null,null,null],[3.2450014259666204e-5,3.265199999979984e-5,108141,138,null,null,null,null,null,null,null,null],[3.719900269061327e-5,3.7811000000331774e-5,127875,144,null,null,null,null,null,null,null,null],[3.485498018562794e-5,3.494499999945333e-5,115170,152,null,null,null,null,null,null,null,null],[3.6187004297971725e-5,3.627799999961212e-5,119625,159,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.902300000113712e-5,129030,167,null,null,null,null,null,null,null,null],[3.612699219956994e-5,3.608799999987866e-5,118701,176,null,null,null,null,null,null,null,null],[3.008596831932664e-5,3.0055999999945016e-5,98901,185,null,null,null,null,null,null,null,null],[3.1449017114937305e-5,3.142899999986071e-5,103422,194,null,null,null,null,null,null,null,null],[3.3051008358597755e-5,3.304100000001142e-5,108735,204,null,null,null,null,null,null,null,null],[3.4653989132493734e-5,3.463500000044917e-5,113982,214,null,null,null,null,null,null,null,null],[3.6258017644286156e-5,3.624800000068262e-5,119295,224,null,null,null,null,null,null,null,null],[3.817200195044279e-5,3.817099999992024e-5,125598,236,null,null,null,null,null,null,null,null],[3.994500730186701e-5,3.9935000000212995e-5,131406,247,null,null,null,null,null,null,null,null],[4.20489814132452e-5,4.204900000104317e-5,138402,260,null,null,null,null,null,null,null,null],[4.412198904901743e-5,4.411199999942994e-5,145299,273,null,null,null,null,null,null,null,null],[4.6396045945584774e-5,4.639700000019786e-5,152757,287,null,null,null,null,null,null,null,null],[4.865095252171159e-5,4.863200000038148e-5,160116,301,null,null,null,null,null,null,null,null],[5.1036011427640915e-5,5.103600000033737e-5,168036,316,null,null,null,null,null,null,null,null],[5.3640047553926706e-5,5.362099999928205e-5,176517,332,null,null,null,null,null,null,null,null],[5.6194025091826916e-5,5.6185000000041896e-5,185031,348,null,null,null,null,null,null,null,null],[5.907996091991663e-5,5.906999999893969e-5,194502,366,null,null,null,null,null,null,null,null],[6.197602488100529e-5,6.195600000147294e-5,204039,384,null,null,null,null,null,null,null,null],[6.504100747406483e-5,6.50209999992768e-5,214137,403,null,null,null,null,null,null,null,null],[6.840704008936882e-5,6.840800000063041e-5,225258,424,null,null,null,null,null,null,null,null],[7.179402746260166e-5,7.178399999929752e-5,236379,445,null,null,null,null,null,null,null,null],[7.533002644777298e-5,7.533099999967874e-5,248028,467,null,null,null,null,null,null,null,null],[7.901701610535383e-5,7.899800000110702e-5,260172,490,null,null,null,null,null,null,null,null],[8.304498624056578e-5,8.303499999939845e-5,273471,515,null,null,null,null,null,null,null,null],[8.52489611133933e-5,8.526000000053102e-5,280764,541,null,null,null,null,null,null,null,null],[8.903699927031994e-5,8.904699999945365e-5,293238,568,null,null,null,null,null,null,null,null],[9.344401769340038e-5,9.34350000001416e-5,307692,596,null,null,null,null,null,null,null,null],[9.811302879825234e-5,9.8114000000038e-5,323136,626,null,null,null,null,null,null,null,null],[1.0295200627297163e-4,1.0294199999982823e-4,339075,657,null,null,null,null,null,null,null,null],[1.0822201147675514e-4,1.082130000007453e-4,356367,690,null,null,null,null,null,null,null,null],[1.1359096970409155e-4,1.1359299999824657e-4,374055,725,null,null,null,null,null,null,null,null],[1.1921202531084418e-4,1.1920299999879092e-4,392601,761,null,null,null,null,null,null,null,null],[1.2516300193965435e-4,1.2515499999921076e-4,412203,799,null,null,null,null,null,null,null,null],[1.3139494694769382e-4,1.3139600000044993e-4,432729,839,null,null,null,null,null,null,null,null],[1.379769528284669e-4,1.379690000007372e-4,454410,881,null,null,null,null,null,null,null,null],[1.448499970138073e-4,1.4484100000089484e-4,477048,925,null,null,null,null,null,null,null,null],[1.5219399938359857e-4,1.5219500000007713e-4,501237,972,null,null,null,null,null,null,null,null],[1.5971797984093428e-4,1.5970900000006338e-4,525987,1020,null,null,null,null,null,null,null,null],[1.6769301146268845e-4,1.676939999999405e-4,552288,1071,null,null,null,null,null,null,null,null],[1.7612904775887728e-4,1.761189999989199e-4,580107,1125,null,null,null,null,null,null,null,null],[1.848650281317532e-4,1.8485600000062163e-4,608850,1181,null,null,null,null,null,null,null,null],[1.9409204833209515e-4,1.94093000001061e-4,639210,1240,null,null,null,null,null,null,null,null],[2.0666600903496146e-4,2.0666700000049332e-4,680757,1302,null,null,null,null,null,null,null,null],[2.141490112990141e-4,2.141409999989463e-4,705309,1367,null,null,null,null,null,null,null,null],[2.310710260644555e-4,2.3106199999922694e-4,761046,1436,null,null,null,null,null,null,null,null],[2.425220445729792e-4,2.4252400000079888e-4,798765,1507,null,null,null,null,null,null,null,null],[2.575300168246031e-4,2.575520000007714e-4,848364,1583,null,null,null,null,null,null,null,null],[2.6740902103483677e-4,2.674099999993018e-4,880770,1662,null,null,null,null,null,null,null,null],[2.793209860101342e-4,2.793329999999372e-4,920073,1745,null,null,null,null,null,null,null,null],[2.866850118152797e-4,2.866869999991195e-4,944262,1832,null,null,null,null,null,null,null,null],[3.0124204931780696e-4,3.0124399999920115e-4,992178,1924,null,null,null,null,null,null,null,null],[3.1627999851480126e-4,3.1628200000000106e-4,1041744,2020,null,null,null,null,null,null,null,null],[3.3191900001838803e-4,3.3192100000078995e-4,1093257,2121,null,null,null,null,null,null,null,null],[3.4848996438086033e-4,3.484930000006159e-4,1147872,2227,null,null,null,null,null,null,null,null],[3.660930087789893e-4,3.6611500000027775e-4,1205919,2339,null,null,null,null,null,null,null,null],[3.870819928124547e-4,3.870950000006701e-4,1274988,2456,null,null,null,null,null,null,null,null],[4.223980358801782e-4,4.2244099999955154e-4,1391445,2579,null,null,null,null,null,null,null,null],[4.4336699647828937e-4,4.434399999997396e-4,1460778,2708,null,null,null,null,null,null,null,null],[4.481659852899611e-4,4.4819999999923255e-4,1476288,2843,null,null,null,null,null,null,null,null],[4.688040353357792e-4,4.688379999997494e-4,1544268,2985,null,null,null,null,null,null,null,null],[4.916980396956205e-4,4.917200000011945e-4,1619739,3134,null,null,null,null,null,null,null,null],[5.163030000403523e-4,5.163269999997055e-4,1700688,3291,null,null,null,null,null,null,null,null],[5.407779826782644e-4,5.40793000000761e-4,1781241,3456,null,null,null,null,null,null,null,null],[5.599639844149351e-4,5.599889999992058e-4,1844502,3629,null,null,null,null,null,null,null,null],[5.857429932802916e-4,5.857670000004589e-4,1929477,3810,null,null,null,null,null,null,null,null],[6.276000058278441e-4,6.276349999989606e-4,2067318,4001,null,null,null,null,null,null,null,null],[6.588390097022057e-4,6.588640000000368e-4,2170179,4201,null,null,null,null,null,null,null,null],[6.813709624111652e-4,6.813960000009445e-4,2244429,4411,null,null,null,null,null,null,null,null],[7.299010176211596e-4,7.299560000006977e-4,2404446,4631,null,null,null,null,null,null,null,null],[7.681730203330517e-4,7.683580000001911e-4,2531595,4863,null,null,null,null,null,null,null,null],[7.419140310958028e-4,7.420499999994945e-4,2444112,5106,null,null,null,null,null,null,null,null],[7.965550175867975e-4,7.968119999990364e-4,2625249,5361,null,null,null,null,null,null,null,null],[8.496150257997215e-4,8.497310000006308e-4,2799060,5629,null,null,null,null,null,null,null,null],[8.452670299448073e-4,8.453429999999429e-4,2784606,5911,null,null,null,null,null,null,null,null],[8.78868973813951e-4,8.794469999990895e-4,2898357,6207,null,null,null,null,null,null,null,null],[9.246249683201313e-4,9.246819999990663e-4,3045834,6517,null,null,null,null,null,null,null,null],[9.734359919093549e-4,9.735030000008749e-4,3206676,6843,null,null,null,null,null,null,null,null],[9.98673029243946e-4,9.987200000001195e-4,3289803,7185,null,null,null,null,null,null,null,null],[1.0826190118677914e-3,1.0828679999992374e-3,3566805,7544,null,null,null,null,null,null,null,null],[1.1323909857310355e-3,1.1324800000007684e-3,3730320,7921,null,null,null,null,null,null,null,null],[1.1668360093608499e-3,1.1669049999998293e-3,3843774,8318,null,null,null,null,null,null,null,null],[1.2142250197939575e-3,1.2142930000003105e-3,3999765,8733,null,null,null,null,null,null,null,null],[1.2770619941875339e-3,1.277151000000032e-3,4206807,9170,null,null,null,null,null,null,null,null],[1.33850600104779e-3,1.3385659999993749e-3,4409097,9629,null,null,null,null,null,null,null,null],[1.4171929797157645e-3,1.417253000001395e-3,4668345,10110,null,null,null,null,null,null,null,null],[1.521287951618433e-3,1.5213890000005392e-3,5011380,10616,null,null,null,null,null,null,null,null],[1.5573640121147037e-3,1.5574259999997508e-3,5130015,11146,null,null,null,null,null,null,null,null],[1.6300400020554662e-3,1.6301229999999833e-3,5369397,11704,null,null,null,null,null,null,null,null],[1.7080659745261073e-3,1.70814800000052e-3,5626434,12289,null,null,null,null,null,null,null,null],[1.7935250070877373e-3,1.793608000001612e-3,5907957,12903,null,null,null,null,null,null,null,null],[1.934778003487736e-3,1.9348819999986944e-3,6373488,13549,null,null,null,null,null,null,null,null],[2.0268099615350366e-3,2.0275269999991963e-3,6689100,14226,null,null,null,null,null,null,null,null],[2.2565789986401796e-3,2.256836000000817e-3,7433943,14937,null,null,null,null,null,null,null,null],[2.209179976489395e-3,2.209235999998782e-3,7276863,15684,null,null,null,null,null,null,null,null],[2.3631879594177008e-3,2.3632960000004033e-3,7784502,16469,null,null,null,null,null,null,null,null],[2.437244984321296e-3,2.437343000000425e-3,8028339,17292,null,null,null,null,null,null,null,null],[2.5413199909962714e-3,2.5414189999999337e-3,8371209,18157,null,null,null,null,null,null,null,null],[2.7044540038332343e-3,2.7045539999992485e-3,8908548,19065,null,null,null,null,null,null,null,null],[2.9367770184762776e-3,2.9371799999999837e-3,9675171,20018,null,null,null,null,null,null,null,null],[2.9696680139750242e-3,2.9697610000010144e-3,9781926,21019,null,null,null,null,null,null,null,null],[3.1307890312746167e-3,3.1308820000006676e-3,10312797,22070,null,null,null,null,null,null,null,null],[3.323348006233573e-3,3.323604000000202e-3,10947750,23173,null,null,null,null,null,null,null,null],[3.4292659838683903e-3,3.429390999999171e-3,11296131,24332,null,null,null,null,null,null,null,null],[3.641621966380626e-3,3.641768999999684e-3,11995698,25549,null,null,null,null,null,null,null,null],[3.7911100080236793e-3,3.7912190000000123e-3,12487893,26826,null,null,null,null,null,null,null,null],[4.059530969243497e-3,4.059792000001394e-3,13372887,28167,null,null,null,null,null,null,null,null],[4.1613809880800545e-3,4.16151199999959e-3,13707474,29576,null,null,null,null,null,null,null,null],[4.3987639946863055e-3,4.398866000000723e-3,14489310,31054,null,null,null,null,null,null,null,null],[4.597544961143285e-3,4.597678999999744e-3,15144195,32607,null,null,null,null,null,null,null,null],[4.930394992697984e-3,4.930672000000413e-3,16241313,34238,null,null,null,null,null,null,null,null],[5.076997971627861e-3,5.077186000001177e-3,16723476,35950,null,null,null,null,null,null,null,null],[5.328618048224598e-3,5.328768000000039e-3,17552271,37747,null,null,null,null,null,null,null,null],[5.565528990700841e-3,5.565640999998678e-3,18332424,39634,null,null,null,null,null,null,null,null],[5.864278005901724e-3,5.864421000000064e-3,19316616,41616,null,null,null,null,null,null,null,null],[6.235509004909545e-3,6.235786000001298e-3,20540091,43697,null,null,null,null,null,null,null,null],[6.58121396554634e-3,6.581472999998894e-3,21678591,45882,null,null,null,null,null,null,null,null],[6.759385985787958e-3,6.759487000000064e-3,22264671,48176,null,null,null,null,null,null,null,null],[7.168840034864843e-3,7.169102999998955e-3,23614173,50585,null,null,null,null,null,null,null,null],[7.5189220369793475e-3,7.519077999999624e-3,24766698,53114,null,null,null,null,null,null,null,null],[8.178182994015515e-3,8.178794000000877e-3,26940111,55770,null,null,null,null,null,null,null,null],[8.314376987982541e-3,8.314609000001028e-3,27387294,58558,null,null,null,null,null,null,null,null],[8.698303019627929e-3,8.698587999999674e-3,28652019,61486,null,null,null,null,null,null,null,null],[9.058744995854795e-3,9.059032999999772e-3,29839161,64561,null,null,null,null,null,null,null,null],[9.52253898140043e-3,9.522830999999954e-3,31366962,67789,null,null,null,null,null,null,null,null],[9.89998399745673e-3,9.900177000000454e-3,32609478,71178,null,null,null,null,null,null,null,null],[1.0492128029000014e-2,1.0492377000000275e-2,34560306,74737,null,null,null,null,null,null,null,null],[1.0929913958534598e-2,1.0930115999999046e-2,36002142,78474,null,null,null,null,null,null,null,null],[1.146121503552422e-2,1.1461411000000865e-2,37752099,82398,null,null,null,null,null,null,null,null],[1.2112280004657805e-2,1.2112450000000052e-2,39896472,86518,null,null,null,null,null,null,null,null],[1.2712750001810491e-2,1.2712913999999742e-2,41874228,90843,null,null,null,null,null,null,null,null],[1.3264138018712401e-2,1.3264305999999948e-2,43690482,95386,null,null,null,null,null,null,null,null],[1.3926793995779008e-2,1.3926956999998907e-2,45873135,100155,null,null,null,null,null,null,null,null],[1.4672403980512172e-2,1.4672593000000234e-2,48329127,105163,null,null,null,null,null,null,null,null],[1.5414868015795946e-2,1.5415223999999839e-2,50775285,110421,null,null,null,null,null,null,null,null],[1.6251509019639343e-2,1.6251780999999355e-2,53531148,115942,null,null,null,null,null,null,null,null],[1.7377498967107385e-2,1.7377938999999287e-2,57240315,121739,null,null,null,null,null,null,null,null],[1.8077393993735313e-2,1.80777489999997e-2,59545299,127826,null,null,null,null,null,null,null,null],[1.9001688982825726e-2,1.9002050000000992e-2,62589846,134217,null,null,null,null,null,null,null,null],[2.0112009020522237e-2,2.0112808999998677e-2,66249249,140928,null,null,null,null,null,null,null,null],[2.1213764033745974e-2,2.1214171999998754e-2,69876279,147975,null,null,null,null,null,null,null,null],[2.186688204528764e-2,2.186726400000083e-2,72027252,155373,null,null,null,null,null,null,null,null],[2.3046952963341027e-2,2.3047374000000787e-2,75914454,163142,null,null,null,null,null,null,null,null],[2.4132738006301224e-2,2.4133126999998922e-2,79490697,171299,null,null,null,null,null,null,null,null],[2.5351941003464162e-2,2.5352511000001243e-2,83507028,179864,null,null,null,null,null,null,null,null],[2.6376353052910417e-2,2.637675799999961e-2,86880750,188858,null,null,null,null,null,null,null,null],[2.770113304723054e-2,2.7701568999999537e-2,91244340,198300,null,null,null,null,null,null,null,null],[2.8953999979421496e-2,2.895427500000025e-2,95370363,208215,null,null,null,null,null,null,null,null],[3.0401739990338683e-2,3.040201600000003e-2,100138830,218626,null,null,null,null,null,null,null,null],[3.19638240034692e-2,3.1964119999999596e-2,105284190,229558,null,null,null,null,null,null,null,null],[3.3782574988435954e-2,3.378307599999886e-2,111275967,241036,null,null,null,null,null,null,null,null],[3.525351901771501e-2,3.525393000000143e-2,116120334,253087,null,null,null,null,null,null,null,null],[3.7300786993000656e-2,3.73013240000013e-2,122864412,265742,null,null,null,null,null,null,null,null],[3.759087796788663e-2,3.7591387000000864e-2,123819795,279029,null,null,null,null,null,null,null,null],[3.862346400273964e-2,3.862401000000126e-2,127221039,292980,null,null,null,null,null,null,null,null],[4.307731002336368e-2,4.3077870000001184e-2,141891255,307629,null,null,null,null,null,null,null,null],[4.542434704490006e-2,4.542491400000159e-2,149621967,323011,null,null,null,null,null,null,null,null],[4.753767797956243e-2,4.75382720000006e-2,156583053,339161,null,null,null,null,null,null,null,null],[4.954897001152858e-2,4.954939799999991e-2,163207044,356119,null,null,null,null,null,null,null,null],[5.20598019938916e-2,5.206032899999968e-2,171477669,373925,null,null,null,null,null,null,null,null],[5.459958896972239e-2,5.460005399999979e-2,179843037,392622,null,null,null,null,null,null,null,null],[5.7404200022574514e-2,5.740471600000063e-2,189081090,412253,null,null,null,null,null,null,null,null],[6.0218719008844346e-2,6.021925599999989e-2,198352407,432866,null,null,null,null,null,null,null,null],[6.350560899591073e-2,6.350631100000115e-2,209178882,454509,null,null,null,null,null,null,null,null],[6.640846299706027e-2,6.640907600000112e-2,218739807,477234,null,null,null,null,null,null,null,null],[6.96786810294725e-2,6.967925899999905e-2,229511172,501096,null,null,null,null,null,null,null,null],[7.32172720017843e-2,7.321790399999983e-2,241166871,526151,null,null,null,null,null,null,null,null],[7.690582104260102e-2,7.690653100000056e-2,253316745,552458,null,null,null,null,null,null,null,null],[7.774039695505053e-2,7.774103500000074e-2,256065084,580081,null,null,null,null,null,null,null,null],[7.948168396251276e-2,7.948235499999967e-2,261800880,609086,null,null,null,null,null,null,null,null],[8.478159899823368e-2,8.478237899999996e-2,279258309,639540,null,null,null,null,null,null,null,null],[9.367603802820668e-2,9.367699300000076e-2,308556006,671517,null,null,null,null,null,null,null,null],[9.834435401717201e-2,9.834532500000037e-2,323932356,705093,null,null,null,null,null,null,null,null],[0.10421636595856398,0.10421737899999961,343273854,740347,null,null,null,null,null,null,null,null],[0.11002359597478062,0.11002625599999938,362407617,777365,null,null,null,null,null,null,null,null],[0.11397561599733308,0.11397716400000135,375421068,816233,null,null,null,null,null,null,null,null],[0.121198587003164,0.12118870699999817,399217038,857045,null,null,null,null,null,null,null,null],[0.12627688801148906,0.1262784159999999,415945926,899897,null,null,null,null,null,null,null,null],[0.13407648500287905,0.1340789030000007,441632400,944892,null,null,null,null,null,null,null,null],[0.1398223610012792,0.13982398000000096,460556316,992136,null,null,null,null,null,null,null,null],[0.13869051000801846,0.13868671,456826590,1041743,null,null,null,null,null,null,null,null],[0.14371057297103107,0.14371202900000135,473362329,1093831,null,null,null,null,null,null,null,null],[0.15108612802578136,0.15108824100000007,497658249,1148522,null,null,null,null,null,null,null,null],[0.15961019496899098,0.15960696099999971,525736101,1205948,null,null,null,null,null,null,null,null],[0.1666181159671396,0.16661959300000007,548815641,1266246,null,null,null,null,null,null,null,null],[0.17424910800764337,0.17425046000000144,573949959,1329558,null,null,null,null,null,null,null,null],[0.18271611799718812,0.18271773500000066,601840206,1396036,null,null,null,null,null,null,null,null],[0.2019869289943017,0.20198508100000012,665316927,1465838,null,null,null,null,null,null,null,null],[0.21409867703914642,0.2141004070000001,705208746,1539130,null,null,null,null,null,null,null,null],[0.22524451499339193,0.2252370500000005,741921675,1616086,null,null,null,null,null,null,null,null],[0.23609086294891313,0.23609268499999914,777647145,1696890,null,null,null,null,null,null,null,null]],"reportName":"fib/9","reportNumber":2,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":6.972724273344782e-9,"confIntUDX":5.576911944060881e-9},"estPoint":4.226666874091772e-7},"anOutlierVar":{"ovDesc":"a severe","ovEffect":"Severe","ovFraction":0.6900424181913867},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.0901821438900934e-8,"confIntUDX":9.124065800415636e-9},"estPoint":4.2157588416047557e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.8343236679209873e-4,"confIntUDX":2.7526673522396795e-4},"estPoint":3.963274344893427e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.05381984497677e-4,"confIntUDX":9.685035127019459e-4},"estPoint":0.9966606983180731},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.3897342214180667e-9,"confIntUDX":1.3569897101299865e-9},"estPoint":2.1516391528570672e-8}},"reportKDEs":[{"kdePDF":[4857.110325267976,21598.18597236797,94230.18728354711,351191.2822281225,1114867.5462024566,3019174.6133149876,6991040.225760366,1.388931566301834e7,2.380238056020613e7,3.548189445714173e7,4.66152044723692e7,5.503073001124021e7,5.988933372700311e7,6.174520366407014e7,6.151450868640542e7,5.952731071179665e7,5.555700602186013e7,4.95198905142526e7,4.1961872799638115e7,3.392343594874278e7,2.643023637503173e7,2.0051615361233085e7,1.4815792095918287e7,1.0484358973847957e7,6900735.918659116,4097004.5543140555,2141194.7876034337,968914.4658673848,375758.2001148299,124135.43520735284,34811.60553730431,8270.219934552764,1662.5348818836544,282.61461118898933,40.61191060331729,4.974986801162251,1.0117194283255995,4.971575694342204,40.56463532559086,282.0615613507969,1657.0537523715332,8224.171534698986,34483.41732764665,122149.30724718176,365539.48059410416,924145.0560895158,1973824.6602569704,3561554.288570179,5429166.225426622,6991804.570512427,7606905.038862844,6991804.573714361,5429166.269278959,3561554.7943250467,1973829.5879690729,924185.617512065,365821.5419566735,123806.36098921977,42707.588861864635,42707.58886197547,123806.36098912539,365821.54195675766,924185.617511963,1973829.587969148,3561554.7943249256,5429166.269279046,6991804.573714242,7606905.038862965,6991804.57051231,5429166.225426751,3561554.288570053,1973824.660257112,924145.0560893771,365539.4805942604,122149.30724704191,34483.4173278142,8224.171534081606,1657.0537421739575,282.0613623681876,40.561423209173185,4.9277222336178435,0.5059549074105679,4.708654940848701e-2,4.748620787333499e-2,0.5128288423371777,5.0228801851494245,41.67733822534036,293.158015309595,1750.7056217098207,8895.755373162627,38581.35835601203,143464.60620844323,460259.7765587267,1284727.2251765893,3153611.2926078807,6892222.617010959,1.3578926779419497e7,2.4364081886950802e7,4.004969259419271e7,6.039980678789595e7,8.3453924284074e7,1.05459526031231e8,1.2187691925845402e8,1.2909516492699948e8,1.25799878236897e8,1.1319504542265898e8,9.423202998092853e7,7.257167046857736e7,5.175203980536676e7,3.455123350120077e7,2.2465014145494286e7,1.5470650280869197e7,1.2326373603162467e7,1.134519816830013e7,1.1168634318278806e7,1.1044227465206923e7,1.0601781383625878e7,9591559.685330069,7918022.452445185,5795044.309515921,3683750.7034307593,2008313.6500622493,932369.7905211367,367196.6258736365,122431.87781820631,34528.90687170118,8269.663892070705,1939.6647127149931],"kdeType":"time","kdeValues":[3.8703445261938077e-7,3.87539246696559e-7,3.880440407737372e-7,3.8854883485091535e-7,3.8905362892809356e-7,3.8955842300527177e-7,3.9006321708245e-7,3.9056801115962814e-7,3.9107280523680636e-7,3.9157759931398457e-7,3.920823933911628e-7,3.92587187468341e-7,3.9309198154551915e-7,3.9359677562269736e-7,3.9410156969987557e-7,3.946063637770538e-7,3.9511115785423194e-7,3.9561595193141016e-7,3.9612074600858837e-7,3.966255400857666e-7,3.971303341629448e-7,3.9763512824012295e-7,3.9813992231730116e-7,3.9864471639447937e-7,3.991495104716576e-7,3.9965430454883574e-7,4.0015909862601396e-7,4.0066389270319217e-7,4.011686867803704e-7,4.016734808575486e-7,4.0217827493472675e-7,4.0268306901190496e-7,4.0318786308908317e-7,4.036926571662614e-7,4.0419745124343954e-7,4.0470224532061775e-7,4.0520703939779597e-7,4.057118334749742e-7,4.062166275521524e-7,4.0672142162933055e-7,4.0722621570650876e-7,4.0773100978368697e-7,4.082358038608652e-7,4.0874059793804334e-7,4.0924539201522155e-7,4.0975018609239977e-7,4.10254980169578e-7,4.107597742467562e-7,4.1126456832393435e-7,4.1176936240111256e-7,4.1227415647829077e-7,4.12778950555469e-7,4.1328374463264714e-7,4.1378853870982535e-7,4.1429333278700357e-7,4.147981268641818e-7,4.1530292094136e-7,4.1580771501853815e-7,4.1631250909571636e-7,4.1681730317289457e-7,4.173220972500728e-7,4.1782689132725094e-7,4.1833168540442915e-7,4.1883647948160737e-7,4.193412735587856e-7,4.198460676359638e-7,4.2035086171314195e-7,4.2085565579032016e-7,4.2136044986749837e-7,4.218652439446766e-7,4.2237003802185474e-7,4.2287483209903295e-7,4.2337962617621117e-7,4.238844202533894e-7,4.243892143305676e-7,4.248940084077458e-7,4.2539880248492396e-7,4.2590359656210217e-7,4.264083906392804e-7,4.269131847164586e-7,4.2741797879363675e-7,4.2792277287081497e-7,4.284275669479932e-7,4.289323610251714e-7,4.294371551023496e-7,4.2994194917952776e-7,4.3044674325670597e-7,4.309515373338842e-7,4.314563314110624e-7,4.3196112548824055e-7,4.3246591956541877e-7,4.32970713642597e-7,4.334755077197752e-7,4.339803017969534e-7,4.3448509587413156e-7,4.3498988995130977e-7,4.35494684028488e-7,4.359994781056662e-7,4.3650427218284435e-7,4.3700906626002256e-7,4.375138603372008e-7,4.38018654414379e-7,4.385234484915572e-7,4.3902824256873536e-7,4.3953303664591357e-7,4.400378307230918e-7,4.4054262480027e-7,4.4104741887744815e-7,4.4155221295462636e-7,4.420570070318046e-7,4.425618011089828e-7,4.43066595186161e-7,4.4357138926333916e-7,4.4407618334051737e-7,4.445809774176956e-7,4.450857714948738e-7,4.4559056557205195e-7,4.4609535964923016e-7,4.466001537264084e-7,4.471049478035866e-7,4.476097418807648e-7,4.4811453595794296e-7,4.4861933003512117e-7,4.491241241122994e-7,4.496289181894776e-7,4.5013371226665575e-7,4.5063850634383396e-7,4.511433004210122e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.734006218612194e-6,1.5030000000137989e-6,4191,1,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.241999999734844e-6,3993,2,null,null,null,null,null,null,null,null],[1.6329577192664146e-6,1.6239999993672427e-6,5280,3,null,null,null,null,null,null,null,null],[2.073997166007757e-6,2.053000001112082e-6,6666,4,null,null,null,null,null,null,null,null],[2.5249901227653027e-6,2.504999999430879e-6,8184,5,null,null,null,null,null,null,null,null],[2.974993549287319e-6,2.955999999443293e-6,9636,6,null,null,null,null,null,null,null,null],[3.427034243941307e-6,3.405999999372966e-6,11187,7,null,null,null,null,null,null,null,null],[3.88704938814044e-6,3.858000001244477e-6,12672,8,null,null,null,null,null,null,null,null],[4.338973667472601e-6,4.30800000117415e-6,14157,9,null,null,null,null,null,null,null,null],[4.7889770939946175e-6,4.778999999288658e-6,15708,10,null,null,null,null,null,null,null,null],[5.23001654073596e-6,5.219000000167284e-6,17160,11,null,null,null,null,null,null,null,null],[5.691021215170622e-6,5.6709999984860815e-6,18612,12,null,null,null,null,null,null,null,null],[6.152025889605284e-6,6.142000000153303e-6,20130,13,null,null,null,null,null,null,null,null],[6.613030564039946e-6,6.593000000165716e-6,21648,14,null,null,null,null,null,null,null,null],[7.062975782901049e-6,7.054000001005534e-6,23133,15,null,null,null,null,null,null,null,null],[7.503957021981478e-6,7.4840000010567564e-6,24585,16,null,null,null,null,null,null,null,null],[7.983995601534843e-6,7.964999999998668e-6,26169,17,null,null,null,null,null,null,null,null],[8.425966370850801e-6,8.416000000011081e-6,27621,18,null,null,null,null,null,null,null,null],[8.867005817592144e-6,8.846000000062304e-6,29106,19,null,null,null,null,null,null,null,null],[9.328010492026806e-6,9.307000000902121e-6,30591,20,null,null,null,null,null,null,null,null],[9.807990863919258e-6,9.78900000170313e-6,32175,21,null,null,null,null,null,null,null,null],[1.0229006875306368e-5,1.0220000000060736e-5,33594,22,null,null,null,null,null,null,null,null],[1.0689953342080116e-5,1.0679999999041456e-5,35112,23,null,null,null,null,null,null,null,null],[1.1581985745579004e-5,1.1572000000015237e-5,38049,25,null,null,null,null,null,null,null,null],[1.206202432513237e-5,1.204199999982336e-5,39600,26,null,null,null,null,null,null,null,null],[1.2492993846535683e-5,1.2483000000784727e-5,41052,27,null,null,null,null,null,null,null,null],[1.2953998520970345e-5,1.2943999999848188e-5,42603,28,null,null,null,null,null,null,null,null],[1.3845972716808319e-5,1.3836000000821969e-5,45507,30,null,null,null,null,null,null,null,null],[1.4327000826597214e-5,1.4296999999885429e-5,47025,31,null,null,null,null,null,null,null,null],[1.521798549219966e-5,1.520800000065492e-5,49995,33,null,null,null,null,null,null,null,null],[1.613004133105278e-5,1.610999999890339e-5,53031,35,null,null,null,null,null,null,null,null],[1.6581034287810326e-5,1.6570999999743208e-5,54516,36,null,null,null,null,null,null,null,null],[1.750304363667965e-5,1.748300000059544e-5,57519,38,null,null,null,null,null,null,null,null],[1.8413993529975414e-5,1.839400000136493e-5,60489,40,null,null,null,null,null,null,null,null],[1.931603765115142e-5,1.9306000000440804e-5,63525,42,null,null,null,null,null,null,null,null],[2.0198000129312277e-5,2.018700000050444e-5,66429,44,null,null,null,null,null,null,null,null],[2.159102587029338e-5,2.1560000000420132e-5,70983,47,null,null,null,null,null,null,null,null],[2.251198748126626e-5,2.2472000001272363e-5,73920,49,null,null,null,null,null,null,null,null],[2.3833999875932932e-5,2.3823999999450507e-5,78408,52,null,null,null,null,null,null,null,null],[2.4746055714786053e-5,2.473700000038548e-5,81411,54,null,null,null,null,null,null,null,null],[2.611899981275201e-5,2.610900000021843e-5,85899,57,null,null,null,null,null,null,null,null],[2.7481000870466232e-5,2.7450999999345527e-5,90387,60,null,null,null,null,null,null,null,null],[2.8843991458415985e-5,2.884399999913967e-5,94875,63,null,null,null,null,null,null,null,null],[3.019697032868862e-5,3.0187000000125863e-5,99330,66,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.1540000000163104e-5,103851,69,null,null,null,null,null,null,null,null],[3.339204704388976e-5,3.337300000083587e-5,109857,73,null,null,null,null,null,null,null,null],[3.4744967706501484e-5,3.473499999984142e-5,114378,76,null,null,null,null,null,null,null,null],[3.656797343865037e-5,3.654799999885938e-5,120318,80,null,null,null,null,null,null,null,null],[3.8372003473341465e-5,3.836199999973644e-5,126291,84,null,null,null,null,null,null,null,null],[4.070601426064968e-5,4.0686000000178524e-5,133947,89,null,null,null,null,null,null,null,null],[4.2478961404412985e-5,4.246900000026699e-5,139854,93,null,null,null,null,null,null,null,null],[4.47329948656261e-5,4.4724000000329056e-5,147246,98,null,null,null,null,null,null,null,null],[4.702701698988676e-5,4.7018000000065285e-5,154803,103,null,null,null,null,null,null,null,null],[4.930200520902872e-5,4.9291999999923064e-5,162261,108,null,null,null,null,null,null,null,null],[5.092500941827893e-5,5.090500000015652e-5,167574,113,null,null,null,null,null,null,null,null],[5.279801553115249e-5,5.2767999999758786e-5,173745,119,null,null,null,null,null,null,null,null],[5.543295992538333e-5,5.5414000000197916e-5,182490,125,null,null,null,null,null,null,null,null],[5.808897549286485e-5,5.805899999877795e-5,191202,131,null,null,null,null,null,null,null,null],[6.118498276919127e-5,6.116399999989142e-5,201366,138,null,null,null,null,null,null,null,null],[6.380898412317038e-5,6.37989999994204e-5,210078,144,null,null,null,null,null,null,null,null],[6.734603084623814e-5,6.733600000075057e-5,221727,152,null,null,null,null,null,null,null,null],[7.044099038466811e-5,7.042200000029197e-5,231858,159,null,null,null,null,null,null,null,null],[7.396697765216231e-5,7.395799999976305e-5,243507,167,null,null,null,null,null,null,null,null],[7.79549591243267e-5,7.793600000027823e-5,256674,176,null,null,null,null,null,null,null,null],[8.420698577538133e-5,8.420800000052964e-5,277365,185,null,null,null,null,null,null,null,null],[8.589000208303332e-5,8.58710000013474e-5,282744,194,null,null,null,null,null,null,null,null],[9.02980100363493e-5,9.027900000013744e-5,297297,204,null,null,null,null,null,null,null,null],[9.470595978200436e-5,9.469700000153125e-5,311850,214,null,null,null,null,null,null,null,null],[9.912502719089389e-5,9.910600000040404e-5,326403,224,null,null,null,null,null,null,null,null],[1.0441499762237072e-4,1.0441599999921891e-4,343827,236,null,null,null,null,null,null,null,null],[1.0927300900220871e-4,1.0924500000086823e-4,359766,247,null,null,null,null,null,null,null,null],[1.1504505528137088e-4,1.1502599999957397e-4,378807,260,null,null,null,null,null,null,null,null],[1.207650057040155e-4,1.2073600000128692e-4,397650,273,null,null,null,null,null,null,null,null],[1.269369968213141e-4,1.2691799999942077e-4,417978,287,null,null,null,null,null,null,null,null],[1.331180101260543e-4,1.330890000001972e-4,438306,301,null,null,null,null,null,null,null,null],[1.3974105240777135e-4,1.3973199999917085e-4,460185,316,null,null,null,null,null,null,null,null],[1.4679401647299528e-4,1.467849999983173e-4,483384,332,null,null,null,null,null,null,null,null],[1.5387701569125056e-4,1.5386799999994594e-4,506781,348,null,null,null,null,null,null,null,null],[1.6182195395231247e-4,1.618119999999834e-4,532950,366,null,null,null,null,null,null,null,null],[1.6974599566310644e-4,1.6973800000030792e-4,559053,384,null,null,null,null,null,null,null,null],[1.7814204329624772e-4,1.781229999995304e-4,586641,403,null,null,null,null,null,null,null,null],[1.874089939519763e-4,1.8740099999980941e-4,617199,424,null,null,null,null,null,null,null,null],[1.9669695757329464e-4,1.9667900000008842e-4,647790,445,null,null,null,null,null,null,null,null],[2.0639505237340927e-4,2.063770000013676e-4,679734,467,null,null,null,null,null,null,null,null],[2.1655397722497582e-4,2.165359999999339e-4,713196,490,null,null,null,null,null,null,null,null],[2.2760499268770218e-4,2.2758599999939122e-4,749529,515,null,null,null,null,null,null,null,null],[2.39066022913903e-4,2.3904700000088042e-4,787314,541,null,null,null,null,null,null,null,null],[2.5097798788920045e-4,2.509600000006884e-4,826584,568,null,null,null,null,null,null,null,null],[2.6334100402891636e-4,2.633330000012535e-4,867306,596,null,null,null,null,null,null,null,null],[2.7631502598524094e-4,2.7632799999999236e-4,910173,626,null,null,null,null,null,null,null,null],[2.877869992516935e-4,2.8777900000065415e-4,947826,657,null,null,null,null,null,null,null,null],[3.0225299997255206e-4,3.02256000001222e-4,995577,690,null,null,null,null,null,null,null,null],[3.195960307493806e-4,3.196079999998602e-4,1052832,725,null,null,null,null,null,null,null,null],[3.3249997068196535e-4,3.3251300000003425e-4,1095204,761,null,null,null,null,null,null,null,null],[3.480389714241028e-4,3.4802200000072503e-4,1146288,799,null,null,null,null,null,null,null,null],[3.654619795270264e-4,3.6545399999887707e-4,1203708,839,null,null,null,null,null,null,null,null],[3.838359843939543e-4,3.8382800000036355e-4,1264197,881,null,null,null,null,null,null,null,null],[4.0305202128365636e-4,4.0305499999959693e-4,1327557,925,null,null,null,null,null,null,null,null],[4.2343896348029375e-4,4.2343199999983483e-4,1394613,972,null,null,null,null,null,null,null,null],[4.4421799248084426e-4,4.442119999996663e-4,1463088,1020,null,null,null,null,null,null,null,null],[5.11122983880341e-4,5.113770000004791e-4,1685343,1071,null,null,null,null,null,null,null,null],[5.649129743687809e-4,5.657790000004326e-4,1864863,1125,null,null,null,null,null,null,null,null],[5.288660177029669e-4,5.288500000002472e-4,1741905,1181,null,null,null,null,null,null,null,null],[5.445950082503259e-4,5.445890000004283e-4,1793748,1240,null,null,null,null,null,null,null,null],[5.719070322811604e-4,5.719309999996369e-4,1883739,1302,null,null,null,null,null,null,null,null],[6.003300077281892e-4,6.0035399999947e-4,1977459,1367,null,null,null,null,null,null,null,null],[6.305960123427212e-4,6.305910000001802e-4,2077053,1436,null,null,null,null,null,null,null,null],[6.651509902440012e-4,6.651649999991349e-4,2190936,1507,null,null,null,null,null,null,null,null],[6.952270050533116e-4,6.952319999999901e-4,2289936,1583,null,null,null,null,null,null,null,null],[7.303129532374442e-4,7.303069999995415e-4,2405469,1662,null,null,null,null,null,null,null,null],[7.662390125915408e-4,7.662439999993609e-4,2523840,1745,null,null,null,null,null,null,null,null],[8.012339822016656e-4,8.012699999984108e-4,2639307,1832,null,null,null,null,null,null,null,null],[8.372419979423285e-4,8.372479999998461e-4,2757744,1924,null,null,null,null,null,null,null,null],[8.778069750405848e-4,8.778130000006712e-4,2891295,2020,null,null,null,null,null,null,null,null],[1.0285580065101385e-3,1.0288670000004885e-3,3389529,2121,null,null,null,null,null,null,null,null],[1.006507023703307e-3,1.0065249999993142e-3,3315378,2227,null,null,null,null,null,null,null,null],[1.0589450248517096e-3,1.0589730000010178e-3,3488067,2339,null,null,null,null,null,null,null,null],[1.1090689804404974e-3,1.1090660000014907e-3,3652968,2456,null,null,null,null,null,null,null,null],[1.1725460062734783e-3,1.1739479999999247e-3,3867270,2579,null,null,null,null,null,null,null,null],[1.2398220133036375e-3,1.240453000001196e-3,4086522,2708,null,null,null,null,null,null,null,null],[1.2719820369966328e-3,1.2720109999992957e-3,4190175,2843,null,null,null,null,null,null,null,null],[1.3195210485719144e-3,1.3195699999997146e-3,4346463,2985,null,null,null,null,null,null,null,null],[1.3700150302611291e-3,1.3700359999990752e-3,4512651,3134,null,null,null,null,null,null,null,null],[1.461666019167751e-3,1.4617269999988025e-3,4814667,3291,null,null,null,null,null,null,null,null],[1.5308150323107839e-3,1.5308269999998458e-3,5042235,3456,null,null,null,null,null,null,null,null],[1.584184996318072e-3,1.5842769999991901e-3,5218290,3629,null,null,null,null,null,null,null,null],[1.6983869718387723e-3,1.6986299999999233e-3,5595546,3810,null,null,null,null,null,null,null,null],[1.8204250372946262e-3,1.8203680000006273e-3,5993922,4001,null,null,null,null,null,null,null,null],[1.882841985207051e-3,1.8828849999987796e-3,6201987,4201,null,null,null,null,null,null,null,null],[1.97368097724393e-3,1.9738359999994515e-3,6501792,4411,null,null,null,null,null,null,null,null],[2.050864975899458e-3,2.0509299999993402e-3,6755562,4631,null,null,null,null,null,null,null,null],[2.1352230105549097e-3,2.1352879999998464e-3,7033422,4863,null,null,null,null,null,null,null,null],[2.273850957863033e-3,2.2739280000010353e-3,7489944,5106,null,null,null,null,null,null,null,null],[2.3465660051442683e-3,2.346624000001185e-3,7729425,5361,null,null,null,null,null,null,null,null],[2.458445029333234e-3,2.458483000001621e-3,8097903,5629,null,null,null,null,null,null,null,null],[2.5955300079658628e-3,2.5956100000001925e-3,8549541,5911,null,null,null,null,null,null,null,null],[2.729500993154943e-3,2.7295610000006576e-3,8990619,6207,null,null,null,null,null,null,null,null],[2.8775259852409363e-3,2.877597999999537e-3,9478425,6517,null,null,null,null,null,null,null,null],[3.027426020707935e-3,3.027498999999878e-3,9972138,6843,null,null,null,null,null,null,null,null],[3.1726370216347277e-3,3.1727110000012715e-3,10450374,7185,null,null,null,null,null,null,null,null],[3.291138040367514e-3,3.291232000000477e-3,10840731,7544,null,null,null,null,null,null,null,null],[3.4446140052750707e-3,3.44469000000025e-3,11346159,7921,null,null,null,null,null,null,null,null],[3.6377739743329585e-3,3.6378510000005804e-3,11982597,8318,null,null,null,null,null,null,null,null],[3.830633999314159e-3,3.8307319999990597e-3,12617913,8733,null,null,null,null,null,null,null,null],[4.0053100092336535e-3,4.005399000000409e-3,13193235,9170,null,null,null,null,null,null,null,null],[4.236862005200237e-3,4.236983000000194e-3,13956063,9629,null,null,null,null,null,null,null,null],[4.456611990462989e-3,4.456714999999889e-3,14679555,10110,null,null,null,null,null,null,null,null],[4.697209980804473e-3,4.697315999999674e-3,15472149,10616,null,null,null,null,null,null,null,null],[4.925485991407186e-3,4.925592999999395e-3,16224153,11146,null,null,null,null,null,null,null,null],[5.1727870013564825e-3,5.172885000000349e-3,17038824,11704,null,null,null,null,null,null,null,null],[5.3797230357304215e-3,5.379823000000172e-3,17720307,12289,null,null,null,null,null,null,null,null],[5.697716027498245e-3,5.697818999999882e-3,18767727,12903,null,null,null,null,null,null,null,null],[5.980243033263832e-3,5.98034799999958e-3,19698228,13549,null,null,null,null,null,null,null,null],[6.215341039933264e-3,6.215467999998836e-3,20472804,14226,null,null,null,null,null,null,null,null],[6.516443972941488e-3,6.51655199999901e-3,21464388,14937,null,null,null,null,null,null,null,null],[6.845708005130291e-3,6.8458380000002705e-3,22549131,15684,null,null,null,null,null,null,null,null],[7.189076975919306e-3,7.189211000000029e-3,23680140,16469,null,null,null,null,null,null,null,null],[7.66272097826004e-3,7.6628480000007215e-3,25240248,17292,null,null,null,null,null,null,null,null],[8.039874024689198e-3,8.034735000000737e-3,26482500,18157,null,null,null,null,null,null,null,null],[8.420703990850598e-3,8.420837000000958e-3,27736863,19065,null,null,null,null,null,null,null,null],[8.830268983729184e-3,8.830394000000297e-3,29085771,20018,null,null,null,null,null,null,null,null],[9.308790962677449e-3,9.308940000000376e-3,30662016,21019,null,null,null,null,null,null,null,null],[9.766754985321313e-3,9.766887999999696e-3,32170512,22070,null,null,null,null,null,null,null,null],[1.0183693026192486e-2,1.0183818999999872e-2,33543807,23173,null,null,null,null,null,null,null,null],[1.0633692028932273e-2,1.0633821000000765e-2,35026101,24332,null,null,null,null,null,null,null,null],[1.1242226988542825e-2,1.1242370999999807e-2,37030587,25549,null,null,null,null,null,null,null,null],[1.185463898582384e-2,1.18554280000005e-2,39050022,26826,null,null,null,null,null,null,null,null],[1.2504380021709949e-2,1.250454400000045e-2,41187927,28167,null,null,null,null,null,null,null,null],[1.3187765958718956e-2,1.3187923000000268e-2,43438725,29576,null,null,null,null,null,null,null,null],[1.3616184995044023e-2,1.3616344999999086e-2,44849937,31054,null,null,null,null,null,null,null,null],[1.429392903810367e-2,1.4294064999999634e-2,47082189,32607,null,null,null,null,null,null,null,null],[1.500673801638186e-2,1.500689999999949e-2,49430172,34238,null,null,null,null,null,null,null,null],[1.5821908018551767e-2,1.582210599999989e-2,52115316,35950,null,null,null,null,null,null,null,null],[1.6529787972103804e-2,1.653002099999945e-2,54451188,37747,null,null,null,null,null,null,null,null],[1.7364203988108784e-2,1.736436400000052e-2,57195237,39634,null,null,null,null,null,null,null,null],[1.8206144974101335e-2,1.8206359999998867e-2,59968689,41616,null,null,null,null,null,null,null,null],[1.9180441973730922e-2,1.9172479999999936e-2,63177642,43697,null,null,null,null,null,null,null,null],[2.009375498164445e-2,2.0093963999999076e-2,66186087,45882,null,null,null,null,null,null,null,null],[2.1129538014065474e-2,2.1129743999999562e-2,69597594,48176,null,null,null,null,null,null,null,null],[2.248708897968754e-2,2.248731499999934e-2,74069457,50585,null,null,null,null,null,null,null,null],[2.3606094997376204e-2,2.3606531000002207e-2,77756184,53114,null,null,null,null,null,null,null,null],[2.480761695187539e-2,2.480795099999966e-2,81713907,55770,null,null,null,null,null,null,null,null],[2.590688696363941e-2,2.590717899999717e-2,85333644,58558,null,null,null,null,null,null,null,null],[2.701885998249054e-2,2.701915099999752e-2,88996446,61486,null,null,null,null,null,null,null,null],[2.831632102606818e-2,2.8316561000000462e-2,93269781,64561,null,null,null,null,null,null,null,null],[2.9760804027318954e-2,2.9761075999999775e-2,98027787,67789,null,null,null,null,null,null,null,null],[3.12592190457508e-2,3.125951099999824e-2,102963366,71178,null,null,null,null,null,null,null,null],[3.278847201727331e-2,3.2788775000000214e-2,108000486,74737,null,null,null,null,null,null,null,null],[3.450718603562564e-2,3.4507492000003026e-2,113661537,78474,null,null,null,null,null,null,null,null],[3.6112571018747985e-2,3.6112899000002585e-2,118949556,82398,null,null,null,null,null,null,null,null],[3.792292601428926e-2,3.792329799999905e-2,124912755,86518,null,null,null,null,null,null,null,null],[3.9800018013920635e-2,3.980038299999933e-2,131095437,90843,null,null,null,null,null,null,null,null],[4.19951020157896e-2,4.1995474000000144e-2,138325671,95386,null,null,null,null,null,null,null,null],[4.395701101748273e-2,4.395739699999979e-2,144787896,100155,null,null,null,null,null,null,null,null],[4.60954190348275e-2,4.609192399999884e-2,151831812,105163,null,null,null,null,null,null,null,null],[4.833476495696232e-2,4.83351540000001e-2,159207576,110421,null,null,null,null,null,null,null,null],[5.059339804574847e-2,5.0593822999999816e-2,166647096,115942,null,null,null,null,null,null,null,null],[5.364891601493582e-2,5.364955499999979e-2,176712525,121739,null,null,null,null,null,null,null,null],[5.605629499768838e-2,5.605679199999969e-2,184641138,127826,null,null,null,null,null,null,null,null],[5.8864302991423756e-2,5.8864809999999324e-2,193890312,134217,null,null,null,null,null,null,null,null],[6.2030026980210096e-2,6.203066800000201e-2,204318213,140928,null,null,null,null,null,null,null,null],[6.498762301634997e-2,6.498815499999822e-2,214059516,147975,null,null,null,null,null,null,null,null],[6.824409600812942e-2,6.824202800000023e-2,224785869,155373,null,null,null,null,null,null,null,null],[7.13241709745489e-2,7.132474999999872e-2,234931059,163142,null,null,null,null,null,null,null,null],[7.524762797402218e-2,7.524829699999813e-2,247854618,171299,null,null,null,null,null,null,null,null],[7.866603299044073e-2,7.866668699999835e-2,259114152,179864,null,null,null,null,null,null,null,null],[7.78742769616656e-2,7.787506500000063e-2,256507053,188858,null,null,null,null,null,null,null,null],[7.825527800014243e-2,7.82560580000009e-2,257761878,198300,null,null,null,null,null,null,null,null],[8.179860602831468e-2,8.179931299999765e-2,269432361,208215,null,null,null,null,null,null,null,null],[8.625966601539403e-2,8.626036599999765e-2,284126370,218626,null,null,null,null,null,null,null,null],[9.022438997635618e-2,9.022524899999951e-2,297186219,229558,null,null,null,null,null,null,null,null],[9.546850004699081e-2,9.546942900000133e-2,314459541,241036,null,null,null,null,null,null,null,null],[9.989500499796122e-2,9.989594800000035e-2,329039766,253087,null,null,null,null,null,null,null,null],[0.10462252300931141,0.10462353000000135,344611641,265742,null,null,null,null,null,null,null,null],[0.1095868709962815,0.10958775499999973,360962613,279029,null,null,null,null,null,null,null,null],[0.11499033903237432,0.11499130300000004,378760998,292980,null,null,null,null,null,null,null,null],[0.12070650001987815,0.12070745600000166,397588884,307629,null,null,null,null,null,null,null,null],[0.12716227996861562,0.12716331399999703,418853358,323011,null,null,null,null,null,null,null,null],[0.13425873505184427,0.13425995100000065,442228875,339161,null,null,null,null,null,null,null,null],[0.14080686698434874,0.14080807199999867,463796949,356119,null,null,null,null,null,null,null,null],[0.14889366901479661,0.1488956960000003,490437915,373925,null,null,null,null,null,null,null,null],[0.15581089997431263,0.15581319900000068,513221610,392622,null,null,null,null,null,null,null,null],[0.17354262998560444,0.17354564099999692,571628805,412253,null,null,null,null,null,null,null,null],[0.19113452796591446,0.19113642800000008,629569512,432866,null,null,null,null,null,null,null,null],[0.2016421360312961,0.20164449399999995,664181496,454509,null,null,null,null,null,null,null,null],[0.21275134501047432,0.21275311400000163,700771137,477234,null,null,null,null,null,null,null,null],[0.22062326601007953,0.22062496299999879,726699303,501096,null,null,null,null,null,null,null,null],[0.23095548601122573,0.23095728899999912,760732170,526151,null,null,null,null,null,null,null,null],[0.243025005038362,0.24302704999999847,800488161,552458,null,null,null,null,null,null,null,null]],"reportName":"fib/11","reportNumber":3,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}}]+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>
+ www/report.html view
@@ -0,0 +1,1145 @@+<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[b._model.label];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = {};+ sortedReports.forEach(function(report) {+ var est = report.reportAnalysis.anMean;+ errorBars[report.groups.join(' / ')] = {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {}+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function(event) {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function(event, item) {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ return elt;+ }+ document.addEventListener('DOMContentLoaded', function() {+ var reportData = JSON.parse(document.getElementById('report-data')+ .getAttribute('data-report-json'))+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ var groups = groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>++ <div id="report-data" data-report-json='[{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.7673031436661194e-5,"confIntUDX":2.4498231316294646e-5,"confIntCL":5.0e-2},"estPoint":7.352684045588515e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4363683833451546e-4,"confIntUDX":1.1959645355241744e-4,"confIntCL":5.0e-2},"estPoint":0.9997798608065898},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":6.477227971451382e-4,"confIntUDX":6.952355605235709e-4,"confIntCL":5.0e-2},"estPoint":-1.5513186491827042e-3},"iters":{"estError":{"confIntLDX":4.808464575752763e-5,"confIntUDX":4.5444712975958174e-5,"confIntCL":5.0e-2},"estPoint":7.441753830166231e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.617182604553123e-5,"confIntUDX":2.7852819112811152e-5,"confIntCL":5.0e-2},"estPoint":7.675780512652575e-5},"anOutlierVar":{"ovFraction":2.7755102040816323e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[7.110913212422929e-3,7.1142633655731195e-3,7.117613518723309e-3,7.1209636718735e-3,7.12431382502369e-3,7.127663978173881e-3,7.13101413132407e-3,7.134364284474261e-3,7.137714437624451e-3,7.141064590774641e-3,7.144414743924831e-3,7.147764897075022e-3,7.1511150502252116e-3,7.154465203375402e-3,7.157815356525593e-3,7.161165509675783e-3,7.164515662825973e-3,7.167865815976163e-3,7.171215969126354e-3,7.174566122276543e-3,7.177916275426734e-3,7.181266428576924e-3,7.184616581727114e-3,7.1879667348773045e-3,7.191316888027495e-3,7.1946670411776855e-3,7.198017194327875e-3,7.201367347478066e-3,7.204717500628256e-3,7.208067653778446e-3,7.211417806928636e-3,7.214767960078827e-3,7.218118113229016e-3,7.221468266379207e-3,7.224818419529397e-3,7.228168572679588e-3,7.2315187258297775e-3,7.234868878979968e-3,7.2382190321301585e-3,7.241569185280348e-3,7.244919338430539e-3,7.248269491580729e-3,7.251619644730919e-3,7.254969797881109e-3,7.2583199510313e-3,7.26167010418149e-3,7.26502025733168e-3,7.26837041048187e-3,7.271720563632061e-3,7.2750707167822505e-3,7.278420869932441e-3,7.2817710230826315e-3,7.285121176232821e-3,7.288471329383012e-3,7.291821482533202e-3,7.295171635683393e-3,7.298521788833582e-3,7.301871941983773e-3,7.305222095133963e-3,7.308572248284153e-3,7.3119224014343434e-3,7.315272554584534e-3,7.318622707734724e-3,7.321972860884914e-3,7.325323014035105e-3,7.328673167185295e-3,7.332023320335485e-3,7.335373473485675e-3,7.338723626635866e-3,7.342073779786055e-3,7.345423932936246e-3,7.348774086086436e-3,7.352124239236626e-3,7.3554743923868165e-3,7.358824545537007e-3,7.3621746986871975e-3,7.365524851837387e-3,7.368875004987578e-3,7.372225158137768e-3,7.375575311287958e-3,7.378925464438148e-3,7.382275617588339e-3,7.385625770738528e-3,7.388975923888719e-3,7.392326077038909e-3,7.3956762301891e-3,7.3990263833392895e-3,7.40237653648948e-3,7.4057266896396705e-3,7.40907684278986e-3,7.412426995940051e-3,7.415777149090241e-3,7.419127302240431e-3,7.422477455390621e-3,7.425827608540812e-3,7.429177761691002e-3,7.432527914841192e-3,7.435878067991382e-3,7.439228221141573e-3,7.4425783742917626e-3,7.445928527441953e-3,7.4492786805921436e-3,7.452628833742333e-3,7.455978986892524e-3,7.459329140042714e-3,7.462679293192905e-3,7.466029446343094e-3,7.469379599493285e-3,7.472729752643475e-3,7.476079905793665e-3,7.4794300589438555e-3,7.482780212094046e-3,7.4861303652442365e-3,7.489480518394426e-3,7.492830671544617e-3,7.496180824694807e-3,7.499530977844997e-3,7.502881130995187e-3,7.506231284145378e-3,7.509581437295567e-3,7.512931590445758e-3,7.516281743595948e-3,7.519631896746138e-3,7.5229820498963285e-3,7.526332203046519e-3,7.5296823561967095e-3,7.533032509346899e-3,7.53638266249709e-3],"kdeType":"time","kdePDF":[118.01429634900273,142.81157951846535,192.15076063327294,264.9119529604066,358.13246994513844,466.0784241748318,579.8434768526234,687.8452728114656,777.3205052197104,836.5584858639492,857.2926944762239,836.5327263912449,777.2468165879111,687.6661261960886,579.4359430133301,465.20111922232223,356.3440109338181,261.46259754321534,185.86645295398066,132.01989156739464,100.60152743518923,91.73922295061115,106.00956531440474,144.91142516865304,210.6816454084448,305.4851665714372,430.16642434189174,582.8779255315127,757.977592940801,945.5744927498639,1131.9834249897337,1301.1386335109935,1436.770706585392,1524.9437044177275,1556.4456822550533,1528.5533024108545,1445.8364546890907,1319.8867781206243,1168.0849501401392,1011.7050621524661,873.7414192535591,776.8114504665884,741.3573760985696,784.2013420739121,917.3861603689364,1147.214627243901,1473.4792768117507,1888.9796098169106,2379.4621863881125,2924.0457046504616,3496.056949911888,4064.1245557764128,4593.459917124215,5047.487046609905,5390.207188042955,5589.6741944449805,5622.579417716365,5479.291127685649,5168.078356657122,4717.050682182178,4172.771431590369,3595.4359022323288,3051.546889306065,2605.6970313088423,2313.103792461381,2213.9963681432923,2330.1618520673774,2663.3315370979108,3194.890620555311,3886.6297048387128,4682.704905077032,5513.326766473005,6300.705755342448,6967.347627661859,7446.006629654731,7689.725730951615,7679.776713772189,7429.29702289993,6981.178029873522,6400.176394061361,5760.874346587475,5134.406020771779,4577.265465393758,4124.8103483095665,3790.510619286876,3570.159681454621,3448.862676810305,3408.1313765207706,3430.9286858300857,3503.6875116870588,3615.6216684882606,3756.535387629734,3914.5654382234325,4074.923511345227,4220.04595194685,4330.950559463086,4389.271360348402,4379.421610984287,4290.49849450514,4117.723468001804,3863.307037231868,3536.6377847286935,3153.696137557093,2735.656939209544,2306.7873208547567,1891.9164947390327,1513.8694609325198,1191.2562804764402,936.890058709578,756.928226449529,650.6799671194477,610.9647768387684,624.9506859065879,675.4858066023567,742.9693880643754,807.7193875147334,852.5911470747055,865.3815583820175,840.4511180108798,779.10935732792,688.629979846855,580.171943026891,466.2095811959294,358.18241600293067,264.9300910133163,192.15705225170763,142.81370568010297,118.0151422333616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":0,"reportName":"Int/IntMap/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[6.217200999344641e-3,6.217289000000001e-3,12385108,1,null,null,null,null,null,null,null],[1.2872116999460559e-2,1.287214e-2,25641662,2,null,null,null,null,null,null,null],[2.0542241000839567e-2,2.0542788e-2,40921670,3,null,null,null,null,null,null,null],[2.655011899969395e-2,2.6549957e-2,52887974,4,null,null,null,null,null,null,null],[3.5731844999645546e-2,3.573150900000001e-2,71177493,5,null,null,null,null,null,null,null],[4.380239400052233e-2,4.380199800000001e-2,87253916,6,null,null,null,null,null,null,null],[5.1011092999942775e-2,5.1010658999999986e-2,101613560,7,null,null,null,null,null,null,null],[5.784996999955183e-2,5.784943499999998e-2,115236335,8,null,null,null,null,null,null,null],[6.498449500031711e-2,6.498436899999999e-2,129449176,9,null,null,null,null,null,null,null],[7.455372299955343e-2,7.455297299999997e-2,148510076,10,null,null,null,null,null,null,null],[8.099804999983462e-2,8.099716000000001e-2,161346714,11,null,null,null,null,null,null,null],[8.910338900022907e-2,8.910246399999999e-2,177492396,12,null,null,null,null,null,null,null],[9.576250999998592e-2,9.576151899999996e-2,190757234,13,null,null,null,null,null,null,null],[0.10393232699971122,0.10393172099999992,207032311,14,null,null,null,null,null,null,null],[0.10926871799983928,0.10926744,217660945,15,null,null,null,null,null,null,null],[0.11791101200014964,0.11789877100000001,234876173,16,null,null,null,null,null,null,null],[0.12528242300049897,0.125277211,249564389,17,null,null,null,null,null,null,null],[0.1315712129999156,0.13157116600000007,262090086,18,null,null,null,null,null,null,null],[0.1383157280006344,0.13831417200000007,275522106,19,null,null,null,null,null,null,null],[0.14789397500044288,0.14789226700000002,294601696,20,null,null,null,null,null,null,null],[0.1543316759998561,0.15432983600000005,307425324,21,null,null,null,null,null,null,null],[0.16356243999962317,0.16355443599999986,325812893,22,null,null,null,null,null,null,null],[0.16805485700024292,0.16805287400000002,334761487,23,null,null,null,null,null,null,null],[0.18391187399993214,0.18389842900000009,366349141,25,null,null,null,null,null,null,null],[0.18976665299942397,0.189764539,378011458,26,null,null,null,null,null,null,null],[0.20094363000043813,0.20094126,400275259,27,null,null,null,null,null,null,null],[0.20588823399975809,0.20588032200000006,410124560,28,null,null,null,null,null,null,null],[0.22099266500026715,0.22096891399999974,440212221,30,null,null,null,null,null,null,null],[0.22634645000016462,0.22634404800000008,450877515,31,null,null,null,null,null,null,null],[0.24570820200005983,0.24569896400000024,489444672,33,null,null,null,null,null,null,null],[0.25768690800032346,0.2576787909999996,513306881,35,null,null,null,null,null,null,null],[0.26550675999988016,0.26549695100000026,528883233,36,null,null,null,null,null,null,null],[0.28168039899992436,0.28168020699999996,561106751,38,null,null,null,null,null,null,null],[0.3000370749996364,0.3000333509999997,597666429,40,null,null,null,null,null,null,null],[0.31078128599983756,0.3107652009999997,619068834,42,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0542696540582347e-4,"confIntUDX":1.1349446707542565e-4,"confIntCL":5.0e-2},"estPoint":2.384691264383546e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.3233575049420576e-4,"confIntUDX":1.2240659069284732e-4,"confIntCL":5.0e-2},"estPoint":0.9997718982669127},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.2532732667691477e-3,"confIntUDX":1.5161923492544769e-3,"confIntCL":5.0e-2},"estPoint":-6.157843511237581e-4},"iters":{"estError":{"confIntLDX":1.8985383309628664e-4,"confIntUDX":1.8548652174593325e-4,"confIntCL":5.0e-2},"estPoint":2.39153277614222e-2}}}],"anStdDev":{"estError":{"confIntLDX":5.615478647105846e-5,"confIntUDX":1.0931308737006733e-4,"confIntCL":5.0e-2},"estPoint":2.3985870005862405e-4},"anOutlierVar":{"ovFraction":4.986149584487534e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[2.3371443158384863e-2,2.3380339600115926e-2,2.3389236041846985e-2,2.3398132483578048e-2,2.340702892530911e-2,2.341592536704017e-2,2.3424821808771232e-2,2.3433718250502295e-2,2.3442614692233354e-2,2.3451511133964417e-2,2.346040757569548e-2,2.346930401742654e-2,2.3478200459157602e-2,2.3487096900888665e-2,2.3495993342619724e-2,2.3504889784350787e-2,2.351378622608185e-2,2.352268266781291e-2,2.353157910954397e-2,2.3540475551275034e-2,2.3549371993006094e-2,2.3558268434737156e-2,2.356716487646822e-2,2.357606131819928e-2,2.358495775993034e-2,2.3593854201661404e-2,2.3602750643392463e-2,2.3611647085123526e-2,2.362054352685459e-2,2.3629439968585648e-2,2.363833641031671e-2,2.3647232852047773e-2,2.3656129293778833e-2,2.3665025735509895e-2,2.3673922177240958e-2,2.3682818618972017e-2,2.369171506070308e-2,2.3700611502434143e-2,2.3709507944165202e-2,2.3718404385896265e-2,2.3727300827627328e-2,2.3736197269358387e-2,2.374509371108945e-2,2.3753990152820512e-2,2.376288659455157e-2,2.3771783036282634e-2,2.3780679478013697e-2,2.3789575919744756e-2,2.379847236147582e-2,2.3807368803206882e-2,2.381626524493794e-2,2.3825161686669004e-2,2.3834058128400067e-2,2.3842954570131126e-2,2.385185101186219e-2,2.386074745359325e-2,2.386964389532431e-2,2.3878540337055373e-2,2.3887436778786436e-2,2.38963332205175e-2,2.3905229662248558e-2,2.391412610397962e-2,2.392302254571068e-2,2.3931918987441743e-2,2.3940815429172806e-2,2.394971187090387e-2,2.3958608312634928e-2,2.396750475436599e-2,2.3976401196097053e-2,2.3985297637828112e-2,2.3994194079559175e-2,2.4003090521290238e-2,2.4011986963021297e-2,2.402088340475236e-2,2.4029779846483423e-2,2.4038676288214482e-2,2.4047572729945545e-2,2.4056469171676607e-2,2.4065365613407667e-2,2.407426205513873e-2,2.4083158496869792e-2,2.409205493860085e-2,2.4100951380331914e-2,2.4109847822062977e-2,2.4118744263794036e-2,2.41276407055251e-2,2.413653714725616e-2,2.414543358898722e-2,2.4154330030718284e-2,2.4163226472449346e-2,2.4172122914180406e-2,2.418101935591147e-2,2.418991579764253e-2,2.419881223937359e-2,2.4207708681104653e-2,2.4216605122835716e-2,2.4225501564566775e-2,2.4234398006297838e-2,2.42432944480289e-2,2.425219088975996e-2,2.4261087331491023e-2,2.4269983773222085e-2,2.4278880214953145e-2,2.4287776656684208e-2,2.429667309841527e-2,2.430556954014633e-2,2.4314465981877392e-2,2.4323362423608455e-2,2.4332258865339514e-2,2.4341155307070577e-2,2.435005174880164e-2,2.43589481905327e-2,2.4367844632263762e-2,2.4376741073994825e-2,2.4385637515725884e-2,2.4394533957456947e-2,2.440343039918801e-2,2.441232684091907e-2,2.442122328265013e-2,2.4430119724381194e-2,2.4439016166112253e-2,2.4447912607843316e-2,2.445680904957438e-2,2.4465705491305438e-2,2.44746019330365e-2,2.4483498374767564e-2,2.4492394816498623e-2,2.4501291258229686e-2],"kdeType":"time","kdePDF":[969.3268907095556,969.7035149475997,970.4551990501163,971.5788203698887,973.0697101554875,974.9216717295551,977.1270045855246,979.6765342831832,982.5596479951954,985.7643355294048,989.2772356256795,993.0836873013857,997.1677859964562,1001.5124442475768,1006.0994566014324,1010.9095684592555,1015.9225485293194,1021.1172645504552,1026.4717619383418,1031.9633449971332,1037.5686603320748,1043.2637820940226,1049.0242986842884,1054.8254005478655,1060.641968684872,1066.448663513818,1072.2200137260818,1077.9305047785447,1083.554666680686,1089.0671607433583,1094.4428649688766,1099.6569577757969,1104.6849997666639,1109.5030132629565,1114.087559348273,1118.4158121783103,1122.4656303342906,1126.2156250149592,1129.6452248810256,1132.734737384782,1135.465406436462,1137.8194662776027,1139.780191450091,1141.3319427676643,1142.4602092141988,1143.151645710245,1143.3941067056578,1143.1766755720387,1142.4896897837286,1141.324761890513,1139.6747962987517,1137.5340018905526,1134.897900522651,1131.7633314580928,1128.128451794407,1123.9927329620102,1119.3569533758568,1114.2231873321757,1108.5947902502799,1102.4763803672042,1095.873817000148,1088.794175498636,1081.245719014775,1073.2378672263028,1064.7811621529986,1055.8872312128738,1046.5687476700082,1036.839388631338,1026.7137907548217,1016.2075038364884,1005.33694244864,994.1193358061831,982.5726760423997,970.7156650796904,958.5676602845599,946.1486190996941,933.4790428489173,920.5799199134742,907.472668479991,894.1790790619275,880.7212569968967,867.1215651222017,853.4025668298644,839.586969700616,825.6975699133234,811.7571976224896,797.7886634913338,783.8147065618766,769.8579436360491,755.9408203334068,742.0855639812977,728.3141384825406,714.6482012936629,701.1090626337417,687.7176470297745,674.4944572895516,661.4595409770977,648.6324594492095,636.0322594943761,623.6774475977357,611.5859668376994,599.7751764017407,588.2618336906837,577.0620789628656,566.1914224519323,555.6647338749659,545.496234231284,535.6994897768194,526.2874080445964,517.272235768688,508.66555855728706,500.47830215030393,492.7207350883447,485.4024726131353,478.53248161453166,472.1190864362607,466.1699753515287,460.6922075206466,455.69222024583786,451.17583634342736,447.1482714605948,443.61414117275075,440.57746770828635,438.0416861598256,436.00965005505424,434.4836361755732,433.465348528817,432.95592139577457]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":1,"reportName":"Int/IntMap/random","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.5541426000017964e-2,2.554147699999998e-2,50879350,1,null,null,null,null,null,null,null],[4.806923999967694e-2,4.806906600000005e-2,95753877,2,null,null,null,null,null,null,null],[7.167264300005627e-2,7.167202199999956e-2,142771087,3,null,null,null,null,null,null,null],[9.762854899963713e-2,9.762766700000025e-2,194475137,4,null,null,null,null,null,null,null],[0.12057168999945134,0.12056434900000035,240176454,5,null,null,null,null,null,null,null],[0.1407935830002316,0.1407865450000001,280458875,6,null,null,null,null,null,null,null],[0.16496227300012833,0.16496033300000068,328601328,7,null,null,null,null,null,null,null],[0.18833427299978212,0.1883161900000001,375157510,8,null,null,null,null,null,null,null],[0.21292828399964492,0.21292578200000012,424148246,9,null,null,null,null,null,null,null],[0.23763062199941487,0.23762774500000017,473354739,10,null,null,null,null,null,null,null],[0.26107708899962745,0.2610681640000001,520059293,11,null,null,null,null,null,null,null],[0.2858837960002347,0.28586835500000074,569473933,12,null,null,null,null,null,null,null],[0.3072580120006023,0.30724835599999967,612050130,13,null,null,null,null,null,null,null],[0.33692351300032897,0.33690281200000083,671143371,14,null,null,null,null,null,null,null],[0.3573156359998393,0.35731314900000033,711767792,15,null,null,null,null,null,null,null],[0.3800062059999618,0.3800015489999993,756963099,16,null,null,null,null,null,null,null],[0.40747259199997643,0.4074561369999987,811675392,17,null,null,null,null,null,null,null],[0.43036303000008047,0.4303513530000007,857272424,18,null,null,null,null,null,null,null],[0.4577799150001738,0.4577572090000004,911886498,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":9.279852681798491e-5,"confIntUDX":1.2486348868947367e-4,"confIntCL":5.0e-2},"estPoint":7.604115020994802e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.906091292551817e-3,"confIntUDX":3.649340090298714e-3,"confIntCL":5.0e-2},"estPoint":0.9956959306868398},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.6865724837684237e-3,"confIntUDX":1.7813090709538108e-3,"confIntCL":5.0e-2},"estPoint":-3.075320241693394e-3},"iters":{"estError":{"confIntLDX":1.5213056849250773e-4,"confIntUDX":2.179650372497368e-4,"confIntCL":5.0e-2},"estPoint":7.859752272345666e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.0005736098852002e-4,"confIntUDX":1.4607896645360828e-4,"confIntCL":5.0e-2},"estPoint":3.0646956799213783e-4},"anOutlierVar":{"ovFraction":0.16765992872329774,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[6.979644702203207e-3,6.993795983435156e-3,7.007947264667104e-3,7.022098545899053e-3,7.036249827131001e-3,7.050401108362949e-3,7.064552389594898e-3,7.078703670826847e-3,7.0928549520587955e-3,7.107006233290743e-3,7.121157514522692e-3,7.135308795754641e-3,7.149460076986589e-3,7.163611358218538e-3,7.177762639450486e-3,7.191913920682434e-3,7.206065201914383e-3,7.220216483146332e-3,7.23436776437828e-3,7.248519045610228e-3,7.262670326842177e-3,7.276821608074126e-3,7.290972889306074e-3,7.305124170538023e-3,7.319275451769971e-3,7.333426733001919e-3,7.347578014233868e-3,7.361729295465817e-3,7.375880576697765e-3,7.390031857929713e-3,7.404183139161662e-3,7.418334420393611e-3,7.432485701625559e-3,7.446636982857508e-3,7.460788264089456e-3,7.474939545321404e-3,7.489090826553353e-3,7.503242107785302e-3,7.51739338901725e-3,7.531544670249198e-3,7.545695951481147e-3,7.559847232713095e-3,7.573998513945044e-3,7.588149795176993e-3,7.6023010764089405e-3,7.616452357640889e-3,7.630603638872838e-3,7.644754920104787e-3,7.658906201336735e-3,7.673057482568683e-3,7.687208763800632e-3,7.70136004503258e-3,7.715511326264529e-3,7.729662607496478e-3,7.743813888728426e-3,7.757965169960374e-3,7.772116451192323e-3,7.786267732424272e-3,7.80041901365622e-3,7.814570294888168e-3,7.828721576120117e-3,7.842872857352065e-3,7.857024138584013e-3,7.871175419815963e-3,7.88532670104791e-3,7.89947798227986e-3,7.913629263511808e-3,7.927780544743756e-3,7.941931825975706e-3,7.956083107207653e-3,7.970234388439601e-3,7.984385669671551e-3,7.998536950903499e-3,8.012688232135447e-3,8.026839513367396e-3,8.040990794599344e-3,8.055142075831292e-3,8.069293357063242e-3,8.08344463829519e-3,8.097595919527138e-3,8.111747200759087e-3,8.125898481991035e-3,8.140049763222983e-3,8.154201044454933e-3,8.16835232568688e-3,8.182503606918828e-3,8.196654888150778e-3,8.210806169382726e-3,8.224957450614676e-3,8.239108731846623e-3,8.253260013078571e-3,8.26741129431052e-3,8.281562575542469e-3,8.295713856774417e-3,8.309865138006366e-3,8.324016419238314e-3,8.338167700470262e-3,8.352318981702212e-3,8.36647026293416e-3,8.380621544166108e-3,8.394772825398057e-3,8.408924106630005e-3,8.423075387861953e-3,8.437226669093903e-3,8.45137795032585e-3,8.465529231557798e-3,8.479680512789748e-3,8.493831794021696e-3,8.507983075253644e-3,8.522134356485593e-3,8.536285637717541e-3,8.550436918949491e-3,8.564588200181439e-3,8.578739481413387e-3,8.592890762645335e-3,8.607042043877284e-3,8.621193325109232e-3,8.635344606341182e-3,8.64949588757313e-3,8.663647168805078e-3,8.677798450037027e-3,8.691949731268975e-3,8.706101012500923e-3,8.720252293732873e-3,8.73440357496482e-3,8.748554856196768e-3,8.762706137428718e-3,8.776857418660666e-3],"kdeType":"time","kdePDF":[2.7795723032893136,5.600622738918413,12.803541343009115,27.52535688928007,54.245717892452625,97.97269084901994,162.77854840243896,250.1239227261839,357.7751285154487,479.90308579090583,608.178768616745,733.0474335560667,844.6219360579805,933.6032734114207,993.1051401895346,1021.2850369578108,1022.9857767242689,1008.1763008011659,986.9669485148768,963.9476097051984,935.7048137845438,893.2973467550463,827.9592293294309,736.3914188886027,622.9567641278716,498.50587176223365,377.30219919373485,273.7853851094067,200.28130746313514,165.94599937114162,176.5032604783209,233.94538256067221,335.707219920663,473.927986976819,636.484266658851,811.270784192961,993.1255249134109,1189.7852020792357,1421.6369595395943,1712.0027663907226,2070.2339681977764,2475.84104168331,2873.6978998411364,3185.773168224762,3336.1693514789763,3278.8999077702233,3016.2343989945884,2600.096019364657,2116.7534521405396,1661.6084714106578,1313.3889045753835,1115.4242019138953,1068.040393346764,1132.7638712135933,1246.6148618932743,1342.5641663424235,1370.037287677908,1308.5525902302368,1169.725834097552,987.624417693858,802.3974229335422,644.5846660995325,526.414126880675,442.53310070693703,378.00299164921944,318.315856972742,256.17240659738445,192.55946256857746,133.2920994369606,84.29089470359489,48.486442060445654,25.312269828986544,11.978173537282396,5.134803507122528,1.9933598540969082,0.7006509355579221,0.22298653668158575,6.439315907883615e-2,1.7595513704945033e-2,7.908806665181642e-3,1.7594785496209096e-2,6.438793965981933e-2,0.22295311077966698,0.700456853293203,1.9923376402239,5.129918151803871,11.956979022385074,25.228760408252633,48.187430061288765,83.31726880296911,130.40663611943782,184.76842925471055,236.98412172141198,275.15292740296775,289.19610143786826,275.15292741281826,236.98412180603245,184.76842990614935,130.40664065872127,83.31729743579987,48.187593556302616,25.22960550809592,11.960933368319566,5.146667740730532,2.056561432162932,0.9233767918281218,0.9233767918284924,2.056561432162685,5.1466677407312735,11.960933368319504,25.229605508096753,48.18759355630268,83.31729743580114,130.40664065873042,184.76842990625147,236.98412180709252,275.1529274227712,289.1961015224981,275.1529280544073,236.98412626069674,184.76845788755006,130.40679961455365,83.3181139038632,48.191384417073884,25.24551008074994,12.021203455810904,5.352842545004755,2.6927893027822174]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":2,"reportName":"Int/IntMap/revsorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":2,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[7.5310030006221496e-3,7.531241000000577e-3,15002629,1,null,null,null,null,null,null,null],[1.5792101000442926e-2,1.579239800000032e-2,31458871,2,null,null,null,null,null,null,null],[2.2902593000253546e-2,2.2902477000000587e-2,45622222,3,null,null,null,null,null,null,null],[3.053714999987278e-2,3.053694100000115e-2,60829969,4,null,null,null,null,null,null,null],[3.641659799995978e-2,3.6416337000000354e-2,72541814,5,null,null,null,null,null,null,null],[4.357454299952224e-2,4.357419599999979e-2,86800135,6,null,null,null,null,null,null,null],[4.990588700002263e-2,4.9905448999998825e-2,99411999,7,null,null,null,null,null,null,null],[5.772824099949503e-2,5.772770399999949e-2,114994010,8,null,null,null,null,null,null,null],[6.455245799952536e-2,6.454544900000059e-2,128587691,9,null,null,null,null,null,null,null],[7.194233400059602e-2,7.194153200000031e-2,143307897,10,null,null,null,null,null,null,null],[8.393108999916876e-2,8.39301790000011e-2,167189101,11,null,null,null,null,null,null,null],[9.109348099991621e-2,9.109265200000038e-2,181456822,12,null,null,null,null,null,null,null],[9.726328600027045e-2,9.725631699999937e-2,193746815,13,null,null,null,null,null,null,null],[0.10526152399961575,0.10525331700000073,209678890,14,null,null,null,null,null,null,null],[0.11368188699998427,0.1136805660000011,226452054,15,null,null,null,null,null,null,null],[0.12165439299951686,0.12165304400000032,242333043,16,null,null,null,null,null,null,null],[0.13188344099944516,0.1318819720000004,262709306,17,null,null,null,null,null,null,null],[0.13716816299984202,0.1371667710000004,273236445,18,null,null,null,null,null,null,null],[0.14272178200008057,0.14271470299999933,284299068,19,null,null,null,null,null,null,null],[0.1465893770000548,0.14658170299999895,292002893,20,null,null,null,null,null,null,null],[0.15938492900022538,0.1593830280000006,317491219,21,null,null,null,null,null,null,null],[0.16804903100000956,0.16804709100000004,334750019,22,null,null,null,null,null,null,null],[0.17630220299997745,0.1763001269999993,351190116,23,null,null,null,null,null,null,null],[0.18966936300057569,0.1896614809999999,377817265,25,null,null,null,null,null,null,null],[0.2243043319995195,0.22429415000000041,446809250,26,null,null,null,null,null,null,null],[0.2129039740002554,0.2128824809999994,424099800,27,null,null,null,null,null,null,null],[0.2171951979998994,0.21719259800000046,432647863,28,null,null,null,null,null,null,null],[0.23364544299965928,0.23364259599999926,465416257,30,null,null,null,null,null,null,null],[0.25729104099991673,0.25727712700000005,512521495,31,null,null,null,null,null,null,null],[0.2514050470008442,0.2513960759999989,500792689,33,null,null,null,null,null,null,null],[0.26684604000001855,0.26684281300000023,531551080,35,null,null,null,null,null,null,null],[0.27907214100014244,0.2790688120000002,555905224,36,null,null,null,null,null,null,null],[0.2965459089991782,0.2965244459999994,590712411,38,null,null,null,null,null,null,null],[0.3030382990000362,0.30302147999999995,603644981,40,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":4.195674442251593e-5,"confIntUDX":7.042809224307514e-5,"confIntCL":5.0e-2},"estPoint":1.7274672713066576e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4227653629372838e-4,"confIntUDX":9.171603223023794e-5,"confIntCL":5.0e-2},"estPoint":0.9998546641366959},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":7.010875088004954e-4,"confIntUDX":7.005196404700031e-4,"confIntCL":5.0e-2},"estPoint":8.778527701891882e-5},"iters":{"estError":{"confIntLDX":8.079879093980322e-5,"confIntUDX":7.620113752610305e-5,"confIntCL":5.0e-2},"estPoint":1.7253165168961873e-2}}}],"anStdDev":{"estError":{"confIntLDX":4.619004871269703e-5,"confIntUDX":6.924535064051809e-5,"confIntCL":5.0e-2},"estPoint":1.3506195745557274e-4},"anOutlierVar":{"ovFraction":4.15879017013232e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.699506592778764e-2,1.7000972853250158e-2,1.7006879778712677e-2,1.7012786704175196e-2,1.7018693629637715e-2,1.7024600555100234e-2,1.7030507480562757e-2,1.7036414406025276e-2,1.7042321331487795e-2,1.7048228256950314e-2,1.7054135182412833e-2,1.7060042107875352e-2,1.706594903333787e-2,1.707185595880039e-2,1.707776288426291e-2,1.708366980972543e-2,1.7089576735187947e-2,1.7095483660650466e-2,1.710139058611299e-2,1.7107297511575508e-2,1.7113204437038027e-2,1.7119111362500546e-2,1.7125018287963065e-2,1.7130925213425584e-2,1.7136832138888104e-2,1.7142739064350623e-2,1.714864598981314e-2,1.715455291527566e-2,1.716045984073818e-2,1.7166366766200702e-2,1.717227369166322e-2,1.717818061712574e-2,1.718408754258826e-2,1.718999446805078e-2,1.7195901393513298e-2,1.7201808318975817e-2,1.7207715244438336e-2,1.7213622169900855e-2,1.7219529095363374e-2,1.7225436020825893e-2,1.7231342946288412e-2,1.7237249871750935e-2,1.7243156797213454e-2,1.7249063722675973e-2,1.7254970648138492e-2,1.726087757360101e-2,1.726678449906353e-2,1.727269142452605e-2,1.727859834998857e-2,1.7284505275451088e-2,1.7290412200913607e-2,1.7296319126376126e-2,1.730222605183865e-2,1.7308132977301167e-2,1.7314039902763687e-2,1.7319946828226206e-2,1.7325853753688725e-2,1.7331760679151244e-2,1.7337667604613763e-2,1.7343574530076282e-2,1.73494814555388e-2,1.735538838100132e-2,1.736129530646384e-2,1.736720223192636e-2,1.737310915738888e-2,1.73790160828514e-2,1.738492300831392e-2,1.7390829933776438e-2,1.7396736859238957e-2,1.7402643784701476e-2,1.7408550710163995e-2,1.7414457635626514e-2,1.7420364561089034e-2,1.7426271486551553e-2,1.743217841201407e-2,1.7438085337476594e-2,1.7443992262939113e-2,1.7449899188401632e-2,1.745580611386415e-2,1.746171303932667e-2,1.746761996478919e-2,1.747352689025171e-2,1.7479433815714228e-2,1.7485340741176747e-2,1.7491247666639266e-2,1.7497154592101785e-2,1.7503061517564304e-2,1.7508968443026827e-2,1.7514875368489346e-2,1.7520782293951865e-2,1.7526689219414384e-2,1.7532596144876903e-2,1.7538503070339422e-2,1.754440999580194e-2,1.755031692126446e-2,1.755622384672698e-2,1.75621307721895e-2,1.7568037697652018e-2,1.757394462311454e-2,1.757985154857706e-2,1.758575847403958e-2,1.7591665399502097e-2,1.7597572324964617e-2,1.7603479250427136e-2,1.7609386175889655e-2,1.7615293101352174e-2,1.7621200026814693e-2,1.7627106952277212e-2,1.763301387773973e-2,1.763892080320225e-2,1.7644827728664773e-2,1.7650734654127292e-2,1.765664157958981e-2,1.766254850505233e-2,1.766845543051485e-2,1.7674362355977368e-2,1.7680269281439887e-2,1.7686176206902406e-2,1.7692083132364925e-2,1.7697990057827444e-2,1.7703896983289964e-2,1.7709803908752486e-2,1.7715710834215005e-2,1.7721617759677524e-2,1.7727524685140043e-2,1.7733431610602562e-2,1.773933853606508e-2,1.77452454615276e-2],"kdeType":"time","kdePDF":[903.2314303503553,907.3546793762542,915.5872093668958,927.9012564080563,944.2555895913632,964.5959663915735,988.8556717695703,1016.9560882993056,1048.807238155537,1084.3082353045666,1123.3475880248732,1165.8032980328753,1211.542712847758,1260.4221022068978,1312.285946723254,1366.9659467387323,1424.2797804859406,1484.0296621131074,1546.0007706697277,1609.9596395953456,1675.6526114501344,1742.8044735311173,1811.1173957587903,1880.2702921430148,1949.91872085936,2019.6954254007885,2089.211600647053,2158.0589435678,2225.8125195059015,2292.0344427112364,2356.278335379331,2418.094494429256,2477.035661264138,2532.6632584443346,2584.553930149879,2632.306201945743,2675.5470608932483,2713.938250378404,2747.1820757075534,2775.026526718459,2797.2695421326785,2813.7622664933797,2824.411183277734,2829.179045801061,2828.0845692319012,2821.2008906168144,2808.652847375272,2790.6131663688293,2767.297693563332,2738.959826856815,2705.884340463947,2668.3808072806055,2626.7768352189382,2581.4113343246536,2532.628023689037,2480.769371267062,2426.1711365845226,2369.157657145662,2310.0379855610176,2249.1029475951213,2186.6231531583408,2122.8479544145644,2058.0053092430235,1992.3024757274522,1925.9274353815345,1859.0509204308514,1791.8289043338807,1724.405405205004,1656.9154489502273,1589.4880424952944,1522.2490169545167,1455.3236152081631,1388.8387171903398,1322.9246181782119,1257.7162993816603,1193.3541550159553,1129.9841646905577,1067.7575233502569,1006.829762272096,947.3594130302906,889.5062813486888,833.4294090213098,779.2848094425376,727.2230657851351,677.3868806964883,629.9086628977979,584.9082297238575,542.4906959718971,502.74460901894435,465.7403786147103,431.52903763622834,400.1413579321718,371.5873336501709,345.8560335089558,322.9158136346358,302.7148740190791,285.1821344787435,270.22840021373554,257.7477826397283,247.61933798828258,239.70888410813635,233.87095479905062,229.95085071891262,227.7867462866172,227.2118129454696,228.05632057409306,230.14968068753703,233.3223973459066,237.40789439274795,242.24419080855145,247.67539961959415,253.55302997524288,259.7370767050042,266.09688686730993,272.5117984443193,278.8715523168829,285.0764848234395,291.03751437746104,296.675941568819,301.92308766197834,306.71980117764093,311.0158660624836,314.7693475974766,317.9459134942187,320.5181674620074,322.4650308444052,323.77120474564873,324.4267404939195]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":3,"reportName":"Int/Map/sorted","reportOutliers":{"highSevere":0,"highMild":1,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.7190916000799916e-2,1.7190850000000424e-2,34244620,1,null,null,null,null,null,null,null],[3.536546100076521e-2,3.5365293000001685e-2,70448014,2,null,null,null,null,null,null,null],[5.1582289000180026e-2,5.1581824999999526e-2,102751330,3,null,null,null,null,null,null,null],[6.899046000035014e-2,6.897691100000003e-2,137427964,4,null,null,null,null,null,null,null],[8.624875599980442e-2,8.624786600000078e-2,171806095,5,null,null,null,null,null,null,null],[0.10438896699997713,0.10438176299999924,207940955,6,null,null,null,null,null,null,null],[0.12082024000028468,0.12081882300000046,240671314,7,null,null,null,null,null,null,null],[0.13798402700012957,0.13798251700000108,274861495,8,null,null,null,null,null,null,null],[0.15351822800039372,0.15351653600000148,305805176,9,null,null,null,null,null,null,null],[0.172660876000009,0.17265884400000076,343936651,10,null,null,null,null,null,null,null],[0.19098327299980156,0.19098118800000208,380434741,11,null,null,null,null,null,null,null],[0.20640635900053894,0.20639385600000182,411156552,12,null,null,null,null,null,null,null],[0.2225307620001331,0.2225179879999999,443276027,13,null,null,null,null,null,null,null],[0.2438478590001978,0.2438456120000012,485740553,14,null,null,null,null,null,null,null],[0.2572937049999382,0.2572906049999979,512523002,15,null,null,null,null,null,null,null],[0.27724424300049577,0.2772311639999998,552263544,16,null,null,null,null,null,null,null],[0.2927910759999577,0.2927874999999993,583232752,17,null,null,null,null,null,null,null],[0.31373627999983,0.3137323649999999,624954921,18,null,null,null,null,null,null,null],[0.3297072500008653,0.32969854899999973,656770042,19,null,null,null,null,null,null,null],[0.3418994690000545,0.3418831410000003,681055397,20,null,null,null,null,null,null,null],[0.36184869699991395,0.36184608900000015,720797430,21,null,null,null,null,null,null,null],[0.3805361780005114,0.38051474400000274,758019888,22,null,null,null,null,null,null,null],[0.3963172769999801,0.3963122739999996,789454030,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.1347617984970174e-4,"confIntUDX":5.594672966986319e-4,"confIntCL":5.0e-2},"estPoint":3.655746276191305e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.9026630733968153e-3,"confIntUDX":2.248655595314175e-3,"confIntCL":5.0e-2},"estPoint":0.9977042076649039},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":9.563660332681363e-3,"confIntUDX":5.720838236242257e-3,"confIntCL":5.0e-2},"estPoint":-3.927389575096699e-3},"iters":{"estError":{"confIntLDX":9.702000493177973e-4,"confIntUDX":1.4477852307179795e-3,"confIntCL":5.0e-2},"estPoint":3.710133781766325e-2}}}],"anStdDev":{"estError":{"confIntLDX":3.6480456791067144e-4,"confIntUDX":4.8486309032258305e-4,"confIntCL":5.0e-2},"estPoint":6.467792559215952e-4},"anOutlierVar":{"ovFraction":5.859375e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.566617047516729e-2,3.569160173737097e-2,3.5717032999574655e-2,3.574246426177834e-2,3.576789552398202e-2,3.57933267861857e-2,3.581875804838938e-2,3.5844189310593064e-2,3.5869620572796745e-2,3.589505183500043e-2,3.592048309720411e-2,3.594591435940779e-2,3.597134562161147e-2,3.5996776883815154e-2,3.6022208146018836e-2,3.604763940822252e-2,3.60730706704262e-2,3.609850193262988e-2,3.612393319483356e-2,3.6149364457037245e-2,3.6174795719240926e-2,3.620022698144461e-2,3.622565824364829e-2,3.625108950585197e-2,3.627652076805565e-2,3.6301952030259335e-2,3.632738329246302e-2,3.63528145546667e-2,3.637824581687038e-2,3.640367707907406e-2,3.6429108341277744e-2,3.6454539603481426e-2,3.647997086568511e-2,3.6505402127888796e-2,3.653083339009248e-2,3.655626465229616e-2,3.658169591449984e-2,3.660712717670352e-2,3.6632558438907205e-2,3.665798970111089e-2,3.668342096331457e-2,3.670885222551825e-2,3.673428348772193e-2,3.6759714749925614e-2,3.6785146012129295e-2,3.681057727433298e-2,3.683600853653666e-2,3.686143979874034e-2,3.688687106094402e-2,3.6912302323147704e-2,3.6937733585351386e-2,3.696316484755507e-2,3.698859610975875e-2,3.701402737196243e-2,3.703945863416611e-2,3.7064889896369795e-2,3.7090321158573476e-2,3.711575242077716e-2,3.714118368298084e-2,3.716661494518452e-2,3.71920462073882e-2,3.7217477469591885e-2,3.724290873179557e-2,3.726833999399925e-2,3.729377125620293e-2,3.731920251840661e-2,3.7344633780610294e-2,3.7370065042813976e-2,3.739549630501766e-2,3.742092756722134e-2,3.744635882942502e-2,3.74717900916287e-2,3.7497221353832384e-2,3.7522652616036066e-2,3.754808387823975e-2,3.757351514044343e-2,3.759894640264711e-2,3.762437766485079e-2,3.7649808927054475e-2,3.7675240189258156e-2,3.770067145146184e-2,3.772610271366552e-2,3.77515339758692e-2,3.7776965238072883e-2,3.7802396500276565e-2,3.782782776248025e-2,3.785325902468393e-2,3.787869028688761e-2,3.790412154909129e-2,3.7929552811294974e-2,3.7954984073498656e-2,3.798041533570234e-2,3.800584659790602e-2,3.80312778601097e-2,3.805670912231339e-2,3.808214038451707e-2,3.810757164672075e-2,3.8133002908924435e-2,3.815843417112812e-2,3.81838654333318e-2,3.820929669553548e-2,3.823472795773916e-2,3.8260159219942844e-2,3.8285590482146525e-2,3.831102174435021e-2,3.833645300655389e-2,3.836188426875757e-2,3.838731553096125e-2,3.8412746793164934e-2,3.8438178055368616e-2,3.84636093175723e-2,3.848904057977598e-2,3.851447184197966e-2,3.853990310418334e-2,3.8565334366387025e-2,3.8590765628590706e-2,3.861619689079439e-2,3.864162815299807e-2,3.866705941520175e-2,3.869249067740543e-2,3.8717921939609115e-2,3.87433532018128e-2,3.876878446401648e-2,3.879421572622016e-2,3.881964698842384e-2,3.8845078250627524e-2,3.8870509512831206e-2,3.889594077503489e-2],"kdeType":"time","kdePDF":[361.50598587075854,365.07108082850607,372.15409014823763,382.6614578773666,396.4548291531921,413.35333257870536,433.13647731701764,455.5475551292192,480.2974277678315,507.06857967001116,535.5193245164593,565.2880708517991,595.9975747855894,627.259134422521,658.6767083555798,689.8509664284977,720.3833023028009,749.8798518043664,777.9555668308395,804.2383908019771,828.3735681348674,850.0280978414596,868.8953117620878,884.6995236021503,897.200658832244,906.1987409736823,911.538080200411,913.1109886827475,910.8608362931606,904.7842620338585,894.9323717138965,881.4107808098067,864.3784018030071,844.0449252946383,820.667000699856,794.543181568267,766.007758530481,735.4236555594277,703.1746090899805,669.6568817037196,635.2707806489007,600.4122556155888,565.4648402399026,530.7921791429194,496.7313491697952,463.58714275335853,431.6274361640577,401.0797189937993,372.1288164135175,344.9157948521823,319.5380063682803,296.0501979557201,274.4665894447495,254.7638070193333,236.88454775081607,220.74184282436906,206.22378221732336,193.19856060637414,181.5197027188406,171.03132610744038,161.57330072696823,152.9861683501343,145.1156915739266,137.816912727805,130.95761800294818,124.42112183457995,118.10831078412852,111.93891417365309,105.85199932015972,99.80572079877601,93.77638386595781,87.7569100506667,81.7548161360069,75.78983476401099,69.89131460358166,64.09553987620744,58.44310307710834,52.97645157879804,47.73770957987417,42.7668530719855,38.100288889886244,33.76986131546387,29.8022828906214,26.218961624090618,23.036175926758894,20.26553229991406,17.91462957813148,15.987847584049335,14.487177261494077,13.413013339077684,12.764838774694477,12.541741958294054,12.742722154703738,13.366755171694896,14.412608956360707,15.87841697239886,17.761035007428582,20.055223710368747,22.75271386045115,25.841223314633805,29.30350298204912,33.11649330679133,37.250671997328446,41.66966770541626,46.33020287829015,51.18241226910942,56.17056216522839,61.2341702697997,66.30949874162484,71.33136490352015,76.23518756611239,80.95916389168455,85.44645429694896,89.64724287894381,93.52053963314634,97.03559911409441,100.17284824579292,102.92424301437846,105.29300827326556,107.29275465032045,108.94600878641425,110.28223471164215,111.3354618279852,112.14166563308969,112.7360683519384,113.1505360957034,113.41124597809937,113.53678072934825]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":4,"reportName":"Int/Map/random","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":16,"lowSevere":0},"reportMeasured":[[3.593531800015626e-2,3.593526200000241e-2,71583526,1,null,null,null,null,null,null,null],[7.46233879999636e-2,7.462270099999913e-2,148648939,2,null,null,null,null,null,null,null],[0.11060378000001947,0.11059710800000033,220321154,3,null,null,null,null,null,null,null],[0.146031473000221,0.14602284500000096,290892649,4,null,null,null,null,null,null,null],[0.17995737199998985,0.17995529299999902,358471285,5,null,null,null,null,null,null,null],[0.2193120470001304,0.21930498899999762,436864482,6,null,null,null,null,null,null,null],[0.25483090699981403,0.2548230740000008,507617841,7,null,null,null,null,null,null,null],[0.2901135530000829,0.29010437200000183,577899954,8,null,null,null,null,null,null,null],[0.32517910299975483,0.3251750989999991,647748810,9,null,null,null,null,null,null,null],[0.36648852199959947,0.36647592199999934,730036353,10,null,null,null,null,null,null,null],[0.39937830500002747,0.3993620789999994,795552153,11,null,null,null,null,null,null,null],[0.4375588879993302,0.43754683299999897,871607183,12,null,null,null,null,null,null,null],[0.4715958309998314,0.47157841499999975,939407261,13,null,null,null,null,null,null,null],[0.5061948460006533,0.5061703309999999,1008327654,14,null,null,null,null,null,null,null],[0.5471116850003455,0.5470777379999987,1089832954,15,null,null,null,null,null,null,null],[0.6180286920007347,0.6180145259999996,1231097607,16,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":6.001059954778218e-5,"confIntUDX":5.964893258324569e-5,"confIntCL":5.0e-2},"estPoint":1.7112117805356066e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.6449149465879174e-4,"confIntUDX":1.6003092637850713e-4,"confIntCL":5.0e-2},"estPoint":0.9997492243421494},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.0694739224977176e-3,"confIntUDX":1.0027602772205149e-3,"confIntCL":5.0e-2},"estPoint":-1.7352889210684763e-5},"iters":{"estError":{"confIntLDX":1.212230361220222e-4,"confIntUDX":1.2342413863718898e-4,"confIntCL":5.0e-2},"estPoint":1.7100347726272433e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.315984134498294e-5,"confIntUDX":2.7289346932400643e-5,"confIntCL":5.0e-2},"estPoint":1.4683004543950413e-4},"anOutlierVar":{"ovFraction":4.158790170132319e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.683523656425201e-2,1.683986938832499e-2,1.684450221239797e-2,1.6849135036470952e-2,1.6853767860543933e-2,1.6858400684616914e-2,1.6863033508689895e-2,1.6867666332762873e-2,1.6872299156835854e-2,1.6876931980908835e-2,1.6881564804981816e-2,1.6886197629054796e-2,1.6890830453127777e-2,1.689546327720076e-2,1.690009610127374e-2,1.690472892534672e-2,1.69093617494197e-2,1.6913994573492682e-2,1.6918627397565663e-2,1.692326022163864e-2,1.692789304571162e-2,1.6932525869784602e-2,1.6937158693857583e-2,1.6941791517930564e-2,1.6946424342003545e-2,1.6951057166076526e-2,1.6955689990149507e-2,1.6960322814222488e-2,1.696495563829547e-2,1.696958846236845e-2,1.697422128644143e-2,1.697885411051441e-2,1.698348693458739e-2,1.698811975866037e-2,1.699275258273335e-2,1.6997385406806332e-2,1.7002018230879313e-2,1.7006651054952294e-2,1.7011283879025275e-2,1.7015916703098256e-2,1.7020549527171237e-2,1.7025182351244218e-2,1.70298151753172e-2,1.703444799939018e-2,1.703908082346316e-2,1.7043713647536138e-2,1.704834647160912e-2,1.70529792956821e-2,1.705761211975508e-2,1.706224494382806e-2,1.7066877767901042e-2,1.7071510591974023e-2,1.7076143416047004e-2,1.7080776240119985e-2,1.7085409064192966e-2,1.7090041888265947e-2,1.7094674712338928e-2,1.709930753641191e-2,1.7103940360484887e-2,1.7108573184557867e-2,1.711320600863085e-2,1.711783883270383e-2,1.712247165677681e-2,1.712710448084979e-2,1.7131737304922772e-2,1.7136370128995753e-2,1.7141002953068734e-2,1.7145635777141715e-2,1.7150268601214696e-2,1.7154901425287677e-2,1.7159534249360654e-2,1.7164167073433635e-2,1.7168799897506616e-2,1.7173432721579597e-2,1.7178065545652578e-2,1.718269836972556e-2,1.718733119379854e-2,1.719196401787152e-2,1.71965968419445e-2,1.7201229666017483e-2,1.7205862490090464e-2,1.7210495314163445e-2,1.7215128138236425e-2,1.7219760962309403e-2,1.7224393786382384e-2,1.7229026610455365e-2,1.7233659434528346e-2,1.7238292258601327e-2,1.7242925082674308e-2,1.724755790674729e-2,1.725219073082027e-2,1.725682355489325e-2,1.726145637896623e-2,1.7266089203039212e-2,1.7270722027112193e-2,1.7275354851185174e-2,1.727998767525815e-2,1.7284620499331133e-2,1.7289253323404113e-2,1.7293886147477094e-2,1.7298518971550075e-2,1.7303151795623056e-2,1.7307784619696037e-2,1.7312417443769018e-2,1.7317050267842e-2,1.732168309191498e-2,1.732631591598796e-2,1.7330948740060942e-2,1.733558156413392e-2,1.73402143882069e-2,1.734484721227988e-2,1.7349480036352862e-2,1.7354112860425843e-2,1.7358745684498824e-2,1.7363378508571805e-2,1.7368011332644786e-2,1.7372644156717767e-2,1.7377276980790748e-2,1.738190980486373e-2,1.738654262893671e-2,1.739117545300969e-2,1.7395808277082668e-2,1.740044110115565e-2,1.740507392522863e-2,1.740970674930161e-2,1.7414339573374592e-2,1.7418972397447573e-2,1.7423605221520554e-2],"kdeType":"time","kdePDF":[1771.4963327638438,1771.6722242793498,1772.0232266406217,1772.5477818322756,1773.2435611217943,1774.1074749532436,1775.1356860477692,1776.323625633653,1777.666012710568,1779.156876235194,1780.7895800988072,1782.5568507518744,1784.4508073162085,1786.4629940119994,1788.5844147150888,1790.8055694493346,1793.1164926098245,1795.5067927051784,1797.965693401217,1800.4820756439267,1803.0445206369432,1805.6413534476847,1808.260687016838,1810.8904663480264,1813.5185126582376,1816.1325672748178,1818.7203350715456,1821.2695272443864,1823.7679032369,1826.2033116358787,1828.5637298694542,1830.8373025525918,1833.0123783384074,1835.0775451479954,1837.0216636663195,1838.8338990070258,1840.5037504646803,1842.0210792887378,1843.3761344294164,1844.559576221393,1845.562497986745,1846.3764455537098,1846.993434702448,1847.4059665630248,1847.6070410040745,1847.5901680630375,1847.3493774803221,1846.8792264101996,1846.174805390547,1845.2317426617228,1844.0462069317716,1842.614908690826,1840.9351001819236,1839.0045741385118,1836.8216614006578,1834.385227522428,1831.694668482039,1828.7499056043719,1825.5513798021057,1822.100045237422,1818.3973625007175,1814.4452913964199,1810.246283418628,1805.803273991295,1801.1196745388406,1796.1993644438219,1791.0466829384525,1785.6664209667376,1780.0638130436046,1774.2445291271124,1768.2146665094224,1761.9807417220936,1755.5496824413574,1748.928819369605,1742.1258780603118,1735.1489706453806,1728.0065874162167,1720.707588203134,1713.261193491751,1705.6769752101945,1697.9648471169678,1690.1350547166292,1682.1981646286688,1674.165053334509,1666.0468952281215,1657.8551498976087,1649.601548567978,1641.2980796394659,1632.956973260884,1624.5906848837215,1616.2118777498886,1607.8334042741546,1599.4682862912518,1591.1296941473695,1582.8309246261035,1574.5853777098741,1566.4065321891756,1558.3079201437386,1550.3031003315687,1542.405630533846,1534.6290389156084,1526.9867944739535,1519.4922766570141,1512.1587442480668,1504.9993036197363,1498.0268764732293,1491.2541671867234,1484.6936299054557,1478.3574355134704,1472.2574386334284,1466.4051448062082,1460.811678006212,1455.4877486512485,1450.443622267574,1445.689088971113,1441.2334339249844,1437.085408931302,1433.2532053117043,1429.744428226335,1426.5660725749535,1423.7245006166424,1421.2254214362088,1419.0738723759023,1417.274202540614,1415.8300584733163,1414.7443720852903,1414.0193509127255,1413.6564707577347]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":5,"reportName":"Int/Map/revsorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.69116210008724e-2,1.6911613999997854e-2,33688293,1,null,null,null,null,null,null,null],[3.4749149000163015e-2,3.475050300000149e-2,69223300,2,null,null,null,null,null,null,null],[5.1696651999918686e-2,5.169624600000233e-2,102979173,3,null,null,null,null,null,null,null],[6.890151600055106e-2,6.890215100000319e-2,137253490,4,null,null,null,null,null,null,null],[8.610558299915283e-2,8.610475300000076e-2,171520966,5,null,null,null,null,null,null,null],[0.10173329300050682,0.1017271270000002,202650816,6,null,null,null,null,null,null,null],[0.11909899200054497,0.11909765399999728,237242777,7,null,null,null,null,null,null,null],[0.13569458599977224,0.13568752800000183,270300855,8,null,null,null,null,null,null,null],[0.15208569500009617,0.1520786830000027,302951433,9,null,null,null,null,null,null,null],[0.16982196599929011,0.16982010299999928,338281873,10,null,null,null,null,null,null,null],[0.1900637969993113,0.1900615340000016,378602699,11,null,null,null,null,null,null,null],[0.20726147999994282,0.20725452900000008,412861434,12,null,null,null,null,null,null,null],[0.22177942899998015,0.22176631299999983,441779325,13,null,null,null,null,null,null,null],[0.2387884589998066,0.23877915199999933,475661148,14,null,null,null,null,null,null,null],[0.2544549209997058,0.2544517820000003,506868050,15,null,null,null,null,null,null,null],[0.2765577669997583,0.2765491769999997,550897048,16,null,null,null,null,null,null,null],[0.2891334919995643,0.289118847000001,575946831,17,null,null,null,null,null,null,null],[0.3074710840000989,0.3074613090000007,612475105,18,null,null,null,null,null,null,null],[0.3291522760000589,0.32914252699999835,655663213,19,null,null,null,null,null,null,null],[0.34356909500002075,0.34355150000000023,684381312,20,null,null,null,null,null,null,null],[0.3545696129995122,0.35456524099999953,706294041,21,null,null,null,null,null,null,null],[0.37692146800054616,0.3769113259999983,750818278,22,null,null,null,null,null,null,null],[0.3927749220001715,0.3927503469999998,782397761,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.251605589017886e-4,"confIntUDX":2.2016691634739807e-4,"confIntCL":5.0e-2},"estPoint":2.0442200089708467e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":8.642031904438907e-4,"confIntUDX":4.3926865995269626e-4,"confIntCL":5.0e-2},"estPoint":0.9994482346210234},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.169304343053545e-3,"confIntUDX":1.7339409824313043e-3,"confIntCL":5.0e-2},"estPoint":-3.775721857024442e-4},"iters":{"estError":{"confIntLDX":1.5368303657334326e-4,"confIntUDX":1.7691227575166585e-4,"confIntCL":5.0e-2},"estPoint":2.0470324575330472e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.8955740340971194e-4,"confIntUDX":2.616120267741363e-4,"confIntCL":5.0e-2},"estPoint":3.987887002993838e-4},"anOutlierVar":{"ovFraction":4.535147392290249e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.979469576661965e-2,1.981152857606909e-2,1.9828361385518526e-2,1.9845194194967965e-2,1.9862027004417405e-2,1.9878859813866844e-2,1.989569262331628e-2,1.991252543276572e-2,1.992935824221516e-2,1.9946191051664595e-2,1.9963023861114034e-2,1.9979856670563474e-2,1.9996689480012913e-2,2.001352228946235e-2,2.0030355098911788e-2,2.0047187908361228e-2,2.0064020717810663e-2,2.0080853527260103e-2,2.0097686336709542e-2,2.011451914615898e-2,2.0131351955608418e-2,2.0148184765057857e-2,2.0165017574507296e-2,2.0181850383956732e-2,2.019868319340617e-2,2.021551600285561e-2,2.023234881230505e-2,2.0249181621754486e-2,2.0266014431203926e-2,2.0282847240653365e-2,2.0299680050102804e-2,2.031651285955224e-2,2.033334566900168e-2,2.035017847845112e-2,2.0367011287900555e-2,2.0383844097349994e-2,2.0400676906799434e-2,2.0417509716248873e-2,2.043434252569831e-2,2.045117533514775e-2,2.0468008144597188e-2,2.0484840954046624e-2,2.0501673763496063e-2,2.0518506572945502e-2,2.0535339382394942e-2,2.0552172191844378e-2,2.0569005001293817e-2,2.0585837810743256e-2,2.0602670620192692e-2,2.061950342964213e-2,2.063633623909157e-2,2.065316904854101e-2,2.0670001857990446e-2,2.0686834667439886e-2,2.0703667476889325e-2,2.072050028633876e-2,2.07373330957882e-2,2.075416590523764e-2,2.077099871468708e-2,2.0787831524136515e-2,2.0804664333585954e-2,2.0821497143035394e-2,2.083832995248483e-2,2.085516276193427e-2,2.087199557138371e-2,2.0888828380833148e-2,2.0905661190282584e-2,2.0922493999732023e-2,2.0939326809181463e-2,2.09561596186309e-2,2.0972992428080338e-2,2.0989825237529777e-2,2.1006658046979217e-2,2.1023490856428653e-2,2.1040323665878092e-2,2.105715647532753e-2,2.1073989284776967e-2,2.1090822094226407e-2,2.1107654903675846e-2,2.1124487713125285e-2,2.114132052257472e-2,2.115815333202416e-2,2.11749861414736e-2,2.1191818950923036e-2,2.1208651760372475e-2,2.1225484569821915e-2,2.1242317379271354e-2,2.125915018872079e-2,2.127598299817023e-2,2.129281580761967e-2,2.1309648617069105e-2,2.1326481426518544e-2,2.1343314235967983e-2,2.1360147045417423e-2,2.137697985486686e-2,2.1393812664316298e-2,2.1410645473765737e-2,2.1427478283215173e-2,2.1444311092664613e-2,2.1461143902114052e-2,2.147797671156349e-2,2.1494809521012927e-2,2.1511642330462367e-2,2.1528475139911806e-2,2.1545307949361246e-2,2.156214075881068e-2,2.157897356826012e-2,2.159580637770956e-2,2.1612639187158996e-2,2.1629471996608435e-2,2.1646304806057875e-2,2.1663137615507314e-2,2.167997042495675e-2,2.169680323440619e-2,2.171363604385563e-2,2.1730468853305065e-2,2.1747301662754504e-2,2.1764134472203944e-2,2.1780967281653383e-2,2.179780009110282e-2,2.1814632900552258e-2,2.1831465710001698e-2,2.1848298519451137e-2,2.1865131328900573e-2,2.1881964138350012e-2,2.189879694779945e-2,2.1915629757248888e-2,2.1932462566698327e-2],"kdeType":"time","kdePDF":[286.99771067110277,292.0796492599654,302.2044604566415,317.2934902052201,337.2275384488963,361.8456312969229,390.94375587818064,424.2738382135127,461.543268137857,502.41527114623347,546.5103930368041,593.4092997412927,642.6570048799335,693.7685273817812,746.2358597457327,799.536005149814,853.1397308690647,906.5205985700323,959.1637798414479,1010.5741558139466,1060.283236930622,1107.85452207312,1152.8870395006759,1195.0169649231518,1233.9173802985754,1269.2964041739895,1300.8940736720488,1328.478474084553,1351.8416821480805,1370.7961056608908,1385.1717627516168,1394.8149520362028,1399.588628518463,1399.374632075529,1394.0777312786117,1383.6312619548303,1368.0039737225727,1347.2075632245565,1321.304281245758,1290.4139595811776,1254.7198151453279,1214.4724516025428,1169.9915868089715,1121.665178210864,1069.9457861428316,1015.344193378087,958.420474642524,899.7728692167865,840.0249420345177,779.8116151640291,719.7647066169421,660.498624806446,602.5968358188271,546.5996512715952,492.9937839145893,442.20399533100954,394.5870253928258,350.42785716497536,309.938243870244,273.2573151474381,240.45399500381927,211.53090796362045,186.42942460911624,165.03550192011343,147.18600393469515,132.6752385791291,121.26150986039039,112.6735530395431,106.61678599765433,102.77936566576959,100.83807850716066,100.46411503532761,101.32877900177125,103.10916341169657,105.49379140497199,108.18817560276325,110.92020131620777,113.44519405191802,115.55049667740317,117.05936193450641,117.83396542028602,117.77736416342096,116.83426555817073,114.99052741266777,112.27137702789358,108.7384090388458,104.48549116529077,99.63376726863892,94.32599249879046,88.72046186744447,82.98479947920642,77.28986137942509,71.80397321957422,66.68767918812709,62.089126613072004,58.14015750743408,54.95313001879494,52.61845418208961,51.202800913832725,50.74793223120052,51.27010356077667,52.76000310065046,55.18321431616896,58.481210564694486,62.57291001063535,67.35682927206497,72.71387161097356,78.51076761253479,84.60415295453869,90.84522104499868,97.08483212736132,103.17890079052962,108.9938276915869,114.41169609283588,119.33492643997262,123.69007824614044,127.43051151408658,130.53767073685128,133.0208311972353,134.9152450198987,136.27873589788865,137.18690742945665,137.72724036310657,137.99244854752018,138.07353282378315,138.05300925640609,137.99878849914455,137.9591455114767]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":6,"reportName":"Int/HashMap/sorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.1916132999649562e-2,2.191631999999899e-2,43657923,1,null,null,null,null,null,null,null],[4.1261475999817776e-2,4.126126399999919e-2,82193002,2,null,null,null,null,null,null,null],[6.526294600007532e-2,6.519380499999983e-2,130003700,3,null,null,null,null,null,null,null],[8.052160600072966e-2,8.052377399999955e-2,160403852,4,null,null,null,null,null,null,null],[9.98642149997977e-2,9.98608090000026e-2,198937162,5,null,null,null,null,null,null,null],[0.12162375400021119,0.12161490800000152,242272408,6,null,null,null,null,null,null,null],[0.14113713200003986,0.14113564000000167,281142556,7,null,null,null,null,null,null,null],[0.16276684700005717,0.16276511199999533,324228343,8,null,null,null,null,null,null,null],[0.18150979000074585,0.18150784000000186,361564154,9,null,null,null,null,null,null,null],[0.20558318099938333,0.20557599400000015,409517631,10,null,null,null,null,null,null,null],[0.22416781700030697,0.22415160699999603,446546221,11,null,null,null,null,null,null,null],[0.24140508100026636,0.2413852669999983,480873919,12,null,null,null,null,null,null,null],[0.2621693299997787,0.2621662979999968,522235400,13,null,null,null,null,null,null,null],[0.2962347900001987,0.29622053599999987,590093079,14,null,null,null,null,null,null,null],[0.30513566099944,0.30512496600000105,607823489,15,null,null,null,null,null,null,null],[0.32493975200031855,0.32493580599999916,647272319,16,null,null,null,null,null,null,null],[0.348437444999945,0.3484234769999972,694079903,17,null,null,null,null,null,null,null],[0.3674023749999833,0.3673688319999968,731861112,18,null,null,null,null,null,null,null],[0.3890681050006606,0.38906355099999956,775014634,19,null,null,null,null,null,null,null],[0.41058566300034727,0.4105682799999997,817876846,20,null,null,null,null,null,null,null],[0.429722861999835,0.4297211989999994,856004866,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":8.198226758400831e-5,"confIntUDX":1.7116448711798626e-4,"confIntCL":5.0e-2},"estPoint":2.0335051349294322e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.2157622312826133e-3,"confIntUDX":9.855755935979094e-4,"confIntCL":5.0e-2},"estPoint":0.9989464746337062},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":4.01829360108183e-3,"confIntUDX":2.7429742945086783e-3,"confIntCL":5.0e-2},"estPoint":-3.5069676672535536e-4},"iters":{"estError":{"confIntLDX":3.279018466556087e-4,"confIntUDX":4.801403352287306e-4,"confIntCL":5.0e-2},"estPoint":2.0369254905192244e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.504603447961434e-4,"confIntUDX":1.3455344989462853e-4,"confIntCL":5.0e-2},"estPoint":2.632425820649563e-4},"anOutlierVar":{"ovFraction":4.535147392290246e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.9967912725744878e-2,1.9977672568984264e-2,1.9987432412223647e-2,1.9997192255463033e-2,2.0006952098702416e-2,2.0016711941941802e-2,2.0026471785181185e-2,2.003623162842057e-2,2.0045991471659953e-2,2.005575131489934e-2,2.0065511158138722e-2,2.0075271001378108e-2,2.008503084461749e-2,2.0094790687856877e-2,2.010455053109626e-2,2.0114310374335646e-2,2.012407021757503e-2,2.0133830060814414e-2,2.0143589904053797e-2,2.0153349747293183e-2,2.0163109590532566e-2,2.0172869433771952e-2,2.0182629277011335e-2,2.019238912025072e-2,2.0202148963490103e-2,2.021190880672949e-2,2.0221668649968872e-2,2.0231428493208258e-2,2.024118833644764e-2,2.0250948179687027e-2,2.026070802292641e-2,2.0270467866165796e-2,2.028022770940518e-2,2.0289987552644564e-2,2.0299747395883947e-2,2.0309507239123333e-2,2.0319267082362716e-2,2.0329026925602102e-2,2.0338786768841485e-2,2.034854661208087e-2,2.0358306455320253e-2,2.036806629855964e-2,2.0377826141799026e-2,2.0387585985038408e-2,2.0397345828277794e-2,2.0407105671517177e-2,2.0416865514756563e-2,2.0426625357995946e-2,2.0436385201235332e-2,2.0446145044474714e-2,2.04559048877141e-2,2.0465664730953483e-2,2.047542457419287e-2,2.0485184417432252e-2,2.0494944260671638e-2,2.050470410391102e-2,2.0514463947150407e-2,2.052422379038979e-2,2.0533983633629176e-2,2.0543743476868558e-2,2.0553503320107944e-2,2.0563263163347327e-2,2.0573023006586713e-2,2.0582782849826096e-2,2.0592542693065482e-2,2.0602302536304865e-2,2.061206237954425e-2,2.0621822222783633e-2,2.063158206602302e-2,2.0641341909262402e-2,2.0651101752501788e-2,2.066086159574117e-2,2.0670621438980557e-2,2.068038128221994e-2,2.0690141125459326e-2,2.069990096869871e-2,2.0709660811938094e-2,2.0719420655177477e-2,2.0729180498416863e-2,2.0738940341656246e-2,2.0748700184895632e-2,2.0758460028135015e-2,2.07682198713744e-2,2.0777979714613783e-2,2.078773955785317e-2,2.0797499401092552e-2,2.0807259244331938e-2,2.0817019087571324e-2,2.0826778930810707e-2,2.0836538774050093e-2,2.0846298617289476e-2,2.0856058460528862e-2,2.0865818303768244e-2,2.087557814700763e-2,2.0885337990247013e-2,2.08950978334864e-2,2.0904857676725782e-2,2.0914617519965168e-2,2.092437736320455e-2,2.0934137206443937e-2,2.094389704968332e-2,2.0953656892922706e-2,2.0963416736162088e-2,2.0973176579401474e-2,2.0982936422640857e-2,2.0992696265880243e-2,2.1002456109119626e-2,2.1012215952359012e-2,2.1021975795598394e-2,2.103173563883778e-2,2.1041495482077163e-2,2.105125532531655e-2,2.1061015168555932e-2,2.1070775011795318e-2,2.10805348550347e-2,2.1090294698274087e-2,2.110005454151347e-2,2.1109814384752856e-2,2.111957422799224e-2,2.1129334071231624e-2,2.1139093914471007e-2,2.1148853757710393e-2,2.1158613600949776e-2,2.1168373444189162e-2,2.1178133287428545e-2,2.118789313066793e-2,2.1197652973907313e-2,2.12074128171467e-2],"kdeType":"time","kdePDF":[872.5945396938032,880.0347005633495,894.8309429505259,916.8167659521034,945.7464550658823,981.2996355541915,1023.086889441229,1070.6561048689782,1123.4992092917603,1181.058954462791,1242.735469415216,1307.8923724998515,1375.862327131711,1445.9520284045666,1517.446708392788,1589.61433613731,1661.7097545741879,1732.9790337320644,1802.6643230172992,1870.0094542852746,1934.2664840830062,1994.7032735820983,2050.612096605257,2101.319149927415,2146.194726688319,2184.6637140387284,2216.2159995395414,2240.416324659411,2256.913112457887,2265.445821477113,2265.8504370144537,2258.062799331502,2242.1195785379155,2218.156828741414,2186.40617964551,2147.188842299612,2100.9077083650614,2048.0379020084847,1989.1161956155495,1924.7297227717106,1855.504414854375,1782.093554028564,1705.1667803563223,1625.3998204806053,1543.4651270564761,1460.023538976385,1375.7169990838368,1291.1623039592112,1206.9458134037798,1123.6190175640825,1041.6948475060728,961.6446190334456,883.8955167807477,808.8285522035933,736.7769605738548,668.0250339323857,602.8074149997905,541.3088979094765,483.66479295945135,429.96191322998624,380.2402309436763,334.49523202472386,292.68097051574733,254.71379302733772,220.4766702219318,189.82404045064936,162.58704274584542,138.57899457469134,117.60095555230264,99.44721243319388,83.91052316194003,70.78696795841778,59.88027224321618,51.00548826960235,43.99194807736143,38.68542830785272,34.94949615483249,32.666034143415416,31.734968660755786,32.07325258594272,33.6131755512899,36.30009599746068,40.08970697332486,44.94496225032898,50.832800349882895,57.720811000922,65.5739907599809,74.3517314453443,84.00517616639713,94.47506279760067,105.69015381928008,117.56632502903344,130.00635471605116,142.90042098197833,156.12727991544497,169.55606351760358,183.04860598515535,196.4621824282588,209.65252722383397,222.47699128970635,234.7976991575719,246.48457749518624,257.418145464335,267.49198198525227,276.6148129861657,284.71219009137775,291.72775798448356,297.6241282636724,302.3833910420879,306.0073008187657,308.5171703067666,309.95349609545406,310.37532535454477,309.85935609094685,308.49874794983543,306.4016093732329,303.689122795791,300.4932743317436,296.9541688282181,293.216934690717,289.4282537179749,285.73258640069065,282.2681990313875,279.16313145362045,276.531269363801,274.4686993675433,273.05052609198003,272.32831749400736]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":7,"reportName":"Int/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.22767590003059e-2,2.2271850999999288e-2,44376146,1,null,null,null,null,null,null,null],[4.194340499998361e-2,4.194328399999847e-2,83551258,2,null,null,null,null,null,null,null],[6.062047999967035e-2,6.062012299999964e-2,120755884,3,null,null,null,null,null,null,null],[8.087500500005262e-2,8.086553599999746e-2,161102225,4,null,null,null,null,null,null,null],[0.10064001899991126,0.10062834600000059,200473330,5,null,null,null,null,null,null,null],[0.12170766700000968,0.12170648400000061,242440067,6,null,null,null,null,null,null,null],[0.14254838899978495,0.14254695099999992,283953877,7,null,null,null,null,null,null,null],[0.16357909700036544,0.16357726400000416,325846104,8,null,null,null,null,null,null,null],[0.18331975399996736,0.18331249999999955,365169800,9,null,null,null,null,null,null,null],[0.20302739399994607,0.20300530299999764,404426197,10,null,null,null,null,null,null,null],[0.22220905699941795,0.22220049899999594,442635745,11,null,null,null,null,null,null,null],[0.2430346669998471,0.24303193800000145,484120046,12,null,null,null,null,null,null,null],[0.26566770799945516,0.26566467199999977,529204162,13,null,null,null,null,null,null,null],[0.28423458199995366,0.2842209280000034,566189237,14,null,null,null,null,null,null,null],[0.30207220099964616,0.3020568279999978,601721337,15,null,null,null,null,null,null,null],[0.3253867399998853,0.3253767699999983,648162910,16,null,null,null,null,null,null,null],[0.3442265089997818,0.344204677999997,685691439,17,null,null,null,null,null,null,null],[0.36131352199936373,0.36130930600000255,719728469,18,null,null,null,null,null,null,null],[0.38463966400013305,0.384635111999998,766193214,19,null,null,null,null,null,null,null],[0.4014240880005673,0.4014053890000042,799627694,20,null,null,null,null,null,null,null],[0.44318654400012747,0.4431680799999995,882817489,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.4537442624461897e-3,"confIntUDX":2.6233871295563843e-3,"confIntCL":5.0e-2},"estPoint":2.5066571560804135e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.0148889811077106e-2,"confIntUDX":2.716982453801997e-2,"confIntCL":5.0e-2},"estPoint":0.9564440083435568},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.5629695839453452e-2,"confIntUDX":1.622053787420327e-2,"confIntCL":5.0e-2},"estPoint":3.3372510350474847e-3},"iters":{"estError":{"confIntLDX":2.2421682853189136e-3,"confIntUDX":2.8975875351205417e-3,"confIntCL":5.0e-2},"estPoint":2.392300415965444e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.0822554758749725e-3,"confIntUDX":1.8387240329736237e-3,"confIntCL":5.0e-2},"estPoint":4.368889121877977e-3},"anOutlierVar":{"ovFraction":0.7221439400415633,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[1.9263874025068618e-2,1.9412636440028483e-2,1.9561398854988348e-2,1.971016126994821e-2,1.9858923684908075e-2,2.000768609986794e-2,2.0156448514827806e-2,2.030521092978767e-2,2.0453973344747533e-2,2.0602735759707398e-2,2.0751498174667263e-2,2.090026058962713e-2,2.1049023004586994e-2,2.1197785419546856e-2,2.134654783450672e-2,2.1495310249466586e-2,2.164407266442645e-2,2.1792835079386313e-2,2.194159749434618e-2,2.2090359909306044e-2,2.223912232426591e-2,2.2387884739225775e-2,2.2536647154185636e-2,2.26854095691455e-2,2.2834171984105367e-2,2.2982934399065232e-2,2.3131696814025098e-2,2.328045922898496e-2,2.3429221643944825e-2,2.357798405890469e-2,2.3726746473864555e-2,2.387550888882442e-2,2.4024271303784282e-2,2.4173033718744148e-2,2.4321796133704013e-2,2.4470558548663878e-2,2.4619320963623743e-2,2.4768083378583605e-2,2.491684579354347e-2,2.5065608208503336e-2,2.52143706234632e-2,2.5363133038423066e-2,2.5511895453382928e-2,2.5660657868342793e-2,2.580942028330266e-2,2.5958182698262524e-2,2.610694511322239e-2,2.625570752818225e-2,2.6404469943142116e-2,2.655323235810198e-2,2.6701994773061847e-2,2.6850757188021712e-2,2.6999519602981574e-2,2.714828201794144e-2,2.7297044432901305e-2,2.744580684786117e-2,2.7594569262821035e-2,2.7743331677780897e-2,2.7892094092740762e-2,2.8040856507700627e-2,2.8189618922660493e-2,2.8338381337620358e-2,2.848714375258022e-2,2.8635906167540085e-2,2.878466858249995e-2,2.8933430997459816e-2,2.908219341241968e-2,2.9230955827379543e-2,2.9379718242339408e-2,2.9528480657299273e-2,2.967724307225914e-2,2.9826005487219004e-2,2.9974767902178866e-2,3.012353031713873e-2,3.0272292732098596e-2,3.042105514705846e-2,3.0569817562018327e-2,3.071857997697819e-2,3.0867342391938054e-2,3.101610480689792e-2,3.1164867221857784e-2,3.131362963681765e-2,3.146239205177751e-2,3.161115446673737e-2,3.175991688169724e-2,3.1908679296657104e-2,3.205744171161697e-2,3.2206204126576835e-2,3.23549665415367e-2,3.2503728956496565e-2,3.265249137145643e-2,3.2801253786416296e-2,3.295001620137616e-2,3.309877861633602e-2,3.324754103129589e-2,3.339630344625575e-2,3.354506586121562e-2,3.369382827617548e-2,3.384259069113535e-2,3.399135310609521e-2,3.414011552105507e-2,3.428887793601494e-2,3.44376403509748e-2,3.4586402765934665e-2,3.4735165180894534e-2,3.4883927595854396e-2,3.503269001081426e-2,3.5181452425774126e-2,3.5330214840733995e-2,3.547897725569386e-2,3.562773967065372e-2,3.577650208561359e-2,3.592526450057345e-2,3.607402691553331e-2,3.622278933049318e-2,3.637155174545305e-2,3.65203141604129e-2,3.666907657537277e-2,3.681783899033264e-2,3.69666014052925e-2,3.7115363820252364e-2,3.726412623521223e-2,3.7412888650172095e-2,3.756165106513196e-2,3.7710413480091826e-2,3.7859175895051694e-2,3.800793831001155e-2,3.815670072497142e-2],"kdeType":"time","kdePDF":[97.83839744771048,97.82462227134631,97.79694267019318,97.7551014204561,97.69871585703935,97.62728164468203,97.54017775057075,97.43667257158747,97.31593115861757,97.17702347023618,97.01893357872581,96.84056974284599,96.64077525416646,96.41833995716361,96.17201233772597,95.90051207026617,95.60254291033237,95.27680581746469,94.92201219206484,94.53689711022535,94.12023244178158,93.67083973926486,93.1876027889077,92.66947971931452,92.11551456880525,91.52484821867381,90.89672860660474,90.23052014215666,89.5257122544583,88.7819270109687,87.9989257552231,87.17661472081686,86.315049588367,85.41443896173318,84.47514674927695,83.49769344529902,82.48275631592547,81.43116850253722,80.34391706427346,79.222139989125,78.0671222106023,76.88029067387312,75.66320850156066,74.41756831505937,73.14518477221276,71.84798638652023,70.52800669665251,69.18737485799885,67.82830573020611,66.45308953625859,65.06408116956185,63.66368922580455,62.254364836061505,60.83859037675035,59.41886813065087,57.99770897132801,56.5776211409591,55.16109918884291,53.75061313475747,52.34859791792595,50.957443188638095,49.57948349565135,48.21698891834765,46.87215618834228,45.547100340812136,44.243846931321215,42.964324849351584,41.71035975518083,40.48366816216009,39.285852181917946,38.11839494551874,36.982656709212755,35.87987164910179,34.81114534487564,33.77745294872225,32.77963803164237,31.81841209567537,30.894354737028728,30.007914441766125,29.159409992605955,28.349032462479997,27.576847767855924,26.84279975240221,26.146713769422362,25.488300729572316,24.867161578746583,24.28279216964319,23.734588489433467,23.22185220514002,22.743796487795684,22.299552076190025,21.888173541029797,21.50864571061899,21.159890219716566,20.840772144028602,20.55010668384216,20.286665861583753,20.049185199582766,19.836370346012856,19.646903618861103,19.47945043980862,19.332665632079486,19.205199558599972,19.095704079183673,19.002838307894027,18.92527415420507,18.86170163405955,18.81083393938055,18.7714122570034,18.742210330331304,18.722038759256534,18.709749036002435,18.70423731651284,18.704447928817146,18.70937662142168,18.71807355619753,18.72964605144747,18.743261081822812,18.75814754252676,18.773598285773897,18.788971937784027,18.803694504669114,18.817260775441007,18.829235530025823,18.83925455964266,18.847025506197287,18.852328526482548,18.855016785983484]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":8,"reportName":"Int/HashMap/revsorted","reportOutliers":{"highSevere":0,"highMild":2,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.794468299998698e-2,2.794587199999654e-2,55669675,1,null,null,null,null,null,null,null],[7.316459699995903e-2,7.316482899999954e-2,145745678,2,null,null,null,null,null,null,null],[0.10409891699964646,0.10409865200000468,207365305,3,null,null,null,null,null,null,null],[9.984500700011267e-2,9.98442300000022e-2,198890201,4,null,null,null,null,null,null,null],[0.12185803800002759,0.12185709900000319,242740081,5,null,null,null,null,null,null,null],[0.1366814399998475,0.1366743669999977,272266985,6,null,null,null,null,null,null,null],[0.14857402100005856,0.14857253099999923,295957179,7,null,null,null,null,null,null,null],[0.19811703499999567,0.19810328199999816,394646214,8,null,null,null,null,null,null,null],[0.1939829370003281,0.19396143199999472,386410636,9,null,null,null,null,null,null,null],[0.22980951399949845,0.2298071140000033,457776439,10,null,null,null,null,null,null,null],[0.24752238800010673,0.24748755099999897,493059603,11,null,null,null,null,null,null,null],[0.2500593150007262,0.25004241299999563,498112930,12,null,null,null,null,null,null,null],[0.31981034799991903,0.3198081899999963,637059914,13,null,null,null,null,null,null,null],[0.3752840639999704,0.3752736129999974,747557200,14,null,null,null,null,null,null,null],[0.31829379800001334,0.3182500149999967,634034753,15,null,null,null,null,null,null,null],[0.44437383500007854,0.44435623700000093,885182194,16,null,null,null,null,null,null,null],[0.4625148180002725,0.46181722899999755,921318254,17,null,null,null,null,null,null,null],[0.4224695140001131,0.42246444999999966,841549643,18,null,null,null,null,null,null,null],[0.43437429099958536,0.4343594039999985,865263548,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.273948075541962e-4,"confIntUDX":3.311561734108386e-4,"confIntCL":5.0e-2},"estPoint":6.799653267933072e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.208388877836944e-2,"confIntUDX":3.545929954228477e-2,"confIntCL":5.0e-2},"estPoint":0.9373087736258467},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.185399860915975e-3,"confIntUDX":1.0164662011635944e-2,"confIntCL":5.0e-2},"estPoint":1.7856901310107545e-2},"iters":{"estError":{"confIntLDX":4.0855192217469256e-4,"confIntUDX":5.541358721524673e-4,"confIntCL":5.0e-2},"estPoint":5.63380987932288e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.2097251902340401e-4,"confIntUDX":1.720021043338019e-4,"confIntCL":5.0e-2},"estPoint":9.861316275568532e-4},"anOutlierVar":{"ovFraction":0.7452584292183818,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[5.270948137352351e-3,5.3008201699593065e-3,5.330692202566262e-3,5.360564235173218e-3,5.390436267780173e-3,5.420308300387129e-3,5.450180332994084e-3,5.48005236560104e-3,5.5099243982079955e-3,5.539796430814951e-3,5.569668463421907e-3,5.599540496028862e-3,5.629412528635818e-3,5.659284561242773e-3,5.689156593849729e-3,5.719028626456684e-3,5.74890065906364e-3,5.7787726916705955e-3,5.808644724277551e-3,5.838516756884507e-3,5.868388789491462e-3,5.898260822098418e-3,5.928132854705373e-3,5.958004887312329e-3,5.9878769199192845e-3,6.01774895252624e-3,6.047620985133196e-3,6.077493017740151e-3,6.107365050347107e-3,6.137237082954062e-3,6.167109115561018e-3,6.196981148167973e-3,6.226853180774929e-3,6.2567252133818845e-3,6.28659724598884e-3,6.316469278595796e-3,6.346341311202751e-3,6.376213343809707e-3,6.406085376416662e-3,6.435957409023618e-3,6.4658294416305735e-3,6.495701474237529e-3,6.525573506844485e-3,6.55544553945144e-3,6.585317572058396e-3,6.615189604665351e-3,6.645061637272307e-3,6.674933669879262e-3,6.704805702486218e-3,6.7346777350931735e-3,6.764549767700129e-3,6.794421800307085e-3,6.82429383291404e-3,6.854165865520996e-3,6.884037898127951e-3,6.913909930734907e-3,6.9437819633418624e-3,6.973653995948818e-3,7.003526028555774e-3,7.033398061162729e-3,7.063270093769685e-3,7.09314212637664e-3,7.123014158983596e-3,7.152886191590551e-3,7.182758224197507e-3,7.2126302568044625e-3,7.242502289411418e-3,7.272374322018374e-3,7.302246354625329e-3,7.332118387232285e-3,7.36199041983924e-3,7.391862452446196e-3,7.4217344850531514e-3,7.451606517660107e-3,7.4814785502670626e-3,7.511350582874018e-3,7.541222615480974e-3,7.571094648087929e-3,7.600966680694885e-3,7.63083871330184e-3,7.660710745908796e-3,7.6905827785157515e-3,7.720454811122707e-3,7.750326843729663e-3,7.780198876336618e-3,7.810070908943574e-3,7.83994294155053e-3,7.869814974157485e-3,7.89968700676444e-3,7.929559039371396e-3,7.959431071978352e-3,7.989303104585307e-3,8.019175137192263e-3,8.049047169799218e-3,8.078919202406174e-3,8.10879123501313e-3,8.138663267620085e-3,8.16853530022704e-3,8.198407332833996e-3,8.228279365440952e-3,8.258151398047907e-3,8.288023430654863e-3,8.317895463261818e-3,8.347767495868774e-3,8.37763952847573e-3,8.407511561082685e-3,8.43738359368964e-3,8.467255626296596e-3,8.497127658903552e-3,8.526999691510507e-3,8.556871724117463e-3,8.586743756724418e-3,8.616615789331374e-3,8.64648782193833e-3,8.676359854545285e-3,8.70623188715224e-3,8.736103919759196e-3,8.765975952366152e-3,8.795847984973107e-3,8.825720017580063e-3,8.855592050187018e-3,8.885464082793974e-3,8.91533611540093e-3,8.945208148007885e-3,8.97508018061484e-3,9.004952213221796e-3,9.034824245828752e-3,9.064696278435707e-3],"kdeType":"time","kdePDF":[346.12340375180366,346.0596212051218,345.9322138601291,345.74149633725466,345.48793838159776,345.17216225491705,344.7949392825998,344.3571855762806,343.8599569577356,343.30444311448434,342.691961022177,342.02394767328775,341.3019521558619,340.5276271300383,339.70271975377756,338.8290621126398,337.908561211552,336.9431885892701,335.9349696186496,334.8859725578763,333.7982974194666,332.67406472509634,331.5154042151694,330.3244435824628,329.1032972991914,327.8540556064139,326.5787737338508,325.27946141690944,323.95807277601125,322.61649662120544,321.2565472425326,319.87995574369415,318.4883619732995,317.08330710431744,315.6662269083825,314.2384457673188,312.80117145966324,311.3554907551451,309.9023658450143,308.44263163086646,306.97699388919756,305.5060283233966,304.03018050926084,302.5497667344626,301.06497572671714,299.5758712597709,298.08239562074584,296.58437391692814,295.08151919475984,293.57343833867577,292.0596387124979,290.53953550145883,289.0124597085354,287.4776667547284,285.93434562919566,284.3816285318114,282.81860094774675,281.2443120911352,279.65778565273604,278.05803078483433,276.4440532553491,274.8148667023368,273.1695039197073,271.50702810508864,269.82654400129763,268.1272088638676,266.4082431884667,264.66894113386223,262.908680578268,261.1269327494924,259.32327137220204,257.4973812788642,255.64906643444374,253.7782573287373,251.88501769423993,249.96955051168428,248.03220326977984,246.0734724502364,244.0940072137826,242.0946122676322,240.0762498995873,238.04004116875942,235.9872662476139,233.9193639147601,231.83793020250343,229.74471620770345,227.64162507883947,225.53070819642127,223.41416056791064,221.29431546218166,219.1736383121641,217.05471991773575,214.94026898407756,212.83310403362978,210.73614473242776,208.65240267398931,206.58497166603146,204.5370175671426,202.5117677220959,200.51250004579217,198.54253180684208,196.6052081625642,194.7038904976776,192.84194461922505,191.02272886027185,189.24958214470882,187.52581206504115,185.8546830243914,184.2394044930916,182.6831194291893,181.1888929109771,179.75970102826273,178.39842007756044,177.10781610470067,175.89053483654308,174.74909204154744,173.68586435692032,172.70308061791468,171.80281372263997,170.98697306343638,170.25729755349323,169.61534927496245,169.06250777232748,168.59996501225694,168.22872102860012,167.9495802685733,167.7631486535525,167.66983136523197]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":9,"reportName":"ByteString/Map/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":32,"lowSevere":0},"reportMeasured":[[5.268668000098842e-3,5.268733000001191e-3,10495678,1,null,null,null,null,null,null,null],[1.088318399979471e-2,1.0883222000003911e-2,21679741,2,null,null,null,null,null,null,null],[1.8716007999501016e-2,1.8715995999997403e-2,37282649,3,null,null,null,null,null,null,null],[2.2553118000359973e-2,2.2553040000005353e-2,44925993,4,null,null,null,null,null,null,null],[2.838538600008178e-2,2.8385294000003114e-2,56543936,5,null,null,null,null,null,null,null],[3.3918402999916e-2,3.391824900000273e-2,67565467,6,null,null,null,null,null,null,null],[4.921759899934841e-2,4.9219360000002155e-2,98045252,7,null,null,null,null,null,null,null],[4.59771499999988e-2,4.5976885999998274e-2,91586282,8,null,null,null,null,null,null,null],[7.413082600032794e-2,7.41301039999982e-2,147667501,9,null,null,null,null,null,null,null],[7.0292215000336e-2,7.029163699999685e-2,140021366,10,null,null,null,null,null,null,null],[8.485722800014628e-2,8.485637899999432e-2,169034324,11,null,null,null,null,null,null,null],[9.985746099937387e-2,9.983587500000368e-2,198914684,12,null,null,null,null,null,null,null],[0.10295746300016617,0.10294534100000163,205089441,13,null,null,null,null,null,null,null],[0.10752186900026572,0.1075213480000059,214182854,14,null,null,null,null,null,null,null],[0.11492188699958206,0.11492063499999716,228922327,15,null,null,null,null,null,null,null],[0.1188515150006424,0.11885024999999416,236749779,16,null,null,null,null,null,null,null],[0.12236560000019381,0.12236445100000282,243750362,17,null,null,null,null,null,null,null],[0.1291521240000293,0.12915301000000312,257273098,18,null,null,null,null,null,null,null],[0.13736583500030974,0.13736501300000015,273631185,19,null,null,null,null,null,null,null],[0.1749710120002419,0.17494040400000443,348538762,20,null,null,null,null,null,null,null],[0.14640440499988472,0.14640285999999492,291634679,21,null,null,null,null,null,null,null],[0.1576957669994954,0.1576856719999995,314126629,22,null,null,null,null,null,null,null],[0.1521126509996975,0.1521033309999993,303005727,23,null,null,null,null,null,null,null],[0.19041092000043136,0.19040863700000443,379294179,25,null,null,null,null,null,null,null],[0.1583251020001626,0.15832455299999992,315382846,26,null,null,null,null,null,null,null],[0.17709199799992348,0.17708197400000358,352763570,27,null,null,null,null,null,null,null],[0.17102690899992012,0.17101550000000287,340682173,28,null,null,null,null,null,null,null],[0.2491226860001916,0.24911977900000437,496246763,30,null,null,null,null,null,null,null],[0.1811217040003612,0.18111969800000338,360790631,31,null,null,null,null,null,null,null],[0.18597984999996697,0.18597768400000092,370467684,33,null,null,null,null,null,null,null],[0.1983363890003602,0.19833410600000434,395081535,35,null,null,null,null,null,null,null],[0.2033770950001781,0.20337475499999869,405122666,36,null,null,null,null,null,null,null],[0.2123095649994866,0.21229444599999425,422916008,38,null,null,null,null,null,null,null],[0.22420824300024833,0.22420565800000247,446617870,40,null,null,null,null,null,null,null],[0.24246396499984257,0.24246101399999986,482982480,42,null,null,null,null,null,null,null],[0.2549935010001718,0.2549679999999981,507940920,44,null,null,null,null,null,null,null],[0.27398793599968485,0.27398464800000255,545777607,47,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.858320849709265e-4,"confIntUDX":2.94720572459925e-4,"confIntCL":5.0e-2},"estPoint":8.64794121917834e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.7372023516920798e-2,"confIntUDX":1.4506897591844314e-2,"confIntCL":5.0e-2},"estPoint":0.9799356136641313},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":5.1907539084835854e-3,"confIntUDX":3.4993608773215786e-3,"confIntCL":5.0e-2},"estPoint":-2.562478723368102e-5},"iters":{"estError":{"confIntLDX":3.3369302088950316e-4,"confIntUDX":4.91037106811221e-4,"confIntCL":5.0e-2},"estPoint":8.659140651168608e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.6123901941357825e-4,"confIntUDX":1.948333034271641e-4,"confIntCL":5.0e-2},"estPoint":6.522594847018913e-4},"anOutlierVar":{"ovFraction":0.4210710119243513,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[7.708719262449757e-3,7.73082710716894e-3,7.752934951888124e-3,7.775042796607307e-3,7.79715064132649e-3,7.819258486045673e-3,7.841366330764857e-3,7.863474175484041e-3,7.885582020203223e-3,7.907689864922407e-3,7.92979770964159e-3,7.951905554360773e-3,7.974013399079957e-3,7.99612124379914e-3,8.018229088518323e-3,8.040336933237507e-3,8.06244477795669e-3,8.084552622675873e-3,8.106660467395057e-3,8.12876831211424e-3,8.150876156833423e-3,8.172984001552606e-3,8.19509184627179e-3,8.217199690990972e-3,8.239307535710156e-3,8.26141538042934e-3,8.283523225148522e-3,8.305631069867706e-3,8.32773891458689e-3,8.349846759306072e-3,8.371954604025256e-3,8.39406244874444e-3,8.416170293463622e-3,8.438278138182806e-3,8.46038598290199e-3,8.482493827621172e-3,8.504601672340356e-3,8.52670951705954e-3,8.548817361778722e-3,8.570925206497906e-3,8.59303305121709e-3,8.615140895936272e-3,8.637248740655456e-3,8.65935658537464e-3,8.681464430093822e-3,8.703572274813005e-3,8.72568011953219e-3,8.747787964251373e-3,8.769895808970555e-3,8.792003653689739e-3,8.814111498408921e-3,8.836219343128105e-3,8.858327187847289e-3,8.880435032566473e-3,8.902542877285655e-3,8.924650722004839e-3,8.946758566724021e-3,8.968866411443205e-3,8.990974256162389e-3,9.013082100881573e-3,9.035189945600755e-3,9.057297790319939e-3,9.07940563503912e-3,9.101513479758305e-3,9.123621324477488e-3,9.145729169196672e-3,9.167837013915854e-3,9.189944858635038e-3,9.21205270335422e-3,9.234160548073404e-3,9.256268392792588e-3,9.278376237511772e-3,9.300484082230954e-3,9.322591926950138e-3,9.344699771669322e-3,9.366807616388504e-3,9.388915461107688e-3,9.411023305826872e-3,9.433131150546054e-3,9.455238995265238e-3,9.477346839984422e-3,9.499454684703604e-3,9.521562529422788e-3,9.543670374141972e-3,9.565778218861154e-3,9.587886063580338e-3,9.609993908299521e-3,9.632101753018703e-3,9.654209597737887e-3,9.676317442457071e-3,9.698425287176253e-3,9.720533131895437e-3,9.742640976614621e-3,9.764748821333803e-3,9.786856666052987e-3,9.808964510772171e-3,9.831072355491353e-3,9.853180200210537e-3,9.87528804492972e-3,9.897395889648903e-3,9.919503734368087e-3,9.94161157908727e-3,9.963719423806453e-3,9.985827268525637e-3,1.000793511324482e-2,1.0030042957964003e-2,1.0052150802683187e-2,1.007425864740237e-2,1.0096366492121553e-2,1.0118474336840736e-2,1.014058218155992e-2,1.0162690026279102e-2,1.0184797870998286e-2,1.020690571571747e-2,1.0229013560436652e-2,1.0251121405155836e-2,1.027322924987502e-2,1.0295337094594202e-2,1.0317444939313386e-2,1.033955278403257e-2,1.0361660628751754e-2,1.0383768473470936e-2,1.040587631819012e-2,1.0427984162909302e-2,1.0450092007628486e-2,1.047219985234767e-2,1.0494307697066853e-2,1.0516415541786036e-2],"kdeType":"time","kdePDF":[192.85843539548247,198.55820729258429,209.9067949869576,226.80045328064986,249.07916518889093,276.52187303832704,308.8409586123427,345.67666205505986,386.59225311209246,431.0708446764867,478.5147490445483,528.2482049637861,579.5241373523888,631.5353500894588,683.4302070340487,734.3324533042357,783.3644070660172,829.6723604661657,872.4527189944723,910.9772288236278,944.615625695085,972.8542004199242,995.3091039412916,1011.7336728628221,1022.0195870830836,1026.1922047371445,1024.4008846609647,1016.9054423719783,1004.0600527289315,986.2958999417108,964.1037025330952,938.0169525558506,908.5963675162615,876.4157277875089,842.0490214675415,806.0586828624682,768.9847035906334,731.3345018757492,693.5736169082901,656.11749705167,619.3248158534884,583.4928301859537,548.8552615867792,515.5830313504846,483.78793406620474,453.5290357467228,424.8212857171754,397.6455907087354,371.95945917964985,347.7073085882042,324.8296392734156,303.2704934936846,282.98289633129644,263.93226581791464,246.0980319183941,229.47387660518854,214.06707576964914,199.8973845656889,186.99577799845687,175.4031717925607,165.1690481490942,156.34974163483383,149.0060399682647,143.19974715835605,138.9889490172828,136.42190177269669,135.52970544040357,136.31818554906806,138.75964567239967,142.78532718838687,148.27948865557264,155.0759758545614,162.95799225172905,171.66151291244284,180.88244243186034,190.28724014597123,199.5263702720886,208.2496266402761,216.12217046739408,222.8400322885705,228.14387705816773,231.83000862790212,233.7578738525021,233.85368155153736,232.11013301734917,228.5826218152307,223.3825583539388,216.66867592883614,208.6372604758195,199.51221309341304,189.53571536326976,178.96004885476034,168.04085717691507,157.03187039845332,146.1808745204433,135.72653310380184,125.8955740130319,116.89984942794922,108.9328577322189,102.16546716452348,96.74078102212079,92.76830595891383,90.31780034347499,89.41336201121516,90.02844111351062,92.08251674594543,95.44014508844333,99.91296911641776,105.26508101631048,111.22186208795816,117.48211282364694,123.73295629753633,129.66668370483418,134.9984460154384,139.48351217280361,142.9327378505614,145.22493551640326,146.3150100805324,146.23701472307494,145.1016654681779,143.08829669582363,140.43170189396338,137.40474086604542,134.29796496199947,131.39778104354033,128.96481824030866,127.21416657121439,126.2990232822616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":10,"reportName":"ByteString/Map/random","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":30,"lowSevere":0},"reportMeasured":[[1.005231300041487e-2,1.0052598000001467e-2,20025096,1,null,null,null,null,null,null,null],[1.9699227000273822e-2,1.969939399999987e-2,39241513,2,null,null,null,null,null,null,null],[3.0796312000347825e-2,3.0796467999998356e-2,61347827,3,null,null,null,null,null,null,null],[3.530741799932002e-2,3.530734799999635e-2,70332637,4,null,null,null,null,null,null,null],[4.243936399961967e-2,4.243899900000514e-2,84538828,5,null,null,null,null,null,null,null],[4.865947199959919e-2,4.86529200000021e-2,96929313,6,null,null,null,null,null,null,null],[5.7684898999468714e-2,5.768456699999547e-2,114908101,7,null,null,null,null,null,null,null],[7.253194900022208e-2,7.253130099999794e-2,144482647,8,null,null,null,null,null,null,null],[7.364764199974161e-2,7.364090799999445e-2,146707433,9,null,null,null,null,null,null,null],[8.253616299953137e-2,8.253531300000105e-2,164410518,10,null,null,null,null,null,null,null],[9.276555499945971e-2,9.275186099999644e-2,184788186,11,null,null,null,null,null,null,null],[0.10018211700025859,0.10016250999999698,199560933,12,null,null,null,null,null,null,null],[0.10642467300021963,0.10641797800000319,211995873,13,null,null,null,null,null,null,null],[0.11410040999999183,0.11409916999999581,227285775,14,null,null,null,null,null,null,null],[0.12336995900022885,0.12336876100000183,245751278,15,null,null,null,null,null,null,null],[0.12825289299962606,0.12824530700000025,255477269,16,null,null,null,null,null,null,null],[0.14549820499996713,0.1454886399999964,289829482,17,null,null,null,null,null,null,null],[0.16991017300006206,0.16989852900000102,338457586,18,null,null,null,null,null,null,null],[0.18149093400006677,0.1814888429999968,361525955,19,null,null,null,null,null,null,null],[0.1649136410005667,0.16491175800000235,328504075,20,null,null,null,null,null,null,null],[0.1667965730002834,0.16679473699999647,332255295,21,null,null,null,null,null,null,null],[0.19235600899992278,0.1923537309999972,383168755,22,null,null,null,null,null,null,null],[0.22425931899942952,0.22425875300000087,446726143,23,null,null,null,null,null,null,null],[0.21758937799950218,0.2175805440000005,433433355,25,null,null,null,null,null,null,null],[0.2167109749998417,0.2167012699999944,431683137,26,null,null,null,null,null,null,null],[0.27762590299971635,0.277622633,553024427,27,null,null,null,null,null,null,null],[0.2656790169994565,0.26565922799999697,529226566,28,null,null,null,null,null,null,null],[0.24561053100023855,0.24560976800000134,489254877,30,null,null,null,null,null,null,null],[0.2500008759998309,0.24999787800000206,497995809,31,null,null,null,null,null,null,null],[0.2795256050003445,0.27952251100000325,556808921,33,null,null,null,null,null,null,null],[0.2945494880004844,0.2945459430000028,586735513,35,null,null,null,null,null,null,null],[0.3047629499997129,0.30474784300000124,607081324,36,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0146217357556806e-4,"confIntUDX":1.8120545813261803e-4,"confIntCL":5.0e-2},"estPoint":6.0200457824953705e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4863364800033585e-2,"confIntUDX":1.3585850286056411e-2,"confIntCL":5.0e-2},"estPoint":0.9845165665462834},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":3.999391374731412e-3,"confIntUDX":2.7250428196408825e-3,"confIntCL":5.0e-2},"estPoint":-1.831304674123719e-3},"iters":{"estError":{"confIntLDX":1.7752643444074283e-4,"confIntUDX":3.1884684952994836e-4,"confIntCL":5.0e-2},"estPoint":6.161397548473027e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.52785339144139e-4,"confIntUDX":2.0805521912514502e-4,"confIntCL":5.0e-2},"estPoint":4.05037207706454e-4},"anOutlierVar":{"ovFraction":0.4049491808491435,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[5.473953688048519e-3,5.490644426181652e-3,5.507335164314784e-3,5.524025902447917e-3,5.5407166405810485e-3,5.557407378714181e-3,5.5740981168473135e-3,5.590788854980446e-3,5.6074795931135785e-3,5.624170331246711e-3,5.640861069379843e-3,5.657551807512975e-3,5.674242545646108e-3,5.69093328377924e-3,5.707624021912373e-3,5.724314760045505e-3,5.741005498178637e-3,5.757696236311769e-3,5.774386974444902e-3,5.791077712578034e-3,5.807768450711167e-3,5.824459188844299e-3,5.841149926977431e-3,5.857840665110563e-3,5.874531403243696e-3,5.891222141376828e-3,5.907912879509961e-3,5.924603617643093e-3,5.941294355776225e-3,5.9579850939093576e-3,5.97467583204249e-3,5.991366570175623e-3,6.008057308308755e-3,6.024748046441888e-3,6.041438784575019e-3,6.058129522708152e-3,6.074820260841284e-3,6.091510998974417e-3,6.108201737107549e-3,6.124892475240682e-3,6.141583213373814e-3,6.158273951506946e-3,6.174964689640078e-3,6.191655427773211e-3,6.208346165906343e-3,6.225036904039476e-3,6.2417276421726075e-3,6.25841838030574e-3,6.2751091184388725e-3,6.291799856572005e-3,6.3084905947051375e-3,6.32518133283827e-3,6.3418720709714025e-3,6.358562809104534e-3,6.375253547237667e-3,6.391944285370799e-3,6.408635023503932e-3,6.425325761637064e-3,6.442016499770196e-3,6.458707237903328e-3,6.475397976036461e-3,6.492088714169593e-3,6.508779452302726e-3,6.525470190435858e-3,6.542160928568991e-3,6.558851666702122e-3,6.575542404835255e-3,6.592233142968387e-3,6.60892388110152e-3,6.625614619234652e-3,6.642305357367784e-3,6.6589960955009166e-3,6.675686833634049e-3,6.6923775717671816e-3,6.709068309900314e-3,6.725759048033447e-3,6.742449786166579e-3,6.759140524299711e-3,6.775831262432843e-3,6.792522000565976e-3,6.809212738699108e-3,6.825903476832241e-3,6.842594214965372e-3,6.859284953098505e-3,6.875975691231637e-3,6.89266642936477e-3,6.909357167497902e-3,6.926047905631035e-3,6.942738643764167e-3,6.9594293818973e-3,6.9761201200304315e-3,6.992810858163564e-3,7.0095015962966965e-3,7.026192334429829e-3,7.042883072562961e-3,7.059573810696093e-3,7.076264548829226e-3,7.092955286962358e-3,7.109646025095491e-3,7.126336763228623e-3,7.143027501361756e-3,7.159718239494888e-3,7.17640897762802e-3,7.193099715761152e-3,7.209790453894285e-3,7.226481192027417e-3,7.243171930160549e-3,7.259862668293681e-3,7.276553406426814e-3,7.293244144559946e-3,7.309934882693079e-3,7.326625620826211e-3,7.343316358959344e-3,7.360007097092476e-3,7.376697835225608e-3,7.3933885733587406e-3,7.410079311491873e-3,7.426770049625006e-3,7.443460787758137e-3,7.46015152589127e-3,7.476842264024402e-3,7.493533002157535e-3,7.510223740290667e-3,7.5269144784238e-3,7.543605216556932e-3,7.560295954690065e-3,7.576986692823197e-3,7.593677430956329e-3],"kdeType":"time","kdePDF":[121.82478688616182,135.24390771338489,162.38174256622165,203.76020146301767,259.9756927030033,331.4948828882259,418.41633889232446,520.2286133922315,635.6020114619961,762.2540623050751,896.9252965533394,1035.4908069911132,1173.2143997344922,1305.1281778906407,1426.49536782347,1533.2934928235456,1622.643852543284,1693.1152780869209,1744.8461265286785,1779.4560917448696,1799.7535657708738,1809.2784170978305,1811.747661472214,1810.4875939812632,1807.937962421923,1805.3018078707762,1802.3911531523124,1797.687938326534,1788.6065307170775,1771.9139586046367,1744.2413678899177,1702.6085361827243,1644.884316696557,1570.1192165668717,1478.7093479437697,1372.379347059022,1254.0002287538111,1127.2814364596047,996.3907991119163,865.560061236524,738.7277577088759,619.2580029546332,509.75684915742363,411.99089666018995,326.8987047953034,254.6759150552004,194.91024226377246,146.74199265646635,109.0283511073982,80.49404403511032,59.856029561749814,45.91484512390338,37.609767250695825,34.03888851246462,34.44860487457091,38.19984447353418,44.720570239878,53.45543279659407,63.82361577201444,75.19458846743893,86.88850537433555,98.2035246455894,108.46691690786108,117.10143791890938,123.6941949616943,128.05324065416764,130.23810201365407,130.55449820795042,129.50999378804053,127.73501878879114,125.88094434792201,124.51212982185848,124.01085032506322,124.51225269557929,125.88126207827611,127.73570628241384,129.51139778408506,130.55725671958388,130.24332766229838,128.06277019336883,123.71087077263591,117.12930228379659,108.51103152510753,98.26882891038359,86.97664191676168,75.29690108315467,63.907535761525885,53.4402443860973,44.43721018818427,37.32820543067468,32.42519196449465,29.928179055426508,29.934868570822797,32.44759165082797,37.373801884844724,44.520136699658735,53.58378657738896,64.1476174310892,75.68637871053703,87.5899926852536,99.20647139045623,109.90211173859194,119.13139988503974,126.50486730827798,131.84123966924417,135.19141265493374,136.82616231272078,137.18631441877363,136.80192130340873,136.19401550375792,135.77699734064092,135.78047138198988,136.2060406303975,136.82783598474768,137.23687303852284,136.92063477365733,135.36251798991336,132.14240937939562,127.02029223719038,119.98907401951824,111.28956635152001,101.38803502289359,90.92322285601676,80.63390959545555,71.27932694451422,63.5633401046598,58.07015853091618,55.21569366030053]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":11,"reportName":"ByteString/Map/revsorted","reportOutliers":{"highSevere":2,"highMild":2,"lowMild":0,"samplesSeen":33,"lowSevere":0},"reportMeasured":[[5.730931000471173e-3,5.731085999997276e-3,11416584,1,null,null,null,null,null,null,null],[1.107358699937322e-2,1.1073656999997183e-2,22059137,2,null,null,null,null,null,null,null],[1.808070199967915e-2,1.8080931999996608e-2,36017559,3,null,null,null,null,null,null,null],[2.334339099979843e-2,2.3343320999998696e-2,46500372,4,null,null,null,null,null,null,null],[2.8997962000175903e-2,2.8997803999999405e-2,57763925,5,null,null,null,null,null,null,null],[3.3903583999745024e-2,3.389761000000391e-2,67535691,6,null,null,null,null,null,null,null],[4.077235399927304e-2,4.077211200000619e-2,81218328,7,null,null,null,null,null,null,null],[4.577922699991177e-2,4.5773125000003745e-2,91191746,8,null,null,null,null,null,null,null],[5.5217939000613114e-2,5.5217460999998025e-2,109993545,9,null,null,null,null,null,null,null],[5.968087399924116e-2,5.9672932999994543e-2,118883504,10,null,null,null,null,null,null,null],[6.466178800019406e-2,6.466127899999918e-2,128805428,11,null,null,null,null,null,null,null],[7.037373799994384e-2,7.037298899999911e-2,140183258,12,null,null,null,null,null,null,null],[7.487446000050113e-2,7.48738160000002e-2,149148899,13,null,null,null,null,null,null,null],[8.054586500020378e-2,8.050665199999685e-2,160446037,14,null,null,null,null,null,null,null],[8.56363800003237e-2,8.563551999999675e-2,170586216,15,null,null,null,null,null,null,null],[9.200188300019363e-2,9.200142699999958e-2,183267166,16,null,null,null,null,null,null,null],[9.7334692000004e-2,9.733374400000372e-2,193889014,17,null,null,null,null,null,null,null],[0.10428558500007057,0.10428442999999987,207734819,18,null,null,null,null,null,null,null],[0.1093070169999919,0.10930587599999342,217737682,19,null,null,null,null,null,null,null],[0.11519934300031309,0.11519272900000033,229474888,20,null,null,null,null,null,null,null],[0.12531965200014383,0.125305455000003,249634337,21,null,null,null,null,null,null,null],[0.14925606300039362,0.14924727200000376,297315215,22,null,null,null,null,null,null,null],[0.1378330100005769,0.13782502499999794,274560627,23,null,null,null,null,null,null,null],[0.14632629599964275,0.14632471200000197,291478967,25,null,null,null,null,null,null,null],[0.15559459799987962,0.15559306600000156,309941712,26,null,null,null,null,null,null,null],[0.1631769780005925,0.16316835800000007,325045074,27,null,null,null,null,null,null,null],[0.2076769459999923,0.2076607569999993,413687776,28,null,null,null,null,null,null,null],[0.18284677700012253,0.18283772600000248,364226884,30,null,null,null,null,null,null,null],[0.20314648399926227,0.20314410099999947,404663308,31,null,null,null,null,null,null,null],[0.19946302300013485,0.19946075600000057,397325913,33,null,null,null,null,null,null,null],[0.21055673599948932,0.21055421300000177,419424100,35,null,null,null,null,null,null,null],[0.2593114110004535,0.2592952200000056,516542599,36,null,null,null,null,null,null,null],[0.22768934899977467,0.22766971800000135,453551700,38,null,null,null,null,null,null,null],[0.23597945500023343,0.23597134300000278,470066048,40,null,null,null,null,null,null,null],[0.25315554200005863,0.2531525549999998,504279991,42,null,null,null,null,null,null,null],[0.25404201800029114,0.2540246359999969,506045690,44,null,null,null,null,null,null,null],[0.27939415200035,0.2793907840000003,556546542,47,null,null,null,null,null,null,null],[0.295088451999618,0.2950853769999995,587810133,49,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":5.4239401475972455e-5,"confIntUDX":7.185268770627026e-5,"confIntCL":5.0e-2},"estPoint":4.183210063607106e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":5.743859002251495e-3,"confIntUDX":4.335195471424913e-3,"confIntCL":5.0e-2},"estPoint":0.9937076277093424},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.1241331929631735e-3,"confIntUDX":2.2072736389632704e-3,"confIntCL":5.0e-2},"estPoint":1.7202057697345626e-3},"iters":{"estError":{"confIntLDX":7.72167674596624e-5,"confIntUDX":1.392972994530622e-4,"confIntCL":5.0e-2},"estPoint":4.113512390105684e-3}}}],"anStdDev":{"estError":{"confIntLDX":4.7329458662270335e-5,"confIntUDX":5.825264413319379e-5,"confIntCL":5.0e-2},"estPoint":1.9627155674962126e-4},"anOutlierVar":{"ovFraction":0.2607287134452999,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.906951581783667e-3,3.914047188226286e-3,3.921142794668904e-3,3.928238401111523e-3,3.935334007554142e-3,3.942429613996761e-3,3.94952522043938e-3,3.956620826881999e-3,3.9637164333246174e-3,3.970812039767236e-3,3.977907646209855e-3,3.985003252652474e-3,3.992098859095092e-3,3.999194465537711e-3,4.00629007198033e-3,4.013385678422949e-3,4.020481284865568e-3,4.027576891308187e-3,4.034672497750805e-3,4.041768104193424e-3,4.048863710636043e-3,4.0559593170786615e-3,4.06305492352128e-3,4.070150529963899e-3,4.077246136406518e-3,4.084341742849137e-3,4.091437349291756e-3,4.098532955734375e-3,4.105628562176993e-3,4.112724168619612e-3,4.119819775062231e-3,4.1269153815048495e-3,4.134010987947468e-3,4.141106594390087e-3,4.1482022008327065e-3,4.155297807275325e-3,4.162393413717944e-3,4.169489020160563e-3,4.176584626603181e-3,4.1836802330458e-3,4.190775839488419e-3,4.1978714459310375e-3,4.204967052373656e-3,4.212062658816275e-3,4.219158265258894e-3,4.226253871701513e-3,4.233349478144132e-3,4.240445084586751e-3,4.247540691029369e-3,4.254636297471988e-3,4.261731903914607e-3,4.2688275103572254e-3,4.275923116799844e-3,4.283018723242463e-3,4.2901143296850824e-3,4.297209936127701e-3,4.30430554257032e-3,4.311401149012939e-3,4.318496755455557e-3,4.325592361898176e-3,4.332687968340795e-3,4.339783574783413e-3,4.346879181226032e-3,4.353974787668651e-3,4.36107039411127e-3,4.368166000553889e-3,4.375261606996508e-3,4.3823572134391265e-3,4.389452819881745e-3,4.396548426324364e-3,4.403644032766983e-3,4.410739639209601e-3,4.41783524565222e-3,4.42493085209484e-3,4.432026458537458e-3,4.439122064980077e-3,4.446217671422696e-3,4.4533132778653145e-3,4.460408884307933e-3,4.467504490750552e-3,4.474600097193171e-3,4.481695703635789e-3,4.488791310078408e-3,4.495886916521027e-3,4.502982522963646e-3,4.510078129406265e-3,4.517173735848884e-3,4.5242693422915025e-3,4.531364948734121e-3,4.53846055517674e-3,4.545556161619359e-3,4.552651768061977e-3,4.559747374504596e-3,4.566842980947216e-3,4.573938587389834e-3,4.581034193832453e-3,4.588129800275072e-3,4.59522540671769e-3,4.602321013160309e-3,4.609416619602928e-3,4.6165122260455466e-3,4.623607832488165e-3,4.630703438930784e-3,4.637799045373403e-3,4.644894651816022e-3,4.651990258258641e-3,4.65908586470126e-3,4.666181471143878e-3,4.673277077586497e-3,4.680372684029116e-3,4.6874682904717345e-3,4.694563896914353e-3,4.701659503356973e-3,4.7087551097995915e-3,4.71585071624221e-3,4.722946322684829e-3,4.730041929127448e-3,4.737137535570066e-3,4.744233142012685e-3,4.751328748455304e-3,4.7584243548979225e-3,4.765519961340541e-3,4.77261556778316e-3,4.7797111742257795e-3,4.786806780668398e-3,4.793902387111017e-3,4.800997993553636e-3,4.808093599996254e-3],"kdeType":"time","kdePDF":[776.9589937378233,803.7244297328687,856.6539684841589,934.5515040579273,1035.6413032489331,1157.595307937139,1297.5768482589162,1452.3046068430856,1618.1391401915098,1791.1917971107052,1967.4528494282918,2142.932563490089,2313.806326477114,2476.553278447414,2628.0775281244005,2765.802085632588,2887.728039280513,2992.4549332266306,3079.1623024657683,3147.5563395073177,3197.7891562140635,3230.3606075569587,3246.0138615293044,3245.635725506639,3230.171266411974,3200.559753391602,3157.695790620016,3102.4161345011385,3035.5095367016506,2957.7443918276854,2869.9072619728418,2772.8446388538,2667.500594695041,2554.944150257121,2436.382037632519,2313.1547737608444,2186.7162744003854,2058.5993229977043,1930.3708075567881,1803.5815745423074,1679.7159479937548,1560.1454609467046,1446.0902835763204,1338.5904241268265,1238.4872804767851,1146.4147839483373,1062.7984081451154,987.8598401239741,921.6251576575407,863.934856395016,814.4548769387183,772.6886986849581,737.9913887567093,709.5870411591034,686.5911907839203,668.0394916714708,652.9232419037338,640.231323957802,628.9969685205397,618.3466292396907,607.5473629021537,596.0486030061796,583.5142014714967,569.8411315011855,555.1622567779793,539.8319684957883,524.3951046957152,509.541194406985,496.04750619730265,484.7154476501718,476.305433703684,471.47536470660236,470.7273546313584,474.36642159838647,482.4736425056361,494.8949493258631,511.24546720315,530.928191333553,553.1649488551963,577.0370184207278,601.5324634691792,625.597127080742,648.1862809852012,668.3140743063011,685.0981669922411,697.797260539488,705.8396719733233,708.8416538104636,706.6148439393402,699.163006234,686.6690318690502,669.4739205585521,648.0500451743326,622.9713265847731,594.8829448214371,564.472875373796,532.446912213722,499.5080236079008,466.34002276901214,433.59477560216135,401.8816484975329,371.75771351339046,343.7174079718224,318.1808537254534,295.4807794693755,275.8488147756292,259.4026761133526,246.13629253599285,235.91510824329322,228.47859323757095,223.4513997482925,220.3636929721952,218.68008411194816,217.83545819754795,217.2749832774392,216.4948589399106,215.08001994282938,212.7351104932141,209.30558160323108,204.78667532815376,199.31923599631008,193.1725902999046,186.71601607542584,180.38143451136557,174.62079948915718,169.86214504720317,166.46835331710525,164.70242641517314]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":12,"reportName":"ByteString/HashMap/sorted","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.508691000206454e-3,3.5088439999952925e-3,6990017,1,null,null,null,null,null,null,null],[8.737513999221846e-3,8.738131999997734e-3,17406720,2,null,null,null,null,null,null,null],[1.2593759000083082e-2,1.2593860999999151e-2,25087545,3,null,null,null,null,null,null,null],[1.6463273000226764e-2,1.6463348000002043e-2,32795496,4,null,null,null,null,null,null,null],[2.1917132999988098e-2,2.191174700000431e-2,43659239,5,null,null,null,null,null,null,null],[2.5211938999746053e-2,2.5211960000000033e-2,50222441,6,null,null,null,null,null,null,null],[2.7821570000014617e-2,2.7821529000000567e-2,55420970,7,null,null,null,null,null,null,null],[3.26131069996336e-2,3.261292899999546e-2,64965278,8,null,null,null,null,null,null,null],[3.607944499981386e-2,3.607341600000069e-2,71870360,9,null,null,null,null,null,null,null],[4.100149399982911e-2,4.100118900000638e-2,81674751,10,null,null,null,null,null,null,null],[4.412657200009562e-2,4.41269009999985e-2,87901288,11,null,null,null,null,null,null,null],[4.975815400030115e-2,4.975105100000121e-2,99117905,12,null,null,null,null,null,null,null],[5.236958400018921e-2,5.236255799999867e-2,104319582,13,null,null,null,null,null,null,null],[5.5950605000361975e-2,5.595015800000169e-2,111453277,14,null,null,null,null,null,null,null],[6.0200064000127895e-2,6.0199649999994165e-2,119917993,15,null,null,null,null,null,null,null],[6.371274799948878e-2,6.371221399999882e-2,126915144,16,null,null,null,null,null,null,null],[7.076924099965254e-2,7.076855000000393e-2,140971421,17,null,null,null,null,null,null,null],[7.626865299971541e-2,7.626798100000087e-2,151926194,18,null,null,null,null,null,null,null],[8.47573149994787e-2,8.473508800000218e-2,168836970,19,null,null,null,null,null,null,null],[8.437865900032193e-2,8.437792600000193e-2,168081186,20,null,null,null,null,null,null,null],[8.7004741999408e-2,8.699320500000596e-2,173313508,21,null,null,null,null,null,null,null],[0.10007723300077487,0.10007631500000258,199352341,22,null,null,null,null,null,null,null],[0.10371524800029874,0.10369821199999762,206598956,23,null,null,null,null,null,null,null],[0.11516233000020293,0.11516118899999839,229401564,25,null,null,null,null,null,null,null],[0.1116999180003404,0.11169891699999823,222505090,26,null,null,null,null,null,null,null],[0.1222060860000056,0.12220493799999588,243432767,27,null,null,null,null,null,null,null],[0.11628019599993422,0.1162788990000081,231628158,28,null,null,null,null,null,null,null],[0.12317499900018447,0.1231736360000042,245362339,30,null,null,null,null,null,null,null],[0.12817238499974337,0.12817092799998875,255316711,31,null,null,null,null,null,null,null],[0.1355673489997571,0.13556061900000316,270047859,33,null,null,null,null,null,null,null],[0.1414783210002497,0.14146428699999092,281822168,35,null,null,null,null,null,null,null],[0.14710562999971444,0.14709189799999933,293031500,36,null,null,null,null,null,null,null],[0.15307397800006584,0.1530722580000088,304920218,38,null,null,null,null,null,null,null],[0.17381271700014622,0.1738111100000026,346231840,40,null,null,null,null,null,null,null],[0.1734175130004587,0.17341569399999912,345444344,42,null,null,null,null,null,null,null],[0.2082519309997224,0.20822998500000267,414837678,44,null,null,null,null,null,null,null],[0.20506827400004113,0.20505860100000461,408491596,47,null,null,null,null,null,null,null],[0.20512327200049185,0.20512096000000213,408601228,49,null,null,null,null,null,null,null],[0.2106375029998162,0.2106349310000013,419584902,52,null,null,null,null,null,null,null],[0.2206458090004162,0.2206432110000094,439521530,54,null,null,null,null,null,null,null],[0.23217467900030897,0.23217183599999203,462486496,57,null,null,null,null,null,null,null],[0.24098477400002594,0.24096993300000236,480037110,60,null,null,null,null,null,null,null],[0.2523891589999039,0.252386247000004,502753696,63,null,null,null,null,null,null,null],[0.26778634800029977,0.26777832100000865,533424214,66,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.321278156905456e-5,"confIntUDX":2.0014747469060228e-5,"confIntCL":5.0e-2},"estPoint":4.002405826920141e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.3645344876553906e-4,"confIntUDX":3.8844563372608665e-4,"confIntCL":5.0e-2},"estPoint":0.9995180362322155},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.54357532900292e-4,"confIntUDX":6.868039487090028e-4,"confIntCL":5.0e-2},"estPoint":-5.172148492991144e-4},"iters":{"estError":{"confIntLDX":3.3403718698032936e-5,"confIntUDX":4.5042943381931946e-5,"confIntCL":5.0e-2},"estPoint":4.028950101154401e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.3773554110513053e-5,"confIntUDX":2.368984051155525e-5,"confIntCL":5.0e-2},"estPoint":5.010562152886564e-5},"anOutlierVar":{"ovFraction":2.1728395061728405e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.9043660463083584e-3,3.906722081311098e-3,3.909078116313837e-3,3.9114341513165765e-3,3.913790186319316e-3,3.916146221322055e-3,3.918502256324795e-3,3.920858291327534e-3,3.923214326330273e-3,3.925570361333013e-3,3.927926396335752e-3,3.930282431338491e-3,3.932638466341231e-3,3.9349945013439705e-3,3.937350536346709e-3,3.939706571349449e-3,3.942062606352189e-3,3.944418641354927e-3,3.946774676357667e-3,3.949130711360407e-3,3.9514867463631455e-3,3.953842781365885e-3,3.956198816368625e-3,3.958554851371364e-3,3.960910886374103e-3,3.963266921376843e-3,3.965622956379582e-3,3.967978991382321e-3,3.970335026385061e-3,3.9726910613878e-3,3.975047096390539e-3,3.977403131393279e-3,3.979759166396018e-3,3.9821152013987575e-3,3.984471236401497e-3,3.986827271404236e-3,3.989183306406976e-3,3.991539341409715e-3,3.993895376412454e-3,3.996251411415194e-3,3.998607446417933e-3,4.000963481420672e-3,4.003319516423412e-3,4.0056755514261515e-3,4.00803158642889e-3,4.01038762143163e-3,4.01274365643437e-3,4.015099691437108e-3,4.017455726439848e-3,4.019811761442588e-3,4.0221677964453265e-3,4.024523831448066e-3,4.026879866450806e-3,4.0292359014535446e-3,4.031591936456284e-3,4.033947971459024e-3,4.036304006461763e-3,4.038660041464502e-3,4.041016076467242e-3,4.043372111469981e-3,4.04572814647272e-3,4.04808418147546e-3,4.050440216478199e-3,4.0527962514809385e-3,4.055152286483678e-3,4.057508321486417e-3,4.059864356489157e-3,4.062220391491896e-3,4.064576426494636e-3,4.066932461497375e-3,4.069288496500114e-3,4.071644531502854e-3,4.074000566505593e-3,4.0763566015083325e-3,4.078712636511072e-3,4.081068671513811e-3,4.0834247065165506e-3,4.08578074151929e-3,4.088136776522029e-3,4.090492811524769e-3,4.092848846527508e-3,4.095204881530247e-3,4.097560916532987e-3,4.099916951535726e-3,4.102272986538465e-3,4.104629021541205e-3,4.1069850565439445e-3,4.109341091546683e-3,4.111697126549423e-3,4.114053161552163e-3,4.116409196554901e-3,4.118765231557641e-3,4.121121266560381e-3,4.1234773015631195e-3,4.125833336565859e-3,4.128189371568599e-3,4.130545406571338e-3,4.132901441574077e-3,4.135257476576817e-3,4.137613511579556e-3,4.139969546582295e-3,4.142325581585035e-3,4.144681616587774e-3,4.1470376515905134e-3,4.149393686593253e-3,4.151749721595992e-3,4.1541057565987315e-3,4.156461791601471e-3,4.15881782660421e-3,4.16117386160695e-3,4.163529896609689e-3,4.165885931612428e-3,4.168241966615168e-3,4.170598001617907e-3,4.172954036620646e-3,4.175310071623386e-3,4.1776661066261255e-3,4.180022141628864e-3,4.182378176631604e-3,4.184734211634344e-3,4.187090246637082e-3,4.189446281639822e-3,4.191802316642562e-3,4.1941583516453005e-3,4.19651438664804e-3,4.19887042165078e-3,4.2012264566535186e-3,4.203582491656258e-3],"kdeType":"time","kdePDF":[839.7206085805137,897.691586990269,1012.1844198318238,1180.243883175856,1397.3218444202835,1657.2078896178332,1952.0327057488844,2272.393786754268,2607.6354604376756,2946.290771492242,3276.6676499708597,3587.541608134861,3868.9051364906854,4112.720048339064,4313.62052419102,4469.517483491529,4582.055741324405,4656.873116360344,4703.607308890328,4735.596703809347,4769.231075091032,4822.9321270706305,4915.78333675714,5065.880630536278,5288.532507311854,5594.4894532644585,5988.415792600895,6467.821713921061,7022.642195132035,7635.58198785113,8283.248043463243,8937.976426065841,9570.14935580374,10150.711689939091,10653.555028964338,11057.45471547211,11347.321688226895,11514.655201084466,11557.229216041082,11478.182905157486,11284.782607195013,10987.156005768908,10597.26174529848,10128.25953286503,9594.312750048597,9010.722082907372,8394.188452732975,7762.960968116527,7136.649751322013,6535.566486979087,5979.575676202882,5486.567474998964,5070.7691103330035,4741.173204397674,4500.365875957544,4343.985687200751,4260.948058196062,4234.448314592861,4243.63325468424,4265.7281877160995,4278.340987770073,4261.6462516393585,4200.1816309673795,4084.056915299384,3909.470251190093,3678.5276182517423,3398.4543273086156,3080.357283858767,2737.7359847212238,2384.94677733543,2035.8024695444449,1702.4456115646058,1394.5783854025387,1119.0748060500905,879.9501458569757,678.623929765606,514.3894144727395,384.99429991446647,287.24245418716833,217.54118609568775,172.33909146539426,148.4220538133988,143.05678267780382,153.99057433877525,179.3319392832749,217.3490189979365,266.2310038395179,323.8614730852015,387.6508332877725,454.4670238210268,520.6892330696026,582.3896006292911,635.6253665076508,676.8025690234175,703.0566284007224,712.5888119247172,704.9026953668136,680.9007567083646,642.8249169767629,594.0509667405234,538.7695660452753,481.60104867850623,427.19508022496655,379.859739344735,343.250921669579,320.1368363020303,312.2386178075357,320.14018517476137,343.2595575300304,379.8784276004754,427.2334821622779,481.6775974055273,538.9182037958242,594.3323358974968,643.3442381845389,681.8353036574775,706.5423326169004,715.3932303585547,707.7322969618108,684.4005210233889,647.6572248560572,600.9533046718876,548.58767081106,495.29267827112614,445.79889168905726,404.42478547747,374.7257496856452,359.22324801996194]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":13,"reportName":"ByteString/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":38,"lowSevere":0},"reportMeasured":[[3.6986209997849073e-3,3.6989480000073627e-3,7368635,1,null,null,null,null,null,null,null],[8.227787000578246e-3,8.227860999994618e-3,16390368,2,null,null,null,null,null,null,null],[1.1789797999881557e-2,1.1789871000004837e-2,23485953,3,null,null,null,null,null,null,null],[1.5494723999836424e-2,1.5494763000006628e-2,30865921,4,null,null,null,null,null,null,null],[2.0106359999772394e-2,2.0106253999998103e-2,40052124,5,null,null,null,null,null,null,null],[2.402420999987953e-2,2.4024095000001466e-2,47856403,6,null,null,null,null,null,null,null],[2.8131004999522702e-2,2.8130798999995932e-2,56037057,7,null,null,null,null,null,null,null],[3.14344060006988e-2,3.143435100000147e-2,62617652,8,null,null,null,null,null,null,null],[3.5935726999923645e-2,3.593547699999533e-2,71584030,9,null,null,null,null,null,null,null],[3.98295800005144e-2,3.982920500000375e-2,79340101,10,null,null,null,null,null,null,null],[4.389816100047028e-2,4.3897825000001944e-2,87444933,11,null,null,null,null,null,null,null],[4.727952099983668e-2,4.7273438999994255e-2,94180530,12,null,null,null,null,null,null,null],[5.1878640999348136e-2,5.187826899999948e-2,103341875,13,null,null,null,null,null,null,null],[5.591469099999813e-2,5.591427800000304e-2,111381751,14,null,null,null,null,null,null,null],[6.084711699986656e-2,6.084653000000628e-2,121206722,15,null,null,null,null,null,null,null],[6.302184199921612e-2,6.302139299999965e-2,125538990,16,null,null,null,null,null,null,null],[6.833554000058939e-2,6.833488899999907e-2,136123648,17,null,null,null,null,null,null,null],[7.306696799969359e-2,7.306639000000814e-2,145548663,18,null,null,null,null,null,null,null],[7.696347900036926e-2,7.69564410000072e-2,153309960,19,null,null,null,null,null,null,null],[7.900796200010518e-2,7.90082219999988e-2,157384800,20,null,null,null,null,null,null,null],[8.329252900057327e-2,8.32918029999945e-2,165917614,21,null,null,null,null,null,null,null],[8.649809500002448e-2,8.64972730000062e-2,172302994,22,null,null,null,null,null,null,null],[9.088428799987014e-2,9.087754100001177e-2,181040132,23,null,null,null,null,null,null,null],[9.87212569998519e-2,9.871439100000146e-2,196650849,25,null,null,null,null,null,null,null],[0.10432727899933525,0.10432632100000205,207818627,26,null,null,null,null,null,null,null],[0.10755400299967732,0.10755292499999314,214245840,27,null,null,null,null,null,null,null],[0.11128935600027035,0.1112883329999903,221686773,28,null,null,null,null,null,null,null],[0.12033553099990968,0.12032691599999623,239705959,30,null,null,null,null,null,null,null],[0.12424444999942352,0.12423523700000771,247492506,31,null,null,null,null,null,null,null],[0.1378953769999498,0.13787743199999625,274684888,33,null,null,null,null,null,null,null],[0.14161267100007535,0.1416048520000004,282089391,35,null,null,null,null,null,null,null],[0.14346379500057083,0.1434623110000075,285777308,36,null,null,null,null,null,null,null],[0.1526866219992371,0.15268497800001057,304148796,38,null,null,null,null,null,null,null],[0.16002913499960414,0.16002722200001074,318774503,40,null,null,null,null,null,null,null],[0.16993233499943017,0.16993046899999342,338501726,42,null,null,null,null,null,null,null],[0.17633686099998158,0.1763347770000081,351259067,44,null,null,null,null,null,null,null],[0.18823027999951591,0.1882221950000087,374950585,47,null,null,null,null,null,null,null],[0.1956163690001631,0.19560684799999706,389663671,49,null,null,null,null,null,null,null],[0.2076564619992496,0.2076541619999972,413647371,52,null,null,null,null,null,null,null],[0.2184238390000246,0.21842126500000347,435095302,54,null,null,null,null,null,null,null],[0.2284621260005224,0.2284532850000005,455091479,57,null,null,null,null,null,null,null],[0.23935541700029717,0.2393440620000007,476791407,60,null,null,null,null,null,null,null],[0.25077386800057866,0.25077085200000226,499535800,63,null,null,null,null,null,null,null],[0.2629461740007173,0.26294295799999645,523782551,66,null,null,null,null,null,null,null],[0.28482179700040433,0.2848195099999913,567361141,69,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.495646704464693e-5,"confIntUDX":4.9630669471754235e-5,"confIntCL":5.0e-2},"estPoint":4.109310544482966e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.142496691383111e-3,"confIntUDX":1.3757930319761025e-3,"confIntCL":5.0e-2},"estPoint":0.9979520202303545},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.1416344066406223e-3,"confIntUDX":8.217696948966812e-4,"confIntCL":5.0e-2},"estPoint":-8.348309251168644e-4},"iters":{"estError":{"confIntLDX":4.2730611292938515e-5,"confIntUDX":6.710230883255446e-5,"confIntCL":5.0e-2},"estPoint":4.162001192155132e-3}}}],"anStdDev":{"estError":{"confIntLDX":3.1104105138616135e-5,"confIntUDX":5.869870754241165e-5,"confIntCL":5.0e-2},"estPoint":1.1867642757769951e-4},"anOutlierVar":{"ovFraction":0.12844640214234063,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.917860838911717e-3,3.922891731729505e-3,3.927922624547293e-3,3.932953517365081e-3,3.937984410182869e-3,3.943015303000657e-3,3.948046195818445e-3,3.953077088636233e-3,3.95810798145402e-3,3.963138874271808e-3,3.968169767089596e-3,3.9732006599073845e-3,3.9782315527251725e-3,3.983262445542961e-3,3.988293338360749e-3,3.993324231178537e-3,3.998355123996325e-3,4.003386016814113e-3,4.008416909631901e-3,4.013447802449689e-3,4.018478695267477e-3,4.023509588085265e-3,4.028540480903053e-3,4.033571373720841e-3,4.0386022665386285e-3,4.0436331593564166e-3,4.048664052174205e-3,4.053694944991993e-3,4.058725837809781e-3,4.063756730627569e-3,4.068787623445357e-3,4.073818516263145e-3,4.078849409080933e-3,4.083880301898721e-3,4.088911194716509e-3,4.093942087534297e-3,4.098972980352085e-3,4.104003873169873e-3,4.1090347659876614e-3,4.1140656588054495e-3,4.119096551623237e-3,4.124127444441025e-3,4.129158337258813e-3,4.134189230076601e-3,4.139220122894389e-3,4.144251015712177e-3,4.149281908529965e-3,4.154312801347753e-3,4.159343694165541e-3,4.164374586983329e-3,4.169405479801117e-3,4.1744363726189055e-3,4.1794672654366935e-3,4.184498158254482e-3,4.18952905107227e-3,4.194559943890057e-3,4.199590836707845e-3,4.204621729525633e-3,4.209652622343421e-3,4.214683515161209e-3,4.219714407978997e-3,4.224745300796785e-3,4.229776193614573e-3,4.234807086432361e-3,4.2398379792501495e-3,4.2448688720679376e-3,4.249899764885726e-3,4.254930657703514e-3,4.259961550521302e-3,4.26499244333909e-3,4.270023336156878e-3,4.275054228974666e-3,4.280085121792453e-3,4.285116014610241e-3,4.290146907428029e-3,4.295177800245817e-3,4.3002086930636054e-3,4.3052395858813935e-3,4.310270478699182e-3,4.31530137151697e-3,4.320332264334758e-3,4.325363157152546e-3,4.330394049970334e-3,4.335424942788122e-3,4.34045583560591e-3,4.345486728423698e-3,4.350517621241486e-3,4.355548514059273e-3,4.360579406877061e-3,4.3656102996948495e-3,4.3706411925126375e-3,4.375672085330426e-3,4.380702978148214e-3,4.385733870966002e-3,4.39076476378379e-3,4.395795656601578e-3,4.400826549419366e-3,4.405857442237154e-3,4.410888335054942e-3,4.41591922787273e-3,4.420950120690518e-3,4.425981013508306e-3,4.431011906326094e-3,4.436042799143882e-3,4.44107369196167e-3,4.446104584779458e-3,4.451135477597246e-3,4.456166370415034e-3,4.461197263232822e-3,4.46622815605061e-3,4.471259048868398e-3,4.476289941686186e-3,4.481320834503974e-3,4.486351727321762e-3,4.49138262013955e-3,4.496413512957338e-3,4.5014444057751265e-3,4.5064752985929145e-3,4.511506191410702e-3,4.51653708422849e-3,4.521567977046278e-3,4.526598869864066e-3,4.531629762681854e-3,4.536660655499642e-3,4.54169154831743e-3,4.546722441135218e-3,4.551753333953006e-3,4.556784226770794e-3],"kdeType":"time","kdePDF":[292.63363038353594,316.9824720615486,365.60170202461086,438.31921088524325,534.849628019641,654.7878444809832,797.6329326889798,962.851582207484,1149.9756686792616,1358.7114496604318,1589.023198670401,1841.1469024348635,2115.4935338019486,2412.417299987644,2731.849938811908,3072.83264185146,3433.0060350030526,3808.1394579268062,4191.788818479369,4575.165454429801,4947.277426714598,5295.3724977859,5605.673111061562,5864.352933393015,6058.666940322958,6178.11744246498,6215.521410505897,6167.843829573971,6036.680022598828,5828.306848884334,5553.274951561105,5225.574774585579,4861.468173174463,4478.124556680581,4092.2267055803086,3718.711650869739,3369.7864707183517,3054.312903869864,2777.5974383792495,2541.565617192601,2345.250323521759,2185.490492658699,2057.722017666341,1956.7460380011573,1877.3782804114965,1814.9123465714504,1765.36518724577,1725.5099668075409,1692.735713935273,1664.8001761515222,1639.5579149643904,1614.746513324072,1587.8983793547575,1556.4155970721124,1517.8056755661387,1470.0349238749784,1411.9228874586922,1343.4841314230107,1266.127540930958,1182.648162617727,1096.9872222798508,1013.7832589743274,937.780737809048,873.192609927644,823.1239660813659,789.1535407375237,771.1411725333128,767.2886678797665,774.4370078988185,788.5428943507535,805.2494338810089,820.4541278947571,830.7839494477377,833.9103733089169,828.6717680592438,815.0091670396421,793.7558112578373,766.343669275136,734.4968405621469,699.9718173989265,664.3817214919121,629.1127889082273,595.3147764693933,563.9297569471054,535.7200112715735,511.26529949624415,490.9186353675738,474.73119045117085,462.3740630437056,453.0920175644428,445.7198050381191,438.77687721549796,430.6357997877727,419.73956146409927,404.82901453306584,385.13761057009424,360.5171898228873,331.47362638367537,299.1102448597261,264.99496111363845,230.9796443886665,199.0047288370161,170.91850998222648,148.3309387179248,132.5095591176728,124.31429268777632,124.16101382409268,132.00269033495312,147.32085167581073,169.127290584888,195.98328151484296,226.04826384862156,257.1697891299465,287.02095615764125,313.28165867598295,333.84830655907393,347.0465664657594,351.81620698111965,347.8382747264169,335.582728438279,316.267579579916,291.7353845594984,264.26598683110734,236.35271257404406,210.47126847324296,188.86673290128428,173.37626605925425,165.29636144253521]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":14,"reportName":"ByteString/HashMap/revsorted","reportOutliers":{"highSevere":1,"highMild":2,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.483655000309227e-3,3.4838549999989255e-3,6940274,1,null,null,null,null,null,null,null],[8.150654999553808e-3,8.15074000000493e-3,16236721,2,null,null,null,null,null,null,null],[1.210476899996138e-2,1.2098733999991396e-2,24113391,3,null,null,null,null,null,null,null],[1.5876741999818478e-2,1.5876730000002226e-2,31626893,4,null,null,null,null,null,null,null],[2.083893600047304e-2,2.083882499999845e-2,41511349,5,null,null,null,null,null,null,null],[2.4013084000216622e-2,2.4014465999997014e-2,47837220,6,null,null,null,null,null,null,null],[2.8466252999351127e-2,2.846621000000482e-2,56705134,7,null,null,null,null,null,null,null],[3.243092000047909e-2,3.243083600000318e-2,64602576,8,null,null,null,null,null,null,null],[3.628020099949936e-2,3.627986499999736e-2,72269974,9,null,null,null,null,null,null,null],[3.989974400064966e-2,3.989951399999825e-2,79480199,10,null,null,null,null,null,null,null],[4.368214900023304e-2,4.3681866000000014e-2,87014643,11,null,null,null,null,null,null,null],[4.847340600008465e-2,4.847305399999868e-2,96558781,12,null,null,null,null,null,null,null],[5.230804899929353e-2,5.230129000000261e-2,104197087,13,null,null,null,null,null,null,null],[5.654618499920616e-2,5.653979599999559e-2,112639667,14,null,null,null,null,null,null,null],[6.308197999987897e-2,6.303111500000114e-2,125659720,15,null,null,null,null,null,null,null],[6.480945099974633e-2,6.480899700000009e-2,129100147,16,null,null,null,null,null,null,null],[6.776835800064873e-2,6.776771799999892e-2,134993694,17,null,null,null,null,null,null,null],[7.286090400066314e-2,7.28422449999897e-2,145137863,18,null,null,null,null,null,null,null],[7.642078600019886e-2,7.641511899998932e-2,152229387,19,null,null,null,null,null,null,null],[8.13036320005267e-2,8.130281200000411e-2,161955673,20,null,null,null,null,null,null,null],[8.46156190000329e-2,8.461584100000152e-2,168555139,21,null,null,null,null,null,null,null],[8.841974200004188e-2,8.841884199999583e-2,176130885,22,null,null,null,null,null,null,null],[9.315548700033105e-2,9.315456999999583e-2,185564167,23,null,null,null,null,null,null,null],[0.10022901499996806,0.10022829599999739,199655170,25,null,null,null,null,null,null,null],[0.10541847500007862,0.10541948699999182,209995886,26,null,null,null,null,null,null,null],[0.11121045400068397,0.11120927300000005,221529160,27,null,null,null,null,null,null,null],[0.11383615599970653,0.11383502599998963,226759761,28,null,null,null,null,null,null,null],[0.12196529700031533,0.12195705299998849,242952590,30,null,null,null,null,null,null,null],[0.13246785800038197,0.13245437099999435,263873816,31,null,null,null,null,null,null,null],[0.14293838899993716,0.1429311819999981,284734110,33,null,null,null,null,null,null,null],[0.15370618199995079,0.1537046269999962,306179886,35,null,null,null,null,null,null,null],[0.16212746200017136,0.16212556400000722,322954257,36,null,null,null,null,null,null,null],[0.15969439299988153,0.15969274700000824,318108211,38,null,null,null,null,null,null,null],[0.1625515470004757,0.162542277,323800254,40,null,null,null,null,null,null,null],[0.17143731200030743,0.1714151070000014,341500134,42,null,null,null,null,null,null,null],[0.18451108099998237,0.18450896899999236,367542147,44,null,null,null,null,null,null,null],[0.19326596799965046,0.19326367399999356,384981520,47,null,null,null,null,null,null,null],[0.21001610399980564,0.21001413199999774,418348402,49,null,null,null,null,null,null,null],[0.21647058300004574,0.21646809000000644,431204626,52,null,null,null,null,null,null,null],[0.2240731739993862,0.22405740499999638,446349060,54,null,null,null,null,null,null,null],[0.23251180300030683,0.23250292000000172,463158123,57,null,null,null,null,null,null,null],[0.24321701999997458,0.243214119000001,484482705,60,null,null,null,null,null,null,null],[0.25720452000041405,0.2571950840000028,512345651,63,null,null,null,null,null,null,null],[0.2731833210000332,0.27317427799999905,544174898,66,null,null,null,null,null,null,null]]}]'></div>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts groups left-to-right, alphabetically</li>+ <li><em>colexical</em> order sorts groups right-to-left, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>